diff --git a/DEPS b/DEPS index 832046d..2a7799c2 100644 --- a/DEPS +++ b/DEPS
@@ -162,11 +162,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': '8391bac5c6f07fd01e78cc140b01119de73a749d', + 'skia_revision': 'e2a903e18b5963379bff86ff505a840cf1b52352', # 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': '46e424ecc720115690fc6a2649654aee0cbfe1da', + 'v8_revision': 'f1aa36df853b9956b46f3d792b59255c3b6fff46', # 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. @@ -174,15 +174,15 @@ # 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': 'e34564bafe835562087de0a2fb3c8386e0f6b0dd', + 'angle_revision': '2f2ea8b465ed2c29d7a68edaada9e4914b0707e8', # 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': 'e704325746709dec25529cee9436c9165f3b7e69', + 'swiftshader_revision': 'e9b6f28fdd71dfd7364729bea373d642b9af4e19', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '9d3a62e826277fa3e4864c8d4c7d49af2a0f3726', + 'pdfium_revision': '3681d5f8b5d7978f3bd3123e1c97bb0b3de8e16d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -225,7 +225,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'cbc960899a68fecd002e96a520dbd5c3cb3367da', + 'catapult_revision': '6a17fd7fb73bcef8a5fb1f6bbc0a2d40dc1b209f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -853,7 +853,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '4599045c795c98ef18e4204ee012adbc38e87c5f', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '58f19530fefa16e4c8e20768edb376d6e3738d99', 'condition': 'checkout_linux', }, @@ -878,7 +878,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '3f79763629b43de8cb139f857e386be25d0ba058', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'c6be56ecedf91cd65eb888cd56c1099181505113', 'src/third_party/devtools-node-modules': Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'), @@ -923,7 +923,7 @@ # Used for embedded builds. CrOS & Linux use the system version. 'src/third_party/fontconfig/src': { - 'url': Var('chromium_git') + '/external/fontconfig.git' + '@' + 'ba206df9b9a7ca300265f650842c1459ff7c634a', + 'url': Var('chromium_git') + '/external/fontconfig.git' + '@' + '65087ac7ce4cc5f2109967c1380b474955dcb590', 'condition': 'checkout_linux', }, @@ -1257,7 +1257,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '56f9ee6b49fcb135a7a016bc12ca78a33486688a', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'edf199a0b96c320b90fbbbc285f5587d6317a8df', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1422,7 +1422,7 @@ Var('chromium_git') + '/external/github.com/SeleniumHQ/selenium/py.git' + '@' + 'd0045ec570c1a77612db35d1e92f05e1d27b4d53', 'src/third_party/webgl/src': - Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'abaae129d9a0c6e1e092067e0b105475df43352e', + Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'f4ddbafcf24befc473497eaa0d83016baafdff52', 'src/third_party/webrtc': Var('webrtc_git') + '/src.git' + '@' + '86314cfb5dc09bba15a1607585e9ddd544078ac5', @@ -1487,7 +1487,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@377dbef2b5ab30cc79c84a6493619602fe3f6713', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f314a97e3bde9fe9236e160aad75d1fc313776fe', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn index 85bc544..0975d03e 100644 --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn
@@ -759,6 +759,7 @@ java_group("android_webview_java") { deps = [ ":browser_java", + ":services_java", ] } @@ -859,8 +860,9 @@ "java/src/org/chromium/android_webview/ui/util/WebViewCrashLogParser.java", ] deps = [ + ":common_aidl_java", ":common_commandline_java", - ":common_crash_info_java", + ":common_crash_java", # This includes AwResource, which may be called via JNI. We're including it # here because there's currently no good way to enforce that it gets included @@ -869,7 +871,6 @@ ":common_platform_services_java", ":common_variations_utils_java", ":resources", - ":services_java", ":strings_grd", ":system_webview_manifest", "//base:base_java", @@ -1010,9 +1011,11 @@ ] } -android_library("common_crash_info_java") { - java_files = - [ "java/src/org/chromium/android_webview/common/crash/CrashInfo.java" ] +android_library("common_crash_java") { + java_files = [ + "java/src/org/chromium/android_webview/common/crash/CrashInfo.java", + "java/src/org/chromium/android_webview/common/crash/SystemWideCrashDirectories.java", + ] deps = [ "//base:base_java", @@ -1020,8 +1023,10 @@ } android_library("common_java") { - java_files = - [ "java/src/org/chromium/android_webview/common/AwResource.java" ] + java_files = [ + "java/src/org/chromium/android_webview/common/AwResource.java", + "java/src/org/chromium/android_webview/common/ServiceNames.java", + ] deps = [ "//base:base_java", ] @@ -1050,6 +1055,13 @@ ] } +android_library("common_aidl_java") { + srcjar_deps = [ + ":services_crash_receiver_aidl", + ":services_variations_seed_server_aidl", + ] +} + # Keep WebView's services separate from other WebView code to keep their deps clean # (and make them easy to move). android_library("services_java") { @@ -1062,8 +1074,9 @@ "java/src/org/chromium/android_webview/services/VariationsSeedServer.java", ] deps = [ + ":common_aidl_java", ":common_commandline_java", - ":common_crash_info_java", + ":common_crash_java", ":common_platform_services_java", ":common_variations_utils_java", ":system_webview_manifest", @@ -1074,10 +1087,6 @@ "//components/variations/android:variations_java", "//components/version_info/android:version_constants_java", ] - srcjar_deps = [ - ":services_crash_receiver_aidl", - ":services_variations_seed_server_aidl", - ] android_manifest_for_lint = system_webview_android_manifest min_sdk_version = 21 }
diff --git a/android_webview/browser/gfx/surfaces_instance.cc b/android_webview/browser/gfx/surfaces_instance.cc index fd84a79..dd8bafd 100644 --- a/android_webview/browser/gfx/surfaces_instance.cc +++ b/android_webview/browser/gfx/surfaces_instance.cc
@@ -256,9 +256,11 @@ display_->DrawAndSwap(); // SkiaRenderer generates DidReceiveSwapBuffersAck calls. if (!features::IsUsingSkiaRenderer()) { - // TODO(dlibby): Consider sending real swap timings here for webview (or - // prove why it is not needed). - display_->DidReceiveSwapBuffersAck(gfx::SwapTimings()); + // Metrics tracking in CompositorFrameReporter expects that every frame + // has non-null SwapTimings. We don't know the exact swap start/end times + // here so we use Now() as a filler. + base::TimeTicks now = base::TimeTicks::Now(); + display_->DidReceiveSwapBuffersAck({now, now}); } gl_surface_->MaybeDidPresent(gfx::PresentationFeedback( base::TimeTicks::Now(), base::TimeDelta(), 0 /* flags */));
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 f23e734..1f93921 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java +++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
@@ -16,8 +16,8 @@ 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.policy.AwPolicyProvider; -import org.chromium.android_webview.services.CrashReceiverService; import org.chromium.android_webview.services.ICrashReceiverService; import org.chromium.base.CommandLine; import org.chromium.base.ContextUtils; @@ -297,7 +297,7 @@ } final Intent intent = new Intent(); - intent.setClassName(getWebViewPackageName(), CrashReceiverService.class.getName()); + intent.setClassName(getWebViewPackageName(), ServiceNames.CRASH_RECEIVER_SERVICE); ServiceConnection connection = new ServiceConnection() { @Override
diff --git a/android_webview/java/src/org/chromium/android_webview/VariationsSeedLoader.java b/android_webview/java/src/org/chromium/android_webview/VariationsSeedLoader.java index c84ee42..12d89b16 100644 --- a/android_webview/java/src/org/chromium/android_webview/VariationsSeedLoader.java +++ b/android_webview/java/src/org/chromium/android_webview/VariationsSeedLoader.java
@@ -14,9 +14,9 @@ import android.os.RemoteException; import android.os.SystemClock; +import org.chromium.android_webview.common.ServiceNames; import org.chromium.android_webview.common.variations.VariationsUtils; import org.chromium.android_webview.services.IVariationsSeedServer; -import org.chromium.android_webview.services.VariationsSeedServer; import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.VisibleForTesting; @@ -255,9 +255,10 @@ @VisibleForTesting // and non-static for overriding by tests protected Intent getServerIntent() throws NameNotFoundException { - Context c = ContextUtils.getApplicationContext() - .createPackageContext(AwBrowserProcess.getWebViewPackageName(), /*flags=*/0); - return new Intent(c, VariationsSeedServer.class); + Intent intent = new Intent(); + intent.setClassName( + AwBrowserProcess.getWebViewPackageName(), ServiceNames.VARIATIONS_SEED_SERVER); + return intent; } @VisibleForTesting
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ServiceNames.java b/android_webview/java/src/org/chromium/android_webview/common/ServiceNames.java new file mode 100644 index 0000000..4aa82cb --- /dev/null +++ b/android_webview/java/src/org/chromium/android_webview/common/ServiceNames.java
@@ -0,0 +1,20 @@ +// 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.android_webview.common; + +/** + * Defines constants containing the fully-qualified names of WebView services. + * + * This class exists to avoid having to depend on service classes just to get + * their name. + */ +public class ServiceNames { + public static final String CRASH_RECEIVER_SERVICE = + "org.chromium.android_webview.services.CrashReceiverService"; + public static final String VARIATIONS_SEED_SERVER = + "org.chromium.android_webview.services.VariationsSeedServer"; + + private ServiceNames() {} +}
diff --git a/android_webview/java/src/org/chromium/android_webview/common/crash/SystemWideCrashDirectories.java b/android_webview/java/src/org/chromium/android_webview/common/crash/SystemWideCrashDirectories.java new file mode 100644 index 0000000..fe3bc09c --- /dev/null +++ b/android_webview/java/src/org/chromium/android_webview/common/crash/SystemWideCrashDirectories.java
@@ -0,0 +1,74 @@ +// 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.android_webview.common.crash; + +import org.chromium.base.ContextUtils; + +import java.io.File; + +/** + * Contains getters for the folders where crash information will be stored. + * + * This class should NOT be called in a non-WebView UID. + */ +public class SystemWideCrashDirectories { + private static final String WEBVIEW_CRASH_LOG_DIR = "crash_logs"; + private static final String WEBVIEW_CRASH_DIR = "WebView_Crashes"; + private static final String WEBVIEW_TMP_CRASH_DIR = "WebView_Crashes_Tmp"; + + /** + * Create the directory in which WebView will log crashes info. + * @return a reference to the created directory, or null if the creation failed. + */ + public static File getWebViewCrashLogDir() { + return new File(getWebViewCrashDir(), WEBVIEW_CRASH_LOG_DIR); + } + + /** + * Create the directory in which WebView will log crashes info. + * @return a reference to the created directory, or null if the creation failed. + */ + public static File getOrCreateWebViewCrashLogDir() { + File dir = new File(getOrCreateWebViewCrashDir(), WEBVIEW_CRASH_LOG_DIR); + return getOrCreateDir(dir); + } + + /** + * Fetch the crash directory where WebView stores its minidumps. + * @return a File pointing to the crash directory. + */ + public static File getWebViewCrashDir() { + return new File(ContextUtils.getApplicationContext().getCacheDir(), WEBVIEW_CRASH_DIR); + } + + /** + * Create the directory in which WebView will store its minidumps. + * WebView needs a crash directory different from Chrome's to ensure Chrome's and WebView's + * minidump handling won't clash in cases where both Chrome and WebView are provided by the + * same app (Monochrome). + * @return a reference to the created directory, or null if the creation failed. + */ + public static File getOrCreateWebViewCrashDir() { + return getOrCreateDir(getWebViewCrashDir()); + } + + /** + * Directory where we store files temporarily when copying from an app process. + */ + public static File getWebViewTmpCrashDir() { + return new File(ContextUtils.getApplicationContext().getCacheDir(), WEBVIEW_TMP_CRASH_DIR); + } + + private static File getOrCreateDir(File dir) { + // Call mkdir before isDirectory to ensure that if another thread created the directory + // just before the call to mkdir, the current thread fails mkdir, but passes isDirectory. + if (dir.mkdir() || dir.isDirectory()) { + return dir; + } + return null; + } + + private SystemWideCrashDirectories() {} +}
diff --git a/android_webview/java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java b/android_webview/java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java index f941627..906566e 100644 --- a/android_webview/java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java +++ b/android_webview/java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java
@@ -9,6 +9,7 @@ import org.chromium.android_webview.common.CommandLineUtil; import org.chromium.android_webview.common.PlatformServiceBridge; +import org.chromium.android_webview.common.crash.SystemWideCrashDirectories; import org.chromium.base.CommandLine; import org.chromium.base.ContextUtils; import org.chromium.base.ThreadUtils; @@ -36,7 +37,7 @@ @Override public File getCrashParentDir() { - return CrashReceiverService.getWebViewCrashDir(); + return SystemWideCrashDirectories.getWebViewCrashDir(); } @Override
diff --git a/android_webview/java/src/org/chromium/android_webview/services/CrashReceiverService.java b/android_webview/java/src/org/chromium/android_webview/services/CrashReceiverService.java index dbfb98802..a1b6865 100644 --- a/android_webview/java/src/org/chromium/android_webview/services/CrashReceiverService.java +++ b/android_webview/java/src/org/chromium/android_webview/services/CrashReceiverService.java
@@ -13,7 +13,7 @@ import android.os.ParcelFileDescriptor; import org.chromium.android_webview.common.crash.CrashInfo; -import org.chromium.base.ContextUtils; +import org.chromium.android_webview.common.crash.SystemWideCrashDirectories; import org.chromium.base.Log; import org.chromium.base.VisibleForTesting; import org.chromium.components.background_task_scheduler.TaskIds; @@ -32,10 +32,6 @@ */ public class CrashReceiverService extends Service { private static final String TAG = "CrashReceiverService"; - - private static final String WEBVIEW_CRASH_DIR = "WebView_Crashes"; - private static final String WEBVIEW_TMP_CRASH_DIR = "WebView_Crashes_Tmp"; - private static final String WEBVIEW_CRASH_LOG_DIR = "crash_logs"; private static final String WEBVIEW_CRASH_LOG_SUFFIX = "_log.json"; private final Object mCopyingLock = new Object(); @@ -117,15 +113,16 @@ @VisibleForTesting public static boolean copyMinidumps(int uid, ParcelFileDescriptor[] fileDescriptors, List<Map<String, String>> crashesInfo) { - CrashFileManager crashFileManager = new CrashFileManager(getOrCreateWebViewCrashDir()); + CrashFileManager crashFileManager = + new CrashFileManager(SystemWideCrashDirectories.getOrCreateWebViewCrashDir()); boolean copiedAnything = false; if (fileDescriptors != null) { for (int i = 0; i < fileDescriptors.length; i++) { ParcelFileDescriptor fd = fileDescriptors[i]; if (fd == null) continue; try { - File copiedFile = crashFileManager.copyMinidumpFromFD( - fd.getFileDescriptor(), getWebViewTmpCrashDir(), uid); + File copiedFile = crashFileManager.copyMinidumpFromFD(fd.getFileDescriptor(), + SystemWideCrashDirectories.getWebViewTmpCrashDir(), uid); if (copiedFile == null) { Log.w(TAG, "failed to copy minidump from " + fd.toString()); // TODO(gsennton): add UMA metric to ensure we aren't losing too many @@ -134,7 +131,8 @@ copiedAnything = true; if (crashesInfo != null) { Map<String, String> crashInfo = crashesInfo.get(i); - File logFile = new File(getOrCreateWebViewCrashLogDir(), + File logFile = new File( + SystemWideCrashDirectories.getOrCreateWebViewCrashLogDir(), copiedFile.getName() + WEBVIEW_CRASH_LOG_SUFFIX); writeCrashInfoToLogFile(logFile, copiedFile, crashInfo); } @@ -187,7 +185,7 @@ */ @VisibleForTesting public static void deleteFilesInWebViewTmpDirIfExists() { - deleteFilesInDirIfExists(getWebViewTmpCrashDir()); + deleteFilesInDirIfExists(SystemWideCrashDirectories.getWebViewTmpCrashDir()); } private static void deleteFilesInDirIfExists(File directory) { @@ -203,61 +201,6 @@ } } - private static File getOrCreateDir(File dir) { - // Call mkdir before isDirectory to ensure that if another thread created the directory - // just before the call to mkdir, the current thread fails mkdir, but passes isDirectory. - if (dir.mkdir() || dir.isDirectory()) { - return dir; - } - return null; - } - - /** - * Create the directory in which WebView will store its minidumps. - * WebView needs a crash directory different from Chrome's to ensure Chrome's and WebView's - * minidump handling won't clash in cases where both Chrome and WebView are provided by the - * same app (Monochrome). - * @return a reference to the created directory, or null if the creation failed. - */ - @VisibleForTesting - public static File getOrCreateWebViewCrashDir() { - return getOrCreateDir(getWebViewCrashDir()); - } - - /** - * Fetch the crash directory where WebView stores its minidumps. - * @return a File pointing to the crash directory. - */ - @VisibleForTesting - public static File getWebViewCrashDir() { - return new File(ContextUtils.getApplicationContext().getCacheDir(), WEBVIEW_CRASH_DIR); - } - - /** - * Create the directory in which WebView will log crashes info. - * @return a reference to the created directory, or null if the creation failed. - */ - private static File getOrCreateWebViewCrashLogDir() { - File dir = new File(getOrCreateWebViewCrashDir(), WEBVIEW_CRASH_LOG_DIR); - return getOrCreateDir(dir); - } - - /** - * Create the directory in which WebView will log crashes info. - * @return a reference to the created directory, or null if the creation failed. - */ - public static File getWebViewCrashLogDir() { - return new File(getWebViewCrashDir(), WEBVIEW_CRASH_LOG_DIR); - } - - /** - * Directory where we store files temporarily when copying from an app process. - */ - @VisibleForTesting - public static File getWebViewTmpCrashDir() { - return new File(ContextUtils.getApplicationContext().getCacheDir(), WEBVIEW_TMP_CRASH_DIR); - } - @Override public IBinder onBind(Intent intent) { return mBinder;
diff --git a/android_webview/java/src/org/chromium/android_webview/ui/util/WebViewCrashInfoCollector.java b/android_webview/java/src/org/chromium/android_webview/ui/util/WebViewCrashInfoCollector.java index a8da490..f1aecfb5 100644 --- a/android_webview/java/src/org/chromium/android_webview/ui/util/WebViewCrashInfoCollector.java +++ b/android_webview/java/src/org/chromium/android_webview/ui/util/WebViewCrashInfoCollector.java
@@ -5,7 +5,7 @@ import org.chromium.android_webview.common.crash.CrashInfo; import org.chromium.android_webview.common.crash.CrashInfo.UploadState; -import org.chromium.android_webview.services.CrashReceiverService; +import org.chromium.android_webview.common.crash.SystemWideCrashDirectories; import org.chromium.base.VisibleForTesting; import org.chromium.components.minidump_uploader.CrashFileManager; @@ -24,13 +24,13 @@ public WebViewCrashInfoCollector() { CrashFileManager crashFileManager = - new CrashFileManager(CrashReceiverService.getOrCreateWebViewCrashDir()); + new CrashFileManager(SystemWideCrashDirectories.getOrCreateWebViewCrashDir()); mCrashInfoLoaders = new CrashInfoLoader[] { new UploadedCrashesInfoLoader(crashFileManager.getCrashUploadLogFile()), new UnuploadedFilesStateLoader(crashFileManager), - new WebViewCrashLogParser(CrashReceiverService.getWebViewCrashLogDir())}; + new WebViewCrashLogParser(SystemWideCrashDirectories.getWebViewCrashLogDir())}; } /**
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java index a3230f8..7fcba5e 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java
@@ -79,11 +79,11 @@ public static final String FILE = "/login.html"; public static final String FILE_URL = "file:///android_asset/autofill.html"; - public final static int AUTOFILL_VIEW_ENTERED = 1; - public final static int AUTOFILL_VIEW_EXITED = 2; - public final static int AUTOFILL_VALUE_CHANGED = 3; - public final static int AUTOFILL_COMMIT = 4; - public final static int AUTOFILL_CANCEL = 5; + public static final int AUTOFILL_VIEW_ENTERED = 1; + public static final int AUTOFILL_VIEW_EXITED = 2; + public static final int AUTOFILL_VALUE_CHANGED = 3; + public static final int AUTOFILL_COMMIT = 4; + public static final int AUTOFILL_CANCEL = 5; /** * This class only implements the necessary methods of ViewStructure for testing. @@ -509,7 +509,7 @@ } private static class AwAutofillSessionUMATestHelper { - private final static String DATA = + private static final String DATA = "<html><head></head><body><form action='a.html' name='formname' id='formid'>" + "<label>User Name:</label>" + "<input type='text' id='text1' name='username'" @@ -518,9 +518,9 @@ + "</form>" + "<form><input type='text' id='text2'/></form></body></html>"; - private final static int TOTAL_CONTROLS = 1; // text1 + private static final int TOTAL_CONTROLS = 1; // text1 - public final static int NO_FORM_SUBMISSION = -1; + public static final int NO_FORM_SUBMISSION = -1; public AwAutofillSessionUMATestHelper(AwAutofillTest test) { mTest = test; @@ -1437,7 +1437,19 @@ try { final String url = webServer.setResponse(FILE, data, null); loadUrlSync(url); - waitForCallbackAndVerifyTypes(cnt, new Integer[] {}); + // There is no good way to verify no callback occurred, we just simulate user trigger + // the autofill and verify autofill is only triggered once, then this proves javascript + // didn't trigger the autofill, since + // testUserInitiatedJavascriptSelectControlChangeNotification verified user's triggering + // work. + dispatchDownAndUpKeyEvents(KeyEvent.KEYCODE_DPAD_CENTER); + cnt += waitForCallbackAndVerifyTypes(cnt, + new Integer[] {AUTOFILL_CANCEL, AUTOFILL_VIEW_ENTERED, AUTOFILL_VIEW_EXITED, + AUTOFILL_VIEW_ENTERED, AUTOFILL_VALUE_CHANGED}); + ArrayList<Pair<Integer, AutofillValue>> values = getChangedValues(); + assertEquals(1, values.size()); + assertTrue(values.get(0).second.isList()); + assertEquals(1, values.get(0).second.getListValue()); } finally { webServer.shutdown(); }
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/services/CrashReceiverServiceTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/services/CrashReceiverServiceTest.java index 4027c6c..98362f6 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/services/CrashReceiverServiceTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/services/CrashReceiverServiceTest.java
@@ -17,6 +17,7 @@ import org.junit.runner.RunWith; import org.chromium.android_webview.common.crash.CrashInfo; +import org.chromium.android_webview.common.crash.SystemWideCrashDirectories; import org.chromium.android_webview.services.CrashReceiverService; import org.chromium.android_webview.test.AwJUnit4ClassRunner; import org.chromium.android_webview.test.OnlyRunIn; @@ -60,7 +61,7 @@ @Test @MediumTest public void testDeleteFilesInDir() throws IOException { - File webviewTmpDir = CrashReceiverService.getWebViewTmpCrashDir(); + File webviewTmpDir = SystemWideCrashDirectories.getWebViewTmpCrashDir(); if (!webviewTmpDir.isDirectory()) { Assert.assertTrue(webviewTmpDir.mkdir()); }
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/services/MinidumpUploaderTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/services/MinidumpUploaderTest.java index 1a2c7c5c..f2762ac 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/services/MinidumpUploaderTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/services/MinidumpUploaderTest.java
@@ -15,6 +15,7 @@ import org.junit.runner.RunWith; import org.chromium.android_webview.common.PlatformServiceBridge; +import org.chromium.android_webview.common.crash.SystemWideCrashDirectories; import org.chromium.android_webview.services.AwMinidumpUploaderDelegate; import org.chromium.android_webview.services.CrashReceiverService; import org.chromium.android_webview.test.AwJUnit4ClassRunner; @@ -48,7 +49,7 @@ public CrashTestRule mTestRule = new CrashTestRule() { @Override public File getExistingCacheDir() { - return CrashReceiverService.getOrCreateWebViewCrashDir(); + return SystemWideCrashDirectories.getOrCreateWebViewCrashDir(); } }; @@ -114,7 +115,7 @@ @MediumTest public void testCopyAndUploadWebViewMinidump() throws IOException { final CrashFileManager fileManager = - new CrashFileManager(CrashReceiverService.getWebViewCrashDir()); + new CrashFileManager(SystemWideCrashDirectories.getWebViewCrashDir()); // Note that these minidump files are set up directly in the cache dir - not in the WebView // crash dir. This is to ensure the CrashFileManager doesn't see these minidumps without us // first copying them. @@ -133,7 +134,7 @@ } catch (IOException e) { throw new RuntimeException(e); } - File webviewTmpDir = CrashReceiverService.getWebViewTmpCrashDir(); + File webviewTmpDir = SystemWideCrashDirectories.getWebViewTmpCrashDir(); Assert.assertEquals(0, webviewTmpDir.listFiles().length); } @@ -229,7 +230,7 @@ @MediumTest public void testCopyAndUploadSeveralMinidumpBatches() throws IOException { final CrashFileManager fileManager = - new CrashFileManager(CrashReceiverService.getWebViewCrashDir()); + new CrashFileManager(SystemWideCrashDirectories.getWebViewCrashDir()); // Note that these minidump files are set up directly in the cache dir - not in the WebView // crash dir. This is to ensure the CrashFileManager doesn't see these minidumps without us // first copying them.
diff --git a/android_webview/junit/src/org/chromium/android_webview/robolectric/common/ServiceNamesTest.java b/android_webview/junit/src/org/chromium/android_webview/robolectric/common/ServiceNamesTest.java new file mode 100644 index 0000000..c038e9e --- /dev/null +++ b/android_webview/junit/src/org/chromium/android_webview/robolectric/common/ServiceNamesTest.java
@@ -0,0 +1,31 @@ +// 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.android_webview.robolectric.common; + +import android.support.test.filters.SmallTest; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.annotation.Config; + +import org.chromium.android_webview.common.ServiceNames; +import org.chromium.android_webview.services.CrashReceiverService; +import org.chromium.android_webview.services.VariationsSeedServer; +import org.chromium.testing.local.LocalRobolectricTestRunner; + +/** Tests the constants in ServiceNames. */ +@RunWith(LocalRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class ServiceNamesTest { + @Test + @SmallTest + public void testServiceNamesValid() { + Assert.assertEquals("Incorrect class name constant", CrashReceiverService.class.getName(), + ServiceNames.CRASH_RECEIVER_SERVICE); + Assert.assertEquals("Incorrect class name constant", VariationsSeedServer.class.getName(), + ServiceNames.VARIATIONS_SEED_SERVER); + } +}
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn index 673c5bb..1c6ebc8 100644 --- a/android_webview/test/BUILD.gn +++ b/android_webview/test/BUILD.gn
@@ -419,6 +419,7 @@ "../junit/src/org/chromium/android_webview/robolectric/AwLayoutSizerTest.java", "../junit/src/org/chromium/android_webview/robolectric/FindAddressTest.java", "../junit/src/org/chromium/android_webview/robolectric/AwScrollOffsetManagerTest.java", + "../junit/src/org/chromium/android_webview/robolectric/common/ServiceNamesTest.java", ] deps = [
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc index 2931a36..61d2527 100644 --- a/ash/app_list/app_list_controller_impl.cc +++ b/ash/app_list/app_list_controller_impl.cc
@@ -1230,8 +1230,9 @@ void AppListControllerImpl::NotifyAppListVisibilityChanged(bool visible, int64_t display_id) { if (!visible) { - presenter_.GetView()->search_box_view()->SetSearchBoxActive(false, - ui::ET_UNKNOWN); + presenter_.GetView() + ->search_box_view() + ->ClearSearchAndDeactivateSearchBox(); } // Notify chrome of visibility changes.
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc index 6f83d6e..a7e978bc 100644 --- a/ash/app_list/app_list_presenter_delegate_unittest.cc +++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -19,6 +19,7 @@ #include "ash/app_list/views/contents_view.h" #include "ash/app_list/views/expand_arrow_view.h" #include "ash/app_list/views/search_box_view.h" +#include "ash/app_list/views/search_result_page_view.h" #include "ash/app_list/views/test/apps_grid_view_test_api.h" #include "ash/keyboard/ui/keyboard_ui_controller.h" #include "ash/keyboard/ui/test/keyboard_test_util.h" @@ -1816,6 +1817,458 @@ background_shield->layer()->rounded_corner_radii()); } +// Tests for variety of app list behavior with kScalableAppList feature enabled +// or disabled, depending on the parameter value. +class AppListPresenterDelegateScalableAppListTest + : public AppListPresenterDelegateTest { + public: + AppListPresenterDelegateScalableAppListTest() { + if (GetParam()) { + scoped_feature_list_.InitWithFeatures( + {app_list_features::kScalableAppList}, {}); + } else { + scoped_feature_list_.InitWithFeatures( + {}, {app_list_features::kScalableAppList}); + } + } + + void SetUp() override { + AppListPresenterDelegateTest::SetUp(); + + UpdateDisplay("1080x900"); + GetAppListTestHelper()->ShowAndRunLoop(GetPrimaryDisplayId()); + } + + bool ScalableAppListEnabled() const { return GetParam(); } + + // Calculates expected suggestion chip top based on the search box in-screen + // bounds. + int ExpectedSuggestionChipContainerTop(const gfx::Rect& search_box_bounds) { + return search_box_bounds.bottom() + + 24 /*suggesion chip container top margin*/; + } + + // Calculates expected apps grid position based on display height and the + // search box in-screen bounds. + // NOTE: This assumes that the display size is such that the preferred apps + // grid size is within min and max apps grid height (in which case the margin + // when scalable app list is not enabled is 1 / 16 of the available height). + int ExpectedAppsGridTop(const app_list::AppListConfig& config, + int display_height, + const gfx::Rect& search_box_bounds) { + if (ScalableAppListEnabled()) { + return ExpectedSuggestionChipContainerTop(search_box_bounds) + + 32 /*suggestion chip container height*/ + + config.grid_fadeout_zone_height() - + config.grid_fadeout_mask_height(); + } + + int top_with_margin = + ExpectedSuggestionChipContainerTop(search_box_bounds) + + 32 /*suggestion chip container height*/; + const int available_height = + display_height - config.shelf_height() - + config.search_box_fullscreen_top_padding() - + search_box_bounds.height() - 32 /*suggestion chip container height*/ + - 24 /*margin between suggestion chip and search box*/; + return top_with_margin + (available_height) / 16 - + config.grid_fadeout_zone_height(); + } + + app_list::AppsGridView* apps_grid_view() { + return GetAppListView() + ->app_list_main_view() + ->contents_view() + ->GetAppsContainerView() + ->apps_grid_view(); + } + + app_list::SearchResultPageView* search_result_page() { + return GetAppListView() + ->app_list_main_view() + ->contents_view() + ->search_results_page_view(); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; + + DISALLOW_COPY_AND_ASSIGN(AppListPresenterDelegateScalableAppListTest); +}; + +// The parameter indicates whether the kScalableAppList feature is enabled. +INSTANTIATE_TEST_SUITE_P(ScalableAppListEnabled, + AppListPresenterDelegateScalableAppListTest, + testing::Bool()); + +// Tests that the app list contents top margin is gradually updated during drag +// between peeking and fullscreen view state while showing apps page. +TEST_P(AppListPresenterDelegateScalableAppListTest, + AppsPagePositionDuringDrag) { + const app_list::AppListConfig& config = GetAppListView()->GetAppListConfig(); + const int shelf_height = config.shelf_height(); + const int fullscreen_y = 0; + const int closed_y = 900 - shelf_height; + const int fullscreen_search_box_padding = + ScalableAppListEnabled() ? (900 - shelf_height) / 16 + : config.search_box_fullscreen_top_padding(); + + GetAppListTestHelper()->CheckState(AppListViewState::kPeeking); + const gfx::Point peeking_top = + GetAppListView()->GetBoundsInScreen().top_center(); + + // Drag AppListView upwards half way to the top of the screen, and check the + // search box padding has been updated to a value half-way between peeking and + // fullscreen values. + ui::test::EventGenerator* generator = GetEventGenerator(); + generator->MoveTouch(peeking_top); + generator->PressTouch(); + generator->MoveTouch( + gfx::Point(peeking_top.x(), (peeking_top.y() + fullscreen_y) / 2)); + GetAppListTestHelper()->WaitUntilIdle(); + + EXPECT_LE(std::abs(GetAppListView()->GetAppListTransitionProgress( + app_list::AppListView::kProgressFlagNone) - + 1.5f), + 0.01f); + + gfx::Rect search_box_bounds = + GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ((peeking_top.y() + fullscreen_y) / 2 + + (config.search_box_peeking_top_padding() + + fullscreen_search_box_padding) / + 2, + search_box_bounds.y()); + EXPECT_EQ(ExpectedAppsGridTop(config, 900, search_box_bounds), + apps_grid_view()->GetBoundsInScreen().y()); + // In apps state, search results page should be hidden behind the search + // box. + EXPECT_EQ(search_box_bounds, search_result_page()->GetBoundsInScreen()); + + // Move to the fullscreen position, and verify the search box padding is + // equal to the expected fullscreen value. + generator->MoveTouch(gfx::Point(peeking_top.x(), fullscreen_y)); + GetAppListTestHelper()->WaitUntilIdle(); + + EXPECT_EQ(2.0f, GetAppListView()->GetAppListTransitionProgress( + app_list::AppListView::kProgressFlagNone)); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ(fullscreen_search_box_padding, search_box_bounds.y()); + EXPECT_EQ(ExpectedAppsGridTop(config, 900, search_box_bounds), + apps_grid_view()->GetBoundsInScreen().y()); + EXPECT_EQ(search_box_bounds, search_result_page()->GetBoundsInScreen()); + + // Move half way between peeking and closed state - the search box padding + // should be half distance between closed and peeking padding. + generator->MoveTouch( + gfx::Point(peeking_top.x(), (peeking_top.y() + closed_y) / 2)); + GetAppListTestHelper()->WaitUntilIdle(); + + EXPECT_LE(std::abs(GetAppListView()->GetAppListTransitionProgress( + app_list::AppListView::kProgressFlagNone) - + 0.5f), + 0.01f); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ((peeking_top.y() + closed_y) / 2 + + (config.search_box_peeking_top_padding() + + config.search_box_closed_top_padding()) / + 2, + search_box_bounds.y()); + EXPECT_EQ(ExpectedAppsGridTop(config, 900, search_box_bounds), + apps_grid_view()->GetBoundsInScreen().y()); + EXPECT_EQ(search_box_bounds, search_result_page()->GetBoundsInScreen()); + + // Move to the closed state height, and verify the search box padding matches + // the state. + generator->MoveTouch(gfx::Point(peeking_top.x(), closed_y)); + GetAppListTestHelper()->WaitUntilIdle(); + EXPECT_EQ(0.0f, GetAppListView()->GetAppListTransitionProgress( + app_list::AppListView::kProgressFlagNone)); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ(closed_y + config.search_box_closed_top_padding(), + search_box_bounds.y()); + EXPECT_EQ(ExpectedAppsGridTop(config, 900, search_box_bounds), + apps_grid_view()->GetBoundsInScreen().y()); + EXPECT_EQ(search_box_bounds, search_result_page()->GetBoundsInScreen()); +} + +// Tests that the app list contents top margin is gradually updated during drag +// between half and fullscreen state while showing search results. +TEST_P(AppListPresenterDelegateScalableAppListTest, + SearchResultsPagePositionDuringDrag) { + GetAppListTestHelper()->CheckState(AppListViewState::kPeeking); + + // Enter text in the search box to transition to half app list. + ui::test::EventGenerator* generator = GetEventGenerator(); + generator->PressKey(ui::KeyboardCode::VKEY_0, 0); + GetAppListTestHelper()->CheckState(AppListViewState::kHalf); + + const app_list::AppListConfig& config = GetAppListView()->GetAppListConfig(); + const int shelf_height = config.shelf_height(); + const int search_results_height = 440; + const int fullscreen_y = 0; + const int closed_y = 900 - shelf_height; + const int fullscreen_search_box_padding = + ScalableAppListEnabled() ? (900 - shelf_height) / 16 + : config.search_box_fullscreen_top_padding(); + + const gfx::Point half_top = + GetAppListView()->GetBoundsInScreen().top_center(); + + // Drag AppListView upwards half way to the top of the screen, and check the + // search box padding has been updated to a value half-way between peeking and + // fullscreen values. + generator->MoveTouch(half_top); + generator->PressTouch(); + generator->MoveTouch( + gfx::Point(half_top.x(), (half_top.y() + fullscreen_y) / 2)); + GetAppListTestHelper()->WaitUntilIdle(); + + EXPECT_LE(std::abs(GetAppListView()->GetAppListTransitionProgress( + app_list::AppListView::kProgressFlagSearchResults) - + 1.5f), + 0.01f); + + gfx::Rect search_box_bounds = + GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ((half_top.y() + fullscreen_y) / 2 + + (config.search_box_fullscreen_top_padding() + + fullscreen_search_box_padding) / + 2, + search_box_bounds.y()); + EXPECT_EQ(search_box_bounds.y(), + search_result_page()->GetBoundsInScreen().y()); + EXPECT_EQ(search_results_height, + search_result_page()->GetBoundsInScreen().height()); + // Apps grid should be off screen. + EXPECT_GT(apps_grid_view()->GetBoundsInScreen().y(), 900); + + // Move to the fullscreen position, and verify the search box padding is + // equal to the expected fullscreen value. + generator->MoveTouch(gfx::Point(half_top.x(), fullscreen_y)); + GetAppListTestHelper()->WaitUntilIdle(); + EXPECT_EQ(2.0f, GetAppListView()->GetAppListTransitionProgress( + app_list::AppListView::kProgressFlagSearchResults)); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ(fullscreen_search_box_padding, search_box_bounds.y()); + EXPECT_EQ(search_box_bounds.y(), + search_result_page()->GetBoundsInScreen().y()); + EXPECT_EQ(search_results_height, + search_result_page()->GetBoundsInScreen().height()); + // Apps grid should be off screen. + EXPECT_GT(apps_grid_view()->GetBoundsInScreen().y(), 900); + + // Move half way between peeking and closed state - the search box padding + // should be half distance between closed and peeking padding. + generator->MoveTouch(gfx::Point(half_top.x(), (half_top.y() + closed_y) / 2)); + GetAppListTestHelper()->WaitUntilIdle(); + EXPECT_LE(std::abs(GetAppListView()->GetAppListTransitionProgress( + app_list::AppListView::kProgressFlagSearchResults) - + 0.5f), + 0.01f); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ((half_top.y() + closed_y) / 2 + + (config.search_box_fullscreen_top_padding() + + config.search_box_closed_top_padding()) / + 2, + search_box_bounds.y()); + EXPECT_EQ(search_box_bounds.y(), + search_result_page()->GetBoundsInScreen().y()); + EXPECT_EQ(search_results_height, + search_result_page()->GetBoundsInScreen().height()); + // Apps grid should be off screen. + EXPECT_GT(apps_grid_view()->GetBoundsInScreen().y(), 900); + + // Move to the closed state height, and verify the search box padding matches + // the state. + generator->MoveTouch(gfx::Point(half_top.x(), closed_y)); + GetAppListTestHelper()->WaitUntilIdle(); + EXPECT_EQ(0.0f, GetAppListView()->GetAppListTransitionProgress( + app_list::AppListView::kProgressFlagSearchResults)); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ(closed_y + config.search_box_closed_top_padding(), + search_box_bounds.y()); + EXPECT_EQ(search_box_bounds.y(), + search_result_page()->GetBoundsInScreen().y()); + EXPECT_EQ(search_results_height, + search_result_page()->GetBoundsInScreen().height()); + // Apps grid should be off screen. + EXPECT_GT(apps_grid_view()->GetBoundsInScreen().y(), 900); +} + +// Tests changing the active app list page while drag is in progress. +TEST_P(AppListPresenterDelegateScalableAppListTest, SwitchPageDuringDrag) { + GetAppListTestHelper()->CheckState(AppListViewState::kPeeking); + const gfx::Point peeking_top = + GetAppListView()->GetBoundsInScreen().top_center(); + + // Enter text in the search box to transition to half app list. + ui::test::EventGenerator* generator = GetEventGenerator(); + generator->PressKey(ui::KeyboardCode::VKEY_0, 0); + GetAppListTestHelper()->CheckState(AppListViewState::kHalf); + + const gfx::Point half_top = + GetAppListView()->GetBoundsInScreen().top_center(); + + const app_list::AppListConfig& config = GetAppListView()->GetAppListConfig(); + const int shelf_height = config.shelf_height(); + const int search_results_height = 440; + const int fullscreen_y = 0; + const int fullscreen_search_box_padding = + ScalableAppListEnabled() ? (900 - shelf_height) / 16 + : config.search_box_fullscreen_top_padding(); + + // Drag AppListView upwards half way to the top of the screen, and check the + // search box padding has been updated to a value half-way between peeking and + // fullscreen values. + generator->MoveTouch(half_top); + generator->PressTouch(); + generator->MoveTouch( + gfx::Point(half_top.x(), (half_top.y() + fullscreen_y) / 2)); + GetAppListTestHelper()->WaitUntilIdle(); + + gfx::Rect search_box_bounds = + GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ((half_top.y() + fullscreen_y) / 2 + + (config.search_box_fullscreen_top_padding() + + fullscreen_search_box_padding) / + 2, + search_box_bounds.y()); + EXPECT_EQ(search_box_bounds.y(), + search_result_page()->GetBoundsInScreen().y()); + EXPECT_EQ(search_results_height, + search_result_page()->GetBoundsInScreen().height()); + // Apps grid should be off screen. + EXPECT_GT(apps_grid_view()->GetBoundsInScreen().y(), 900); + + const gfx::Rect app_list_bounds = GetAppListView()->GetBoundsInScreen(); + + // Press ESC key - this should move the UI back to the app list. + generator->PressKey(ui::KeyboardCode::VKEY_ESCAPE, 0); + GetAppListTestHelper()->CheckState(AppListViewState::kPeeking); + + // The app list position should remain the same. + EXPECT_EQ(app_list_bounds, GetAppListView()->GetBoundsInScreen()); + + // The search box should be moved so drag progress for peeking state matches + // the current height. + float new_progress = (0.5 * half_top.y()) / peeking_top.y(); + int expected_search_box_top = + new_progress * peeking_top.y() + + (1 - new_progress) * fullscreen_search_box_padding + + new_progress * config.search_box_peeking_top_padding(); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ(expected_search_box_top, search_box_bounds.y()); + EXPECT_EQ(ExpectedAppsGridTop(config, 900, search_box_bounds), + apps_grid_view()->GetBoundsInScreen().y()); + EXPECT_EQ(search_box_bounds, search_result_page()->GetBoundsInScreen()); + + // Enter text in the search box to transition back to search results page. + generator->PressKey(ui::KeyboardCode::VKEY_0, 0); + GetAppListTestHelper()->CheckState(AppListViewState::kHalf); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ((half_top.y() + fullscreen_y) / 2 + + (config.search_box_fullscreen_top_padding() + + fullscreen_search_box_padding) / + 2, + search_box_bounds.y()); + EXPECT_EQ(search_box_bounds.y(), + search_result_page()->GetBoundsInScreen().y()); + EXPECT_EQ(search_results_height, + search_result_page()->GetBoundsInScreen().height()); + // Apps grid should be off screen. + EXPECT_GT(apps_grid_view()->GetBoundsInScreen().y(), 900); +} + +// Tests changing the active app list page in fullscreen state. +TEST_P(AppListPresenterDelegateScalableAppListTest, SwitchPageInFullscreen) { + GetAppListTestHelper()->CheckState(AppListViewState::kPeeking); + FlingUpOrDown(GetEventGenerator(), GetAppListView(), true); + GetAppListTestHelper()->CheckState(AppListViewState::kFullscreenAllApps); + + const app_list::AppListConfig& config = GetAppListView()->GetAppListConfig(); + const int shelf_height = config.shelf_height(); + const int search_results_height = 440; + const int fullscreen_y = 0; + const int fullscreen_search_box_padding = + ScalableAppListEnabled() ? (900 - shelf_height) / 16 + : config.search_box_fullscreen_top_padding(); + + gfx::Rect search_box_bounds = + GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ(fullscreen_y + fullscreen_search_box_padding, + search_box_bounds.y()); + EXPECT_EQ(ExpectedAppsGridTop(config, 900, search_box_bounds), + apps_grid_view()->GetBoundsInScreen().y()); + EXPECT_EQ(search_box_bounds, search_result_page()->GetBoundsInScreen()); + + const gfx::Rect app_list_bounds = GetAppListView()->GetBoundsInScreen(); + + // Enter text in the search box to transition to half app list. + ui::test::EventGenerator* generator = GetEventGenerator(); + generator->PressKey(ui::KeyboardCode::VKEY_0, 0); + GetAppListTestHelper()->CheckState(AppListViewState::kFullscreenSearch); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ(app_list_bounds, GetAppListView()->GetBoundsInScreen()); + EXPECT_EQ(fullscreen_y + fullscreen_search_box_padding, + search_box_bounds.y()); + EXPECT_EQ(search_box_bounds.y(), + search_result_page()->GetBoundsInScreen().y()); + EXPECT_EQ(search_results_height, + search_result_page()->GetBoundsInScreen().height()); + // Apps grid should be off screen. + EXPECT_GT(apps_grid_view()->GetBoundsInScreen().y(), 900); + + // Press ESC key - this should move the UI back to the app list. + generator->PressKey(ui::KeyboardCode::VKEY_ESCAPE, 0); + GetAppListTestHelper()->CheckState(AppListViewState::kFullscreenAllApps); + + search_box_bounds = GetAppListView()->search_box_view()->GetBoundsInScreen(); + search_box_bounds.Inset(GetAppListView()->search_box_view()->GetInsets()); + + EXPECT_EQ(app_list_bounds, GetAppListView()->GetBoundsInScreen()); + EXPECT_EQ(fullscreen_y + fullscreen_search_box_padding, + search_box_bounds.y()); + EXPECT_EQ(ExpectedAppsGridTop(config, 900, search_box_bounds), + apps_grid_view()->GetBoundsInScreen().y()); + EXPECT_EQ(search_box_bounds, search_result_page()->GetBoundsInScreen()); +} + // Test a variety of behaviors for home launcher (app list in tablet mode). class AppListPresenterDelegateHomeLauncherTest : public AppListPresenterDelegateTest {
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc index 740e1ca3..c1d3e11 100644 --- a/ash/app_list/views/app_list_view.cc +++ b/ash/app_list/views/app_list_view.cc
@@ -599,6 +599,22 @@ } // static +float AppListView::GetTransitionProgressForState(ash::AppListViewState state) { + switch (state) { + case ash::AppListViewState::kClosed: + return 0.0f; + case ash::AppListViewState::kPeeking: + case ash::AppListViewState::kHalf: + return 1.0f; + case ash::AppListViewState::kFullscreenAllApps: + case ash::AppListViewState::kFullscreenSearch: + return 2.0f; + } + NOTREACHED(); + return 0.0f; +} + +// static void AppListView::SetShortAnimationForTesting(bool enabled) { short_animations_for_testing = enabled; } @@ -1076,6 +1092,7 @@ ash::AppListViewState target_state) { if (target_state != ash::AppListViewState::kPeeking && target_state != ash::AppListViewState::kFullscreenAllApps && + target_state != ash::AppListViewState::kFullscreenSearch && target_state != ash::AppListViewState::kHalf && target_state != ash::AppListViewState::kClosed) { return; @@ -1084,8 +1101,10 @@ app_list_main_view_->contents_view()->OnAppListViewTargetStateChanged( target_state); - if (target_state == ash::AppListViewState::kHalf) + if (target_state == ash::AppListViewState::kHalf || + target_state == ash::AppListViewState::kFullscreenSearch) { return; + } if (GetAppsContainerView()->IsInFolderView()) GetAppsContainerView()->ResetForShowApps(); @@ -1734,17 +1753,11 @@ break; case ash::AppListViewState::kFullscreenSearch: if (app_list_features::IsZeroStateSuggestionsEnabled()) { - if (search_box_is_empty && !triggered_by_contents_change) { + if (search_box_is_empty && !triggered_by_contents_change) SetState(ash::AppListViewState::kFullscreenAllApps); - app_list_main_view()->contents_view()->SetActiveState( - ash::AppListState::kStateApps); - } } else { - if (search_box_is_empty) { + if (search_box_is_empty) SetState(ash::AppListViewState::kFullscreenAllApps); - app_list_main_view()->contents_view()->SetActiveState( - ash::AppListState::kStateApps); - } } break; case ash::AppListViewState::kFullscreenAllApps: @@ -1857,11 +1870,25 @@ return GetScreenBottom() - GetWidget()->GetWindowBoundsInScreen().y(); } -float AppListView::GetAppListTransitionProgress() const { - const float current_height = GetCurrentAppListHeight(); - const float peeking_height = - AppListConfig::instance().peeking_app_list_height(); - if (current_height <= peeking_height) { +float AppListView::GetAppListTransitionProgress(int flags) const { + const int current_height = GetCurrentAppListHeight(); + const int fullscreen_height = GetFullscreenStateHeight(); + const int baseline_height = + std::min(fullscreen_height, + (flags & kProgressFlagSearchResults) + ? kHalfAppListHeight + : AppListConfig::instance().peeking_app_list_height()); + + // If vertical space is limited, the baseline and fullscreen height might be + // the same. To handle this case, if the height has reached the + // baseline/fullscreen height, return either 1.0 or 2.0 progress, depending on + // the current target state. + if (baseline_height == fullscreen_height && + current_height >= fullscreen_height) { + return GetTransitionProgressForState(app_list_state_); + } + + if (current_height <= baseline_height) { // Currently transition progress is between closed and peeking state. // Calculate the progress of this transition. const float shelf_height = @@ -1871,17 +1898,17 @@ // height for just one moment, which results in negative progress. So force // the progress to be non-negative. return std::max(0.0f, (current_height - shelf_height) / - (peeking_height - shelf_height)); + (baseline_height - shelf_height)); } // Currently transition progress is between peeking and fullscreen state. // Calculate the progress of this transition. - const float fullscreen_height_above_peeking = - GetFullscreenStateHeight() - peeking_height; - const float current_height_above_peeking = current_height - peeking_height; - DCHECK_GT(fullscreen_height_above_peeking, 0); - DCHECK_LE(current_height_above_peeking, fullscreen_height_above_peeking); - return 1 + current_height_above_peeking / fullscreen_height_above_peeking; + const float fullscreen_height_above_baseline = + fullscreen_height - baseline_height; + const float current_height_above_baseline = current_height - baseline_height; + DCHECK_GT(fullscreen_height_above_baseline, 0); + DCHECK_LE(current_height_above_baseline, fullscreen_height_above_baseline); + return 1 + current_height_above_baseline / fullscreen_height_above_baseline; } int AppListView::GetFullscreenStateHeight() const { @@ -2228,7 +2255,8 @@ // Update the y position of the background shield. gfx::Transform transform; if (is_in_drag_) { - float app_list_transition_progress = GetAppListTransitionProgress(); + float app_list_transition_progress = + GetAppListTransitionProgress(kProgressFlagNone); if (app_list_transition_progress < 1 && !shelf_has_rounded_corners()) { const float shelf_height = GetScreenBottom() - GetDisplayNearestView().work_area().bottom();
diff --git a/ash/app_list/views/app_list_view.h b/ash/app_list/views/app_list_view.h index 6aaa367..f4e300c 100644 --- a/ash/app_list/views/app_list_view.h +++ b/ash/app_list/views/app_list_view.h
@@ -133,6 +133,11 @@ static void SetShortAnimationForTesting(bool enabled); static bool ShortAnimationsForTesting(); + // Returns the app list transition progress value associated with a app list + // view state. This matches the values GetAppListTransitionProgress() is + // expected to return when app list view is exactly in the provided state. + static float GetTransitionProgressForState(ash::AppListViewState state); + // Initializes the view, only done once per session. void InitView(bool is_tablet_mode, gfx::NativeView parent); @@ -251,10 +256,23 @@ // Returns current app list height above display bottom. int GetCurrentAppListHeight() const; + // Flags that can be passed to GetAppListTransitionProgress(). For more + // details, see GetAppListTransitionProgress() documentation. + static constexpr int kProgressFlagNone = 0; + static constexpr int kProgressFlagSearchResults = 1; + // The progress of app list height transitioning from closed to fullscreen // state. [0.0, 1.0] means the progress between closed and peeking state, // while [1.0, 2.0] means the progress between peeking and fullscreen state. - float GetAppListTransitionProgress() const; + // + // By default, this calculates progress for drag operation while app list + // is AppListState::kApps state. The |flags| argument can be used to amend + // this behavior: + // * Use |kProgressFlagNone| for default behavior. + // * If |kProgressFlagSearchResult| flag is set, the progress will be + // calculated using kHalf state height as baseline. This should be used + // when calculating contents layout for search results state. + float GetAppListTransitionProgress(int flags) const; // Returns the height of app list in fullscreen state. int GetFullscreenStateHeight() const;
diff --git a/ash/app_list/views/apps_container_view.cc b/ash/app_list/views/apps_container_view.cc index 69aa224..8e91c80 100644 --- a/ash/app_list/views/apps_container_view.cc +++ b/ash/app_list/views/apps_container_view.cc
@@ -216,15 +216,13 @@ app_list_state == ash::AppListViewState::kPeeking || is_in_drag); } -void AppsContainerView::UpdateYPositionAndOpacity() { - apps_grid_view_->UpdateOpacity(); +void AppsContainerView::UpdateYPositionAndOpacity(float progress, + bool restore_opacity) { + apps_grid_view_->UpdateOpacity(restore_opacity); // Updates the opacity of page switcher buttons. The same rule as all apps in // AppsGridView. AppListView* app_list_view = contents_view_->app_list_view(); - bool should_restore_opacity = - !app_list_view->is_in_drag() && - (app_list_view->app_list_state() != ash::AppListViewState::kClosed); int screen_bottom = app_list_view->GetScreenBottom(); gfx::Rect switcher_bounds = page_switcher_->GetBoundsInScreen(); float centerline_above_work_area = @@ -236,10 +234,8 @@ (AppListConfig::instance().all_apps_opacity_end_px() - start_px), 0.f), 1.0f); - page_switcher_->layer()->SetOpacity(should_restore_opacity ? 1.0f : opacity); + page_switcher_->layer()->SetOpacity(restore_opacity ? 1.0f : opacity); - const float progress = - contents_view_->app_list_view()->GetAppListTransitionProgress(); // Changes the opacity of suggestion chips between 0 and 1 when app list // transition progress changes between |kSuggestionChipOpacityStartProgress| // and |kSuggestionChipOpacityEndProgress|. @@ -250,10 +246,9 @@ 0.f), 1.0f); suggestion_chip_container_view_->layer()->SetOpacity( - should_restore_opacity ? 1.0f : chips_opacity); + restore_opacity ? 1.0 : chips_opacity); - suggestion_chip_container_view_->SetY(GetExpectedSuggestionChipY( - contents_view_->app_list_view()->GetAppListTransitionProgress())); + suggestion_chip_container_view_->SetY(GetExpectedSuggestionChipY(progress)); apps_grid_view_->SetY(suggestion_chip_container_view_->y() + chip_grid_y_distance_); @@ -278,7 +273,8 @@ // Layout suggestion chips. gfx::Rect chip_container_rect = rect; chip_container_rect.set_y(GetExpectedSuggestionChipY( - contents_view_->app_list_view()->GetAppListTransitionProgress())); + contents_view_->app_list_view()->GetAppListTransitionProgress( + AppListView::kProgressFlagNone))); chip_container_rect.set_height(kSuggestionChipContainerHeight); suggestion_chip_container_view_->SetBoundsRect(chip_container_rect); @@ -586,7 +582,8 @@ int AppsContainerView::GetExpectedSuggestionChipY(float progress) { const gfx::Rect search_box_bounds = - contents_view_->GetSearchBoxExpectedBoundsForProgress(progress); + contents_view_->GetSearchBoxExpectedBoundsForProgress( + ash::AppListState::kStateApps, progress); return search_box_bounds.bottom() + GetSuggestionChipContainerTopMargin(progress); }
diff --git a/ash/app_list/views/apps_container_view.h b/ash/app_list/views/apps_container_view.h index 7fb843fd..07de117 100644 --- a/ash/app_list/views/apps_container_view.h +++ b/ash/app_list/views/apps_container_view.h
@@ -71,7 +71,7 @@ bool is_in_drag); // Updates y position and opacity of the items in this view during dragging. - void UpdateYPositionAndOpacity(); + void UpdateYPositionAndOpacity(float progress, bool restore_opacity); // Called when tablet mode starts and ends. void OnTabletModeChanged(bool started);
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc index ae7cc45..f96205a 100644 --- a/ash/app_list/views/apps_grid_view.cc +++ b/ash/app_list/views/apps_grid_view.cc
@@ -1982,7 +1982,7 @@ item_list_ = nullptr; } -void AppsGridView::UpdateOpacity() { +void AppsGridView::UpdateOpacity(bool restore_opacity) { if (view_structure_.pages().empty()) return; @@ -1991,9 +1991,6 @@ // above the bottom of work area and transitioning to 1.0f by the time the // centerline reaches |kAllAppsOpacityEndPx| above the work area bottom. AppListView* app_list_view = contents_view_->app_list_view(); - const bool should_restore_opacity = - !app_list_view->is_in_drag() && - (app_list_view->app_list_state() != ash::AppListViewState::kClosed); const int selected_page = pagination_model_.selected_page(); auto current_page = view_structure_.pages()[selected_page]; @@ -2002,7 +1999,7 @@ // unnecessary. Do not dynamically ensure/destroy layers of individual items // since the creation/destruction of the layer requires to repaint the parent // view (i.e. this class). - if (should_restore_opacity) { + if (restore_opacity) { // Layers are not necessary. Destroy them, and return. No need to update // opacity. This needs to be done on all views within |view_model_| because // some item view might have been moved out from the current page. See also
diff --git a/ash/app_list/views/apps_grid_view.h b/ash/app_list/views/apps_grid_view.h index f7bd439..c3c9104 100644 --- a/ash/app_list/views/apps_grid_view.h +++ b/ash/app_list/views/apps_grid_view.h
@@ -259,7 +259,7 @@ void OnFolderItemRemoved(); // Updates the opacity of all the items in the grid during dragging. - void UpdateOpacity(); + void UpdateOpacity(bool restore_opacity); // Passes scroll information from AppListView to the PaginationController, // returns true if this scroll would change pages.
diff --git a/ash/app_list/views/contents_view.cc b/ash/app_list/views/contents_view.cc index 0cb1f14..1287c5f 100644 --- a/ash/app_list/views/contents_view.cc +++ b/ash/app_list/views/contents_view.cc
@@ -500,6 +500,13 @@ } gfx::Rect ContentsView::GetSearchBoxBounds(ash::AppListState state) const { + if (app_list_view_->is_in_drag()) { + return GetSearchBoxExpectedBoundsForProgress( + state, app_list_view_->GetAppListTransitionProgress( + state == ash::AppListState::kStateSearchResults + ? AppListView::kProgressFlagSearchResults + : AppListView::kProgressFlagNone)); + } return GetSearchBoxBoundsForViewState(state, target_view_state()); } @@ -535,16 +542,19 @@ } gfx::Rect ContentsView::GetSearchBoxExpectedBoundsForProgress( + ash::AppListState state, float progress) const { - gfx::Rect bounds = GetSearchBoxBoundsForViewState( - ash::AppListState::kStateApps, ash::AppListViewState::kPeeking); + ash::AppListViewState baseline_state = + state == ash::AppListState::kStateSearchResults + ? ash::AppListViewState::kHalf + : ash::AppListViewState::kPeeking; + gfx::Rect bounds = GetSearchBoxBoundsForViewState(state, baseline_state); if (progress <= 1) { bounds.set_y(gfx::Tween::IntValueBetween(progress, 0, bounds.y())); } else { - const int fullscreen_y = - GetSearchBoxTopForViewState(ash::AppListState::kStateApps, - ash::AppListViewState::kFullscreenAllApps); + const int fullscreen_y = GetSearchBoxTopForViewState( + state, ash::AppListViewState::kFullscreenAllApps); bounds.set_y( gfx::Tween::IntValueBetween(progress - 1, bounds.y(), fullscreen_y)); } @@ -701,40 +711,57 @@ } void ContentsView::UpdateYPositionAndOpacity() { - ash::AppListViewState state = app_list_view_->app_list_state(); - if (state == ash::AppListViewState::kFullscreenSearch || - state == ash::AppListViewState::kHalf) { - return; + const int current_page = pagination_model_.has_transition() + ? pagination_model_.transition().target_page + : pagination_model_.selected_page(); + const ash::AppListState current_state = GetStateForPageIndex(current_page); + float progress = 0.0f; + if (app_list_view_->is_in_drag()) { + progress = app_list_view_->GetAppListTransitionProgress( + current_state == ash::AppListState::kStateSearchResults + ? AppListView::kProgressFlagSearchResults + : AppListView::kProgressFlagNone); + } else { + progress = AppListView::GetTransitionProgressForState(target_view_state()); } - const bool should_restore_opacity = + const bool restore_opacity = !app_list_view_->is_in_drag() && - (app_list_view_->app_list_state() != ash::AppListViewState::kClosed); - const float progress = app_list_view_->GetAppListTransitionProgress(); - - // Changes the opacity of expand arrow between 0 and 1 when app list - // transition progress changes between |kExpandArrowOpacityStartProgress| - // and |kExpandArrowOpacityEndProgress|. - expand_arrow_view_->layer()->SetOpacity( - should_restore_opacity - ? 1.0f - : std::min(std::max((progress - kExpandArrowOpacityStartProgress) / - (kExpandArrowOpacityEndProgress - - kExpandArrowOpacityStartProgress), - 0.f), - 1.0f)); + target_view_state() != ash::AppListViewState::kClosed; + if (current_state != ash::AppListState::kStateApps) { + expand_arrow_view_->layer()->SetOpacity(0.0f); + } else if (restore_opacity) { + expand_arrow_view_->layer()->SetOpacity(1.0f); + } else { + // Changes the opacity of expand arrow between 0 and 1 when app list + // transition progress changes between |kExpandArrowOpacityStartProgress| + // and |kExpandArrowOpacityEndProgress|. + expand_arrow_view_->layer()->SetOpacity( + std::min(std::max((progress - kExpandArrowOpacityStartProgress) / + (kExpandArrowOpacityEndProgress - + kExpandArrowOpacityStartProgress), + 0.f), + 1.0f)); + } expand_arrow_view_->SchedulePaint(); + SearchBoxView* search_box = GetSearchBoxView(); - const gfx::Rect search_box_bounds_for_progress = - GetSearchBoxExpectedBoundsForProgress(progress); - gfx::Rect search_rect = search_box->GetViewBoundsForSearchBoxContentsBounds( - ConvertRectToWidgetWithoutTransform(search_box_bounds_for_progress)); + const gfx::Rect search_box_bounds = GetSearchBoxBounds(current_state); + const gfx::Rect search_rect = + search_box->GetViewBoundsForSearchBoxContentsBounds( + ConvertRectToWidgetWithoutTransform(search_box_bounds)); search_box->GetWidget()->SetBounds(search_rect); - search_results_page_view()->SetBoundsRect(search_box_bounds_for_progress); + for (AppListPage* page : app_list_pages_) { + page->UpdatePageBoundsForState(current_state, GetContentsBounds(), + search_box_bounds); + } - GetAppsContainerView()->UpdateYPositionAndOpacity(); + if (current_state == ash::AppListState::kStateApps) { + GetAppsContainerView()->UpdateYPositionAndOpacity(progress, + restore_opacity); + } } void ContentsView::SetExpandArrowViewVisibility(bool show) {
diff --git a/ash/app_list/views/contents_view.h b/ash/app_list/views/contents_view.h index 6f5b01b..4fed5ccc 100644 --- a/ash/app_list/views/contents_view.h +++ b/ash/app_list/views/contents_view.h
@@ -191,7 +191,8 @@ // Returns the expected search box bounds based on the app list transition // progress. - gfx::Rect GetSearchBoxExpectedBoundsForProgress(float progress) const; + gfx::Rect GetSearchBoxExpectedBoundsForProgress(ash::AppListState state, + float progress) const; // Performs the 'back' action for the active page. Returns whether the action // was handled.
diff --git a/ash/app_list/views/expand_arrow_view.cc b/ash/app_list/views/expand_arrow_view.cc index 83c9089..fd82c5a3 100644 --- a/ash/app_list/views/expand_arrow_view.cc +++ b/ash/app_list/views/expand_arrow_view.cc
@@ -111,7 +111,8 @@ for (size_t i = 0; i < kPointCount; ++i) arrow_points[i] = kPeekingPoints[i]; SkColor circle_color = kBackgroundColor; - const float progress = app_list_view_->GetAppListTransitionProgress(); + const float progress = app_list_view_->GetAppListTransitionProgress( + AppListView::kProgressFlagNone); if (progress <= 1) { // Currently transition progress is between closed and peeking state. // Change the y positions of arrow and circle.
diff --git a/ash/app_list/views/folder_header_view.cc b/ash/app_list/views/folder_header_view.cc index fe28d6e60..81ebce0a 100644 --- a/ash/app_list/views/folder_header_view.cc +++ b/ash/app_list/views/folder_header_view.cc
@@ -23,6 +23,7 @@ #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/painter.h" +#include "ui/views/view_targeter_delegate.h" namespace app_list { @@ -34,12 +35,14 @@ } // namespace -class FolderHeaderView::FolderNameView : public views::Textfield { +class FolderHeaderView::FolderNameView : public views::Textfield, + public views::ViewTargeterDelegate { public: explicit FolderNameView(FolderHeaderView* folder_header_view) : folder_header_view_(folder_header_view) { DCHECK(folder_header_view_); SetBorder(views::CreateEmptyBorder(1, 1, 1, 1)); + SetEventTargeter(std::make_unique<views::ViewTargeter>(this)); } ~FolderNameView() override = default; @@ -80,6 +83,15 @@ Textfield::OnBlur(); } + bool DoesIntersectRect(const views::View* target, + const gfx::Rect& rect) const override { + DCHECK_EQ(target, this); + gfx::Rect textfield_bounds = target->GetLocalBounds(); + int horizontal_padding = -(textfield_bounds.height() * 1.5); + textfield_bounds.Inset(gfx::Insets(0, horizontal_padding)); + return textfield_bounds.Intersects(rect); + } + private: // The parent FolderHeaderView, owns this. FolderHeaderView* folder_header_view_;
diff --git a/ash/app_list/views/folder_header_view_unittest.cc b/ash/app_list/views/folder_header_view_unittest.cc index f1475c2..df3cce0 100644 --- a/ash/app_list/views/folder_header_view_unittest.cc +++ b/ash/app_list/views/folder_header_view_unittest.cc
@@ -20,6 +20,7 @@ #include "base/macros.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/events/test/event_generator.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/test/views_test_base.h" @@ -187,5 +188,41 @@ EXPECT_FALSE(CanEditFolderName()); } +// Tests that folder name textfield is triggered when user touches on or near +// the folder name. (see https://crbug.com/997364) +TEST_F(FolderHeaderViewTest, TriggerFolderRenameAfterTappingNearFolderName) { + // Creating a folder with empty folder name. + AppListFolderItem* folder_item = model_->CreateAndPopulateFolderWithApps(2); + folder_header_view_->SetFolderItem(folder_item); + + // Get in screen bounds of folder name + const gfx::Rect name_view_bounds = + folder_header_view_->GetFolderNameViewForTest()->GetBoundsInScreen(); + + // Tap folder name and check that folder renaming is triggered. + gfx::Point name_center_point = name_view_bounds.CenterPoint(); + ui::GestureEvent tap_center( + name_center_point.x(), name_center_point.y(), 0, base::TimeTicks::Now(), + ui::GestureEventDetails(ui::EventType::ET_GESTURE_TAP_DOWN)); + folder_header_view_->GetFolderNameViewForTest()->OnGestureEvent(&tap_center); + base::RunLoop().RunUntilIdle(); + EXPECT_TRUE(folder_header_view_->GetFolderNameViewForTest()->HasFocus()); + + // Clear focus from the folder name. + widget_->GetFocusManager()->ClearFocus(); + ASSERT_FALSE(folder_header_view_->GetFolderNameViewForTest()->HasFocus()); + + // Test that tapping near (but not directly on) the folder name still + // triggers folder rename. + // Tap folder name and check that folder renaming is triggered. + ui::GestureEvent tap_near( + name_view_bounds.top_right().x(), name_view_bounds.top_right().y(), 0, + base::TimeTicks::Now(), + ui::GestureEventDetails(ui::EventType::ET_GESTURE_TAP_DOWN)); + widget_->OnGestureEvent(&tap_near); + + EXPECT_TRUE(folder_header_view_->GetFolderNameViewForTest()->HasFocus()); +} + } // namespace test } // namespace app_list
diff --git a/ash/public/cpp/app_list/app_list_config.cc b/ash/public/cpp/app_list/app_list_config.cc index b857a4d..bc282cb 100644 --- a/ash/public/cpp/app_list/app_list_config.cc +++ b/ash/public/cpp/app_list/app_list_config.cc
@@ -412,8 +412,7 @@ scale_x, inner_tile_scale_y)), folder_bubble_y_offset_(base_config.folder_bubble_y_offset_), - folder_header_height_( - MinScale(base_config.folder_header_height_, scale_y, 1)), + folder_header_height_(base_config.folder_header_height_), folder_icon_dimension_(MinScale(base_config.folder_icon_dimension_, scale_x, inner_tile_scale_y)),
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc index 8f59f2f..0002b6dd 100644 --- a/ash/shelf/shelf_layout_manager.cc +++ b/ash/shelf/shelf_layout_manager.cc
@@ -1419,7 +1419,8 @@ // This needs to happen after calling UpdateTargetBoundsForGesture(), because // that can change the size of the shelf. - if (chromeos::switches::ShouldShowScrollableShelf()) { + const bool showing_login_shelf = !state.IsActiveSessionState(); + if (chromeos::switches::ShouldShowScrollableShelf() && !showing_login_shelf) { target_bounds->shelf_bounds_in_shelf = SelectValueForShelfAlignment( gfx::Rect(target_bounds->nav_bounds_in_shelf.right(), 0, shelf_width - status_size.width() -
diff --git a/ash/shelf/shelf_widget.cc b/ash/shelf/shelf_widget.cc index 6441cf9d..c149fe3 100644 --- a/ash/shelf/shelf_widget.cc +++ b/ash/shelf/shelf_widget.cc
@@ -47,7 +47,7 @@ constexpr int kShelfBlurRadius = 30; // The maximum size of the opaque layer during an "overshoot" (drag away from // the screen edge). -constexpr int kShelfMaxOvershootHeight = 32; +constexpr int kShelfMaxOvershootHeight = 40; constexpr float kShelfBlurQuality = 0.33f; // Return the first or last focusable child of |root|.
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc index a079bfb..bd7eaed 100644 --- a/ash/wm/overview/overview_grid.cc +++ b/ash/wm/overview/overview_grid.cc
@@ -1386,6 +1386,7 @@ // |scroll_offset_| is added to adjust for that. rightmost_window_right -= scroll_offset_; scroll_offset_min_ = total_bounds.right() - rightmost_window_right; + scroll_current_delta_ = 0.f; presentation_time_recorder_ = CreatePresentationTimeHistogramRecorder( const_cast<ui::Compositor*>(root_window()->layer()->GetCompositor()), @@ -1393,18 +1394,24 @@ } bool OverviewGrid::UpdateScrollOffset(float delta) { + scroll_current_delta_ += delta; float new_scroll_offset = scroll_offset_; - new_scroll_offset += delta; + new_scroll_offset += scroll_current_delta_; new_scroll_offset = base::ClampToRange(new_scroll_offset, scroll_offset_min_, 0.f); + + // For flings, we want to return false if we hit one of the edges, which is + // when |new_scroll_offset| is exactly 0.f or |scroll_offset_min_|. + const bool in_range = + new_scroll_offset < 0.f && new_scroll_offset > scroll_offset_min_; if (new_scroll_offset == scroll_offset_) - return false; + return in_range; // Do not process scrolls that haven't moved much, unless we are at the // edges. if (std::abs(scroll_offset_ - new_scroll_offset) < kMinimumScrollDistanceDp && - scroll_offset_ > scroll_offset_min_ && scroll_offset_ < 0) { - return false; + in_range) { + return true; } // Update the bounds of the items which are currently visible on screen. @@ -1419,11 +1426,12 @@ } } + scroll_current_delta_ = 0.f; scroll_offset_ = new_scroll_offset; DCHECK(presentation_time_recorder_); presentation_time_recorder_->RequestNext(); - return true; + return in_range; } void OverviewGrid::EndScroll() {
diff --git a/ash/wm/overview/overview_grid.h b/ash/wm/overview/overview_grid.h index 69ec63d..b9fa4e0a 100644 --- a/ash/wm/overview/overview_grid.h +++ b/ash/wm/overview/overview_grid.h
@@ -285,7 +285,7 @@ // |delta| is used for updating |scroll_offset_| with new scroll values so // that windows in tablet overview mode get positioned accordingly. Returns - // true if the grid was scrolled. + // true if the grid was moved to the edge. bool UpdateScrollOffset(float delta); void EndScroll(); @@ -317,6 +317,8 @@ views::Widget* drop_target_widget() { return drop_target_widget_.get(); } + float scroll_offset() const { return scroll_offset_; } + OverviewGridEventHandler* grid_event_handler() { return grid_event_handler_.get(); } @@ -452,6 +454,10 @@ // are visible in tablet overview mode. float scroll_offset_min_ = 0; + // Sum of the deltas passed by |UpdateScrollOffset|, this is so we can ignore + // deltas that are too small for performance reasons. + float scroll_current_delta_ = 0.f; + // Cached values of the item bounds so that they do not have to be calculated // on each scroll update. std::vector<gfx::RectF> items_scrolling_bounds_;
diff --git a/ash/wm/overview/overview_grid_event_handler.cc b/ash/wm/overview/overview_grid_event_handler.cc index e00638d..9d910347 100644 --- a/ash/wm/overview/overview_grid_event_handler.cc +++ b/ash/wm/overview/overview_grid_event_handler.cc
@@ -77,6 +77,7 @@ case ui::ET_GESTURE_SCROLL_UPDATE: { if (!ShouldUseTabletModeGridLayout()) return; + grid_->UpdateScrollOffset(event->details().scroll_x()); event->SetHandled(); break; @@ -84,6 +85,7 @@ case ui::ET_GESTURE_SCROLL_END: { if (!ShouldUseTabletModeGridLayout()) return; + grid_->EndScroll(); event->SetHandled(); break; @@ -97,18 +99,19 @@ // Updates |grid_| based on |offset| when |observed_compositor_| begins a new // frame. DCHECK(observed_compositor_); - gfx::Vector2dF offset; // As a fling progresses, the velocity degenerates, and the difference in // offset is passed into |grid_| as an updated scroll value. Stop flinging if // the API for fling says to finish, or we reach one of the edges of the - // overview grid. + // overview grid. Update the grid even if the API says to stop flinging as it + // still produces a usable |offset|, but end the fling afterwards. + gfx::Vector2dF offset; bool continue_fling = fling_curve_->ComputeScrollOffset(timestamp, &offset, &fling_velocity_); - if (!continue_fling) { - continue_fling = grid_->UpdateScrollOffset( - fling_last_offset_ ? offset.x() - fling_last_offset_->x() : offset.x()); - } + continue_fling = grid_->UpdateScrollOffset( + fling_last_offset_ ? offset.x() - fling_last_offset_->x() + : offset.x()) && + continue_fling; fling_last_offset_ = base::make_optional(offset); if (!continue_fling) @@ -143,6 +146,7 @@ void OverviewGridEventHandler::EndFling() { if (!observed_compositor_) return; + observed_compositor_->RemoveAnimationObserver(this); observed_compositor_ = nullptr; fling_curve_.reset();
diff --git a/ash/wm/overview/overview_grid_event_handler.h b/ash/wm/overview/overview_grid_event_handler.h index ad15805f..be5e4361 100644 --- a/ash/wm/overview/overview_grid_event_handler.h +++ b/ash/wm/overview/overview_grid_event_handler.h
@@ -38,6 +38,8 @@ void OnMouseEvent(ui::MouseEvent* event) override; void OnGestureEvent(ui::GestureEvent* event) override; + bool IsFlingInProgressForTesting() const { return !!fling_curve_; } + private: // ui::CompositorAnimationObserver: void OnAnimationStep(base::TimeTicks timestamp) override;
diff --git a/ash/wm/overview/overview_session.cc b/ash/wm/overview/overview_session.cc index 54fd8ec..6ecc005 100644 --- a/ash/wm/overview/overview_session.cc +++ b/ash/wm/overview/overview_session.cc
@@ -70,8 +70,8 @@ // Values for scrolling the grid by using the keyboard. // TODO(sammiequon): See if we can use the same values used for web scrolling. -constexpr int kKeyboardPressScrollingDp = 25; -constexpr int kKeyboardHoldScrollingDp = 5; +constexpr int kKeyboardPressScrollingDp = 75; +constexpr int kKeyboardHoldScrollingDp = 15; // Returns the bounds for the overview window grid according to the split view // state. If split view mode is active, the overview window should open on the
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc index efe809c..6eb17018 100644 --- a/ash/wm/overview/overview_session_unittest.cc +++ b/ash/wm/overview/overview_session_unittest.cc
@@ -33,6 +33,7 @@ #include "ash/wm/overview/overview_constants.h" #include "ash/wm/overview/overview_controller.h" #include "ash/wm/overview/overview_grid.h" +#include "ash/wm/overview/overview_grid_event_handler.h" #include "ash/wm/overview/overview_highlight_controller.h" #include "ash/wm/overview/overview_item.h" #include "ash/wm/overview/overview_test_util.h" @@ -48,6 +49,7 @@ #include "ash/wm/splitview/split_view_utils.h" #include "ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" +#include "ash/wm/tablet_mode/tablet_mode_controller_test_api.h" #include "ash/wm/tablet_mode/tablet_mode_window_drag_controller.h" #include "ash/wm/window_preview_view.h" #include "ash/wm/window_state.h" @@ -69,6 +71,7 @@ #include "ui/base/hit_test.h" #include "ui/compositor/layer_animation_sequence.h" #include "ui/compositor/scoped_animation_duration_scale_mode.h" +#include "ui/compositor/test/draw_waiter_for_test.h" #include "ui/display/display_layout.h" #include "ui/display/manager/display_manager.h" #include "ui/display/test/display_manager_test_api.h" @@ -2819,9 +2822,6 @@ return windows; } - // TODO(sammiequon): Investigate simulating fling event for testing inertial - // scrolling. - private: base::test::ScopedFeatureList scoped_feature_list_; @@ -2989,6 +2989,74 @@ EXPECT_LT(leftmost_window->target_bounds(), left_bounds); } +// A unique test class for testing flings in overview as those rely on observing +// compositior animations which require a mock time task environment. +class OverviewSessionNewLayoutFlingTest : public AshTestBase { + public: + OverviewSessionNewLayoutFlingTest() + : AshTestBase(base::test::TaskEnvironment::TimeSource::MOCK_TIME) {} + ~OverviewSessionNewLayoutFlingTest() override = default; + + // AshTestBase: + void SetUp() override { + scoped_feature_list_.InitAndEnableFeature(features::kNewOverviewLayout); + AshTestBase::SetUp(); + + // Overview flinging is only available in tablet mode. + base::RunLoop().RunUntilIdle(); + TabletModeControllerTestApi().EnterTabletMode(); + base::RunLoop().RunUntilIdle(); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; + DISALLOW_COPY_AND_ASSIGN(OverviewSessionNewLayoutFlingTest); +}; + +TEST_F(OverviewSessionNewLayoutFlingTest, BasicFling) { + std::vector<std::unique_ptr<aura::Window>> windows(16); + for (int i = 15; i >= 0; --i) + windows[i] = CreateTestWindow(); + + ToggleOverview(); + OverviewGrid* grid = GetOverviewSession()->grid_list()[0].get(); + OverviewGridEventHandler* grid_event_handler = grid->grid_event_handler(); + + OverviewItem* item = GetOverviewItemForWindow(windows[2].get()); + const gfx::Point item_center = + gfx::ToRoundedPoint(item->target_bounds().CenterPoint()); + + // Create a scroll sequence which results in a fling. + const gfx::Vector2d shift(-200, 0); + GetEventGenerator()->GestureScrollSequence( + item_center, item_center + shift, base::TimeDelta::FromMilliseconds(10), + 10); + + ui::DrawWaiterForTest::WaitForCompositingStarted( + windows[0]->GetRootWindow()->layer()->GetCompositor()); + ASSERT_TRUE(grid_event_handler->IsFlingInProgressForTesting()); + + // Test that the scroll offset decreases as we advance the clock. Check the + // scroll offset instead of the item bounds as there is an optimization which + // does not update the item bounds of invisible elements. On some iterations, + // there may not be enough time passed to decay the velocity so the scroll + // offset will not change, but the overall change should be substantial. + constexpr int kMaxLoops = 10; + const float initial_scroll_offset = grid->scroll_offset(); + float previous_scroll_offset = initial_scroll_offset; + for (int i = 0; + i < kMaxLoops && grid_event_handler->IsFlingInProgressForTesting(); + ++i) { + task_environment_->FastForwardBy(base::TimeDelta::FromMilliseconds(50)); + + float scroll_offset = grid->scroll_offset(); + EXPECT_LE(scroll_offset, previous_scroll_offset); + previous_scroll_offset = scroll_offset; + } + + EXPECT_LT(grid->scroll_offset(), initial_scroll_offset - 100.f); +} + // Tests that a vertical scroll sequence will close the window it is scrolled // on. TEST_F(OverviewSessionNewLayoutTest, VerticalScrollingOnOverviewItem) {
diff --git a/ash/wm/tablet_mode/tablet_mode_window_drag_delegate.cc b/ash/wm/tablet_mode/tablet_mode_window_drag_delegate.cc index 2e21d0d5..3cb1c429 100644 --- a/ash/wm/tablet_mode/tablet_mode_window_drag_delegate.cc +++ b/ash/wm/tablet_mode/tablet_mode_window_drag_delegate.cc
@@ -294,12 +294,14 @@ } void TabletModeWindowDragDelegate::FlingOrSwipe(ui::GestureEvent* event) { - if (ShouldFlingIntoOverview(event)) { - DCHECK(Shell::Get()->overview_controller()->InOverviewSession()); - Shell::Get()->overview_controller()->overview_session()->AddItem( - dragged_window_, /*reposition=*/true, /*animate=*/false); + if (event->type() == ui::ET_SCROLL_FLING_START) { + if (ShouldFlingIntoOverview(event)) { + DCHECK(Shell::Get()->overview_controller()->InOverviewSession()); + Shell::Get()->overview_controller()->overview_session()->AddItem( + dragged_window_, /*reposition=*/true, /*animate=*/false); + } + StartFling(event); } - StartFling(event); EndWindowDrag(ToplevelWindowEventHandler::DragResult::SUCCESS, GetEventLocationInScreen(event)); } @@ -453,9 +455,6 @@ bool TabletModeWindowDragDelegate::ShouldFlingIntoOverview( const ui::GestureEvent* event) const { - if (event->type() != ui::ET_SCROLL_FLING_START) - return false; - // Only fling into overview if overview is currently open. In some case, // overview is not opened when drag starts (if it's tab-dragging and the // dragged window is not the same with the source window), we should not fling
diff --git a/base/containers/checked_iterators.h b/base/containers/checked_iterators.h index fb87dd4..e844ae0 100644 --- a/base/containers/checked_iterators.h +++ b/base/containers/checked_iterators.h
@@ -15,7 +15,7 @@ namespace base { template <typename T> -class CheckedRandomAccessIterator { +class CheckedContiguousIterator { public: using difference_type = std::ptrdiff_t; using value_type = std::remove_cv_t<T>; @@ -25,18 +25,17 @@ // Required for converting constructor below. template <typename U> - friend class CheckedRandomAccessIterator; + friend class CheckedContiguousIterator; - CheckedRandomAccessIterator() = default; - CheckedRandomAccessIterator(T* start, const T* end) - : CheckedRandomAccessIterator(start, start, end) {} - CheckedRandomAccessIterator(const T* start, T* current, const T* end) + CheckedContiguousIterator() = default; + CheckedContiguousIterator(T* start, const T* end) + : CheckedContiguousIterator(start, start, end) {} + CheckedContiguousIterator(const T* start, T* current, const T* end) : start_(start), current_(current), end_(end) { CHECK(start <= current); CHECK(current <= end); } - CheckedRandomAccessIterator(const CheckedRandomAccessIterator& other) = - default; + CheckedContiguousIterator(const CheckedContiguousIterator& other) = default; // Converting constructor allowing conversions like CRAI<T> to CRAI<const T>, // but disallowing CRAI<const T> to CRAI<T> or CRAI<Derived> to CRAI<Base>, @@ -46,7 +45,7 @@ template < typename U, std::enable_if_t<std::is_convertible<U (*)[], T (*)[]>::value>* = nullptr> - CheckedRandomAccessIterator(const CheckedRandomAccessIterator<U>& other) + CheckedContiguousIterator(const CheckedContiguousIterator<U>& other) : start_(other.start_), current_(other.current_), end_(other.end_) { // We explicitly don't delegate to the 3-argument constructor here. Its // CHECKs would be redundant, since we expect |other| to maintain its own @@ -55,66 +54,66 @@ DCHECK(other.current_ <= other.end_); } - ~CheckedRandomAccessIterator() = default; + ~CheckedContiguousIterator() = default; - CheckedRandomAccessIterator& operator=( - const CheckedRandomAccessIterator& other) = default; + CheckedContiguousIterator& operator=(const CheckedContiguousIterator& other) = + default; - bool operator==(const CheckedRandomAccessIterator& other) const { + bool operator==(const CheckedContiguousIterator& other) const { CheckComparable(other); return current_ == other.current_; } - bool operator!=(const CheckedRandomAccessIterator& other) const { + bool operator!=(const CheckedContiguousIterator& other) const { CheckComparable(other); return current_ != other.current_; } - bool operator<(const CheckedRandomAccessIterator& other) const { + bool operator<(const CheckedContiguousIterator& other) const { CheckComparable(other); return current_ < other.current_; } - bool operator<=(const CheckedRandomAccessIterator& other) const { + bool operator<=(const CheckedContiguousIterator& other) const { CheckComparable(other); return current_ <= other.current_; } - bool operator>(const CheckedRandomAccessIterator& other) const { + bool operator>(const CheckedContiguousIterator& other) const { CheckComparable(other); return current_ > other.current_; } - bool operator>=(const CheckedRandomAccessIterator& other) const { + bool operator>=(const CheckedContiguousIterator& other) const { CheckComparable(other); return current_ >= other.current_; } - CheckedRandomAccessIterator& operator++() { + CheckedContiguousIterator& operator++() { CHECK(current_ != end_); ++current_; return *this; } - CheckedRandomAccessIterator operator++(int) { - CheckedRandomAccessIterator old = *this; + CheckedContiguousIterator operator++(int) { + CheckedContiguousIterator old = *this; ++*this; return old; } - CheckedRandomAccessIterator& operator--() { + CheckedContiguousIterator& operator--() { CHECK(current_ != start_); --current_; return *this; } - CheckedRandomAccessIterator& operator--(int) { - CheckedRandomAccessIterator old = *this; + CheckedContiguousIterator& operator--(int) { + CheckedContiguousIterator old = *this; --*this; return old; } - CheckedRandomAccessIterator& operator+=(difference_type rhs) { + CheckedContiguousIterator& operator+=(difference_type rhs) { if (rhs > 0) { CHECK_LE(rhs, end_ - current_); } else { @@ -124,13 +123,13 @@ return *this; } - CheckedRandomAccessIterator operator+(difference_type rhs) const { - CheckedRandomAccessIterator it = *this; + CheckedContiguousIterator operator+(difference_type rhs) const { + CheckedContiguousIterator it = *this; it += rhs; return it; } - CheckedRandomAccessIterator& operator-=(difference_type rhs) { + CheckedContiguousIterator& operator-=(difference_type rhs) { if (rhs < 0) { CHECK_LE(rhs, end_ - current_); } else { @@ -140,14 +139,14 @@ return *this; } - CheckedRandomAccessIterator operator-(difference_type rhs) const { - CheckedRandomAccessIterator it = *this; + CheckedContiguousIterator operator-(difference_type rhs) const { + CheckedContiguousIterator it = *this; it -= rhs; return it; } - friend difference_type operator-(const CheckedRandomAccessIterator& lhs, - const CheckedRandomAccessIterator& rhs) { + friend difference_type operator-(const CheckedContiguousIterator& lhs, + const CheckedContiguousIterator& rhs) { CHECK(lhs.start_ == rhs.start_); CHECK(lhs.end_ == rhs.end_); return lhs.current_ - rhs.current_; @@ -169,9 +168,9 @@ return current_[rhs]; } - static bool IsRangeMoveSafe(const CheckedRandomAccessIterator& from_begin, - const CheckedRandomAccessIterator& from_end, - const CheckedRandomAccessIterator& to) + static bool IsRangeMoveSafe(const CheckedContiguousIterator& from_begin, + const CheckedContiguousIterator& from_end, + const CheckedContiguousIterator& to) WARN_UNUSED_RESULT { if (from_end < from_begin) return false; @@ -186,7 +185,7 @@ } private: - void CheckComparable(const CheckedRandomAccessIterator& other) const { + void CheckComparable(const CheckedContiguousIterator& other) const { CHECK_EQ(start_, other.start_); CHECK_EQ(end_, other.end_); } @@ -197,7 +196,7 @@ }; template <typename T> -using CheckedRandomAccessConstIterator = CheckedRandomAccessIterator<const T>; +using CheckedContiguousConstIterator = CheckedContiguousIterator<const T>; } // namespace base
diff --git a/base/containers/span.h b/base/containers/span.h index f56172d1a065..c03bdf8 100644 --- a/base/containers/span.h +++ b/base/containers/span.h
@@ -224,8 +224,8 @@ using difference_type = ptrdiff_t; using pointer = T*; using reference = T&; - using iterator = CheckedRandomAccessIterator<T>; - using const_iterator = CheckedRandomAccessConstIterator<T>; + using iterator = CheckedContiguousIterator<T>; + using const_iterator = CheckedContiguousConstIterator<T>; using reverse_iterator = std::reverse_iterator<iterator>; using const_reverse_iterator = std::reverse_iterator<const_iterator>; static constexpr index_type extent = Extent;
diff --git a/base/containers/span_unittest.cc b/base/containers/span_unittest.cc index e726cb7..5a5a9d8 100644 --- a/base/containers/span_unittest.cc +++ b/base/containers/span_unittest.cc
@@ -1260,47 +1260,47 @@ // Overlapping ranges. for (const int dest_start_index : kOverlappingStartIndexes) { - EXPECT_FALSE(CheckedRandomAccessIterator<const int>::IsRangeMoveSafe( + EXPECT_FALSE(CheckedContiguousIterator<const int>::IsRangeMoveSafe( span.begin(), span.end(), - CheckedRandomAccessIterator<const int>( + CheckedContiguousIterator<const int>( span.data() + dest_start_index, span.data() + dest_start_index + kNumElements))); - EXPECT_FALSE(CheckedRandomAccessConstIterator<const int>::IsRangeMoveSafe( + EXPECT_FALSE(CheckedContiguousConstIterator<const int>::IsRangeMoveSafe( span.cbegin(), span.cend(), - CheckedRandomAccessConstIterator<const int>( + CheckedContiguousConstIterator<const int>( span.data() + dest_start_index, span.data() + dest_start_index + kNumElements))); } // Non-overlapping ranges. for (const int dest_start_index : kNonOverlappingStartIndexes) { - EXPECT_TRUE(CheckedRandomAccessIterator<const int>::IsRangeMoveSafe( + EXPECT_TRUE(CheckedContiguousIterator<const int>::IsRangeMoveSafe( span.begin(), span.end(), - CheckedRandomAccessIterator<const int>( + CheckedContiguousIterator<const int>( span.data() + dest_start_index, span.data() + dest_start_index + kNumElements))); - EXPECT_TRUE(CheckedRandomAccessConstIterator<const int>::IsRangeMoveSafe( + EXPECT_TRUE(CheckedContiguousConstIterator<const int>::IsRangeMoveSafe( span.cbegin(), span.cend(), - CheckedRandomAccessConstIterator<const int>( + CheckedContiguousConstIterator<const int>( span.data() + dest_start_index, span.data() + dest_start_index + kNumElements))); } // IsRangeMoveSafe is true if the length to be moved is 0. - EXPECT_TRUE(CheckedRandomAccessIterator<const int>::IsRangeMoveSafe( + EXPECT_TRUE(CheckedContiguousIterator<const int>::IsRangeMoveSafe( span.begin(), span.begin(), - CheckedRandomAccessIterator<const int>(span.data(), span.data()))); - EXPECT_TRUE(CheckedRandomAccessConstIterator<const int>::IsRangeMoveSafe( + CheckedContiguousIterator<const int>(span.data(), span.data()))); + EXPECT_TRUE(CheckedContiguousConstIterator<const int>::IsRangeMoveSafe( span.cbegin(), span.cbegin(), - CheckedRandomAccessConstIterator<const int>(span.data(), span.data()))); + CheckedContiguousConstIterator<const int>(span.data(), span.data()))); // IsRangeMoveSafe is false if end < begin. - EXPECT_FALSE(CheckedRandomAccessIterator<const int>::IsRangeMoveSafe( + EXPECT_FALSE(CheckedContiguousIterator<const int>::IsRangeMoveSafe( span.end(), span.begin(), - CheckedRandomAccessIterator<const int>(span.data(), span.data()))); - EXPECT_FALSE(CheckedRandomAccessConstIterator<const int>::IsRangeMoveSafe( + CheckedContiguousIterator<const int>(span.data(), span.data()))); + EXPECT_FALSE(CheckedContiguousConstIterator<const int>::IsRangeMoveSafe( span.cend(), span.cbegin(), - CheckedRandomAccessConstIterator<const int>(span.data(), span.data()))); + CheckedContiguousConstIterator<const int>(span.data(), span.data()))); } TEST(SpanTest, Sort) {
diff --git a/base/test/BUILD.gn b/base/test/BUILD.gn index 24d5983..ad5af73d 100644 --- a/base/test/BUILD.gn +++ b/base/test/BUILD.gn
@@ -435,7 +435,7 @@ ] args = [] outputs = [ - "$root_out_dir/fontconfig_caches/df1acc8c-39d5-4a8b-8507-b1a7396ac3ac-le64.cache-7", + "$root_out_dir/fontconfig_caches/fb5c91b2895aa445d23aebf7f9e2189c-le64.cache-7", "$root_out_dir/test_fonts/.uuid", ] }
diff --git a/base/test/generate_fontconfig_caches.cc b/base/test/generate_fontconfig_caches.cc index 7ef1b7c..f0774f8c 100644 --- a/base/test/generate_fontconfig_caches.cc +++ b/base/test/generate_fontconfig_caches.cc
@@ -32,7 +32,7 @@ base::PathService::Get(base::DIR_MODULE, &dir_module); base::FilePath uuid_file_path = dir_module.Append("test_fonts").Append(".uuid"); - const char uuid[] = "df1acc8c-39d5-4a8b-8507-b1a7396ac3ac"; + const char uuid[] = "fb5c91b2895aa445d23aebf7f9e2189c"; WriteFile(uuid_file_path, uuid, strlen(uuid)); // fontconfig writes the mtime of the test_fonts directory into the cache. It
diff --git a/base/test/test_support_ios.mm b/base/test/test_support_ios.mm index 85c800a..676051e3 100644 --- a/base/test/test_support_ios.mm +++ b/base/test/test_support_ios.mm
@@ -106,7 +106,10 @@ // the device log that is retrieved from the device by the host. - (BOOL)shouldRedirectOutputToFile { #if !TARGET_IPHONE_SIMULATOR - return !base::debug::BeingDebugged(); + // Tests in XCTest mode don't need to redirect output to a file because the + // test result parser analyzes console output. + return !base::ShouldRunIOSUnittestsWithXCTest() && + !base::debug::BeingDebugged(); #endif // TARGET_IPHONE_SIMULATOR return NO; }
diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py index e4c8256e..4af059c 100755 --- a/build/android/resource_sizes.py +++ b/build/android/resource_sizes.py
@@ -441,6 +441,11 @@ # file size. Also gets rid of compression. normalized_apk_size -= native_code.ComputeZippedSize() normalized_apk_size += native_code_unaligned_size + # Normalized dex size: Size within the zip + size on disk for Android Go + # devices running Android O (which ~= uncompressed dex size). + # Use a constant compression factor to account for fluctuations. + normalized_apk_size -= java_code.ComputeZippedSize() + normalized_apk_size += int(java_code.ComputeUncompressedSize() * 1.5) # Unaligned size should be ~= uncompressed size or something is wrong. # As of now, padding_fraction ~= .007 padding_fraction = -_PercentageDifference( @@ -450,9 +455,6 @@ padding_fraction, native_code.ComputeUncompressedSize(), native_code_unaligned_size)) - # Normalized dex size: size within the zip + size on disk for Android Go - # devices (which ~= uncompressed dex size). - normalized_apk_size += java_code.ComputeUncompressedSize() if apks_path: # Locale normalization not needed when measuring only one locale. # E.g. a change that adds 300 chars of unstranslated strings would cause the
diff --git a/build/config/mac/plist_util.py b/build/config/mac/plist_util.py index bba0208a..a7156a62 100644 --- a/build/config/mac/plist_util.py +++ b/build/config/mac/plist_util.py
@@ -3,6 +3,7 @@ # found in the LICENSE file. import argparse +import codecs import plistlib import os import re @@ -212,6 +213,10 @@ def Main(): + # Cache this codec so that plistlib can find it. See + # https://crbug.com/1005190#c2 for more details. + codecs.lookup('utf-8') + parser = argparse.ArgumentParser(description='manipulate plist files') subparsers = parser.add_subparsers()
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index b15782f1a..cc0424a 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -300,8 +300,6 @@ "trees/layer_tree_host.cc", "trees/layer_tree_host.h", "trees/layer_tree_host_client.h", - "trees/layer_tree_host_common.cc", - "trees/layer_tree_host_common.h", "trees/layer_tree_host_impl.cc", "trees/layer_tree_host_impl.h", "trees/layer_tree_host_single_thread_client.h", @@ -339,6 +337,8 @@ "trees/render_frame_metadata.h", "trees/render_frame_metadata_observer.h", "trees/scoped_abort_remaining_swap_promises.h", + "trees/scroll_and_scale_set.cc", + "trees/scroll_and_scale_set.h", "trees/scroll_node.cc", "trees/scroll_node.h", "trees/single_thread_proxy.cc", @@ -458,6 +458,8 @@ "test/geometry_test_utils.h", "test/layer_test_common.cc", "test/layer_test_common.h", + "test/layer_tree_impl_test_base.cc", + "test/layer_tree_impl_test_base.h", "test/layer_tree_json_parser.cc", "test/layer_tree_json_parser.h", "test/layer_tree_pixel_resource_test.cc", @@ -675,9 +677,9 @@ "tiles/tile_manager_unittest.cc", "tiles/tile_priority_unittest.cc", "trees/damage_tracker_unittest.cc", + "trees/draw_properties_unittest.cc", "trees/image_animation_controller_unittest.cc", "trees/layer_tree_frame_sink_unittest.cc", - "trees/layer_tree_host_common_unittest.cc", "trees/layer_tree_host_impl_unittest.cc", "trees/layer_tree_host_pixeltest_blending.cc", "trees/layer_tree_host_pixeltest_filters.cc", @@ -705,6 +707,7 @@ "trees/occlusion_tracker_unittest.cc", "trees/occlusion_unittest.cc", "trees/presentation_time_callback_buffer_unittest.cc", + "trees/property_tree_builder_unittest.cc", "trees/property_tree_unittest.cc", "trees/swap_promise_manager_unittest.cc", "trees/tree_synchronizer_unittest.cc", @@ -806,7 +809,7 @@ "tiles/gpu_image_decode_cache_perftest.cc", "tiles/software_image_decode_cache_perftest.cc", "tiles/tile_manager_perftest.cc", - "trees/layer_tree_host_common_perftest.cc", + "trees/draw_property_utils_perftest.cc", "trees/layer_tree_host_perftest.cc", ]
diff --git a/cc/benchmarks/invalidation_benchmark.cc b/cc/benchmarks/invalidation_benchmark.cc index 39309d3a..08402bd 100644 --- a/cc/benchmarks/invalidation_benchmark.cc +++ b/cc/benchmarks/invalidation_benchmark.cc
@@ -15,7 +15,6 @@ #include "cc/layers/picture_layer.h" #include "cc/trees/draw_property_utils.h" #include "cc/trees/layer_tree_host.h" -#include "cc/trees/layer_tree_host_common.h" #include "ui/gfx/geometry/rect.h" namespace cc {
diff --git a/cc/benchmarks/rasterize_and_record_benchmark.cc b/cc/benchmarks/rasterize_and_record_benchmark.cc index 2fa6600..120203ca 100644 --- a/cc/benchmarks/rasterize_and_record_benchmark.cc +++ b/cc/benchmarks/rasterize_and_record_benchmark.cc
@@ -22,7 +22,6 @@ #include "cc/layers/recording_source.h" #include "cc/paint/display_item_list.h" #include "cc/trees/layer_tree_host.h" -#include "cc/trees/layer_tree_host_common.h" #include "ui/gfx/geometry/rect.h" namespace cc {
diff --git a/cc/benchmarks/rasterize_and_record_benchmark_impl.cc b/cc/benchmarks/rasterize_and_record_benchmark_impl.cc index 89946a0..609b925b 100644 --- a/cc/benchmarks/rasterize_and_record_benchmark_impl.cc +++ b/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
@@ -15,7 +15,6 @@ #include "cc/layers/picture_layer_impl.h" #include "cc/raster/playback_image_provider.h" #include "cc/raster/raster_buffer_provider.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_host_impl.h" #include "cc/trees/layer_tree_impl.h" #include "ui/gfx/geometry/axis_transform2d.h"
diff --git a/cc/input/scrollbar_animation_controller_unittest.cc b/cc/input/scrollbar_animation_controller_unittest.cc index 1f75a66..b00998f 100644 --- a/cc/input/scrollbar_animation_controller_unittest.cc +++ b/cc/input/scrollbar_animation_controller_unittest.cc
@@ -6,7 +6,7 @@ #include "cc/layers/solid_color_scrollbar_layer_impl.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/layer_tree_impl.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -57,7 +57,7 @@ }; class ScrollbarAnimationControllerAuraOverlayTest - : public LayerTestCommon::LayerImplTest, + : public LayerTreeImplTestBase, public testing::Test { public: ScrollbarAnimationControllerAuraOverlayTest() : client_(host_impl()) {} @@ -112,7 +112,7 @@ h_scrollbar_effect.opacity = 0.f; h_scrollbar_effect.has_potential_opacity_animation = true; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_ = ScrollbarAnimationController:: CreateScrollbarAnimationControllerAuraOverlay( @@ -176,7 +176,7 @@ clip_layer_->SetBounds(gfx::Size(200, 200)); scroll_layer_->SetScrollable(gfx::Size(200, 200)); GetScrollNode(scroll_layer_)->container_bounds = gfx::Size(200, 200); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollUpdate(); ExpectScrollbarsOpacity(0); @@ -184,7 +184,7 @@ clip_layer_->SetBounds(gfx::Size(100, 100)); scroll_layer_->SetScrollable(gfx::Size(100, 100)); GetScrollNode(scroll_layer_)->container_bounds = gfx::Size(100, 100); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollUpdate(); ExpectScrollbarsOpacity(1); } @@ -201,7 +201,7 @@ EXPECT_EQ(gfx::Size(100, 200), clip_layer_->bounds()); scroll_layer_->SetScrollable(gfx::Size(100, 200)); GetScrollNode(scroll_layer_)->container_bounds = gfx::Size(100, 200); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); @@ -216,7 +216,7 @@ EXPECT_EQ(gfx::Size(200, 100), clip_layer_->bounds()); scroll_layer_->SetScrollable(gfx::Size(200, 100)); GetScrollNode(scroll_layer_)->container_bounds = gfx::Size(200, 100); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); @@ -1353,7 +1353,7 @@ } class ScrollbarAnimationControllerAndroidTest - : public LayerTestCommon::LayerImplTest, + : public LayerTreeImplTestBase, public testing::Test, public ScrollbarAnimationControllerClient { public: @@ -1401,7 +1401,7 @@ scrollbar_effect.opacity = 0.f; scrollbar_effect.has_potential_opacity_animation = true; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_ = ScrollbarAnimationController::CreateScrollbarAnimationControllerAndroid( @@ -1478,7 +1478,7 @@ // Shrink along X axis, horizontal scrollbar should appear. scroll_layer_->SetScrollable(gfx::Size(100, 200)); GetScrollNode(scroll_layer_)->container_bounds = gfx::Size(100, 200); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); scrollbar_controller_->DidScrollUpdate(); @@ -1489,7 +1489,7 @@ // should disappear. scroll_layer_->SetScrollable(gfx::Size(200, 100)); GetScrollNode(scroll_layer_)->container_bounds = gfx::Size(200, 100); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); @@ -1507,7 +1507,7 @@ // Shrink along X axis, vertical scrollbar should remain invisible. scroll_layer_->SetScrollable(gfx::Size(100, 200)); GetScrollNode(scroll_layer_)->container_bounds = gfx::Size(100, 200); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); scrollbar_controller_->DidScrollUpdate(); @@ -1517,7 +1517,7 @@ // Shrink along Y axis and expand along X, vertical scrollbar should appear. scroll_layer_->SetScrollable(gfx::Size(200, 100)); GetScrollNode(scroll_layer_)->container_bounds = gfx::Size(200, 100); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); @@ -1531,7 +1531,7 @@ EXPECT_EQ(HORIZONTAL, scrollbar_layer_->orientation()); GetScrollNode(scroll_layer_)->user_scrollable_horizontal = false; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); @@ -1545,7 +1545,7 @@ EXPECT_EQ(HORIZONTAL, scrollbar_layer_->orientation()); GetScrollNode(scroll_layer_)->user_scrollable_vertical = false; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); @@ -1560,7 +1560,7 @@ EXPECT_EQ(VERTICAL, scrollbar_layer_->orientation()); GetScrollNode(scroll_layer_)->user_scrollable_vertical = false; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin(); @@ -1575,7 +1575,7 @@ EXPECT_EQ(VERTICAL, scrollbar_layer_->orientation()); GetScrollNode(scroll_layer_)->user_scrollable_horizontal = false; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_->DidScrollBegin();
diff --git a/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc b/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc index 2744f64..6b8668b2 100644 --- a/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc +++ b/cc/input/single_scrollbar_animation_controller_thinning_unittest.cc
@@ -6,7 +6,7 @@ #include "cc/layers/solid_color_scrollbar_layer_impl.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/layer_tree_impl.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -50,7 +50,7 @@ }; class SingleScrollbarAnimationControllerThinningTest - : public LayerTestCommon::LayerImplTest, + : public LayerTreeImplTestBase, public testing::Test { public: SingleScrollbarAnimationControllerThinningTest() : client_(host_impl()) {} @@ -86,7 +86,7 @@ scrollbar_layer_->SetOffsetToTransformParent(gfx::Vector2dF(90, 0)); CreateEffectNode(scrollbar_layer_).has_potential_opacity_animation = true; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); scrollbar_controller_ = SingleScrollbarAnimationControllerThinning::Create( scroll_layer->element_id(), HORIZONTAL, &client_, kThinningDuration);
diff --git a/cc/layers/effect_tree_layer_list_iterator_unittest.cc b/cc/layers/effect_tree_layer_list_iterator_unittest.cc index e876252..fc595f8 100644 --- a/cc/layers/effect_tree_layer_list_iterator_unittest.cc +++ b/cc/layers/effect_tree_layer_list_iterator_unittest.cc
@@ -9,9 +9,8 @@ #include "base/memory/ptr_util.h" #include "cc/layers/layer.h" #include "cc/test/fake_layer_tree_host.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/test/test_task_graph_runner.h" -#include "cc/trees/layer_tree_host_common.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/transform.h" @@ -44,7 +43,7 @@ } \ EXPECT_EQ(itself, layer->count_); -class EffectTreeLayerListIteratorTest : public LayerTestCommon::LayerImplTest, +class EffectTreeLayerListIteratorTest : public LayerTreeImplTestBase, public testing::Test { public: void SetUp() override { @@ -102,7 +101,7 @@ auto* root = static_cast<TestLayerImpl*>(root_layer()); root->SetDrawsContent(false); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); IterateFrontToBack(); EXPECT_COUNT(root, 0, -1, -1); @@ -119,7 +118,7 @@ auto* fourth = AddLayer<TestLayerImpl>(); CopyProperties(root, fourth); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); IterateFrontToBack(); EXPECT_COUNT(root, 5, -1, 4); @@ -157,7 +156,7 @@ auto* root3 = AddLayer<TestLayerImpl>(); CopyProperties(root, root3); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); IterateFrontToBack(); EXPECT_COUNT(root, 14, -1, 13);
diff --git a/cc/layers/heads_up_display_layer_impl_unittest.cc b/cc/layers/heads_up_display_layer_impl_unittest.cc index bd85ddd..8cc10dd 100644 --- a/cc/layers/heads_up_display_layer_impl_unittest.cc +++ b/cc/layers/heads_up_display_layer_impl_unittest.cc
@@ -9,7 +9,7 @@ #include "cc/test/fake_impl_task_runner_provider.h" #include "cc/test/fake_layer_tree_frame_sink.h" #include "cc/test/fake_layer_tree_host_impl.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/test/test_task_graph_runner.h" #include "cc/trees/layer_tree_impl.h" #include "testing/gtest/include/gtest/gtest.h" @@ -40,7 +40,7 @@ EXPECT_EQ(0u, data.num_incomplete_tiles); } -class HeadsUpDisplayLayerImplTest : public LayerTestCommon::LayerImplTest, +class HeadsUpDisplayLayerImplTest : public LayerTreeImplTestBase, public ::testing::Test {}; TEST_F(HeadsUpDisplayLayerImplTest, ResourcelessSoftwareDrawAfterResourceLoss) { @@ -51,7 +51,7 @@ layer->set_visible_layer_rect(gfx::Rect(100, 100)); CopyProperties(root, layer); - UpdateDrawProperties(host_impl()->pending_tree()); + UpdatePendingTreeDrawProperties(); // Check regular hardware draw is ok. CheckDrawLayer(layer, layer_tree_frame_sink(), resource_provider(), @@ -74,7 +74,7 @@ layer->SetBounds(gfx::Size(100, 100)); CopyProperties(root, layer); - UpdateDrawProperties(host_impl()->pending_tree()); + UpdatePendingTreeDrawProperties(); // Check Ganesh canvas drawing is ok. CheckDrawLayer(layer, layer_tree_frame_sink(), resource_provider(),
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index f92363d..41a22e6 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc
@@ -605,9 +605,9 @@ // The mask layer should not have any children. DCHECK(mask_layer->children().empty()); + mask_layer->inputs_.position = gfx::PointF(); mask_layer->SetIsDrawable(true); mask_layer->SetBlendMode(SkBlendMode::kDstIn); - mask_layer->SetIsMask(true); AddChild(mask_layer); } inputs_.mask_layer = mask_layer.get(); @@ -818,6 +818,14 @@ } void Layer::SetPosition(const gfx::PointF& position) { + // The mask layer should always be at the same location as the masked layer + // which is its parent, so its position should be always zero. + if (parent() && parent()->inputs_.mask_layer == this) { + DCHECK(!layer_tree_host_ || !layer_tree_host_->IsUsingLayerLists()); + DCHECK(inputs_.position.IsOrigin()); + return; + } + DCHECK(IsPropertyChangeAllowed()); if (inputs_.position == position) return; @@ -1387,8 +1395,10 @@ "Layer::PushPropertiesTo"); DCHECK(layer_tree_host_); - if (inputs_.mask_layer) + if (inputs_.mask_layer) { DCHECK_EQ(bounds(), inputs_.mask_layer->bounds()); + DCHECK(inputs_.mask_layer->position().IsOrigin()); + } // The element id should be set first because other setters may // depend on it. Referencing element id on a layer is
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc index 0e4dc0a..591fe06d 100644 --- a/cc/layers/layer_impl.cc +++ b/cc/layers/layer_impl.cc
@@ -26,7 +26,6 @@ #include "cc/trees/clip_node.h" #include "cc/trees/draw_property_utils.h" #include "cc/trees/effect_node.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/layer_tree_settings.h" #include "cc/trees/mutator_host.h" @@ -1018,4 +1017,62 @@ return false; } +static float TranslationFromActiveTreeLayerScreenSpaceTransform( + LayerImpl* pending_tree_layer) { + LayerTreeImpl* layer_tree_impl = pending_tree_layer->layer_tree_impl(); + if (layer_tree_impl) { + LayerImpl* active_tree_layer = + layer_tree_impl->FindActiveTreeLayerById(pending_tree_layer->id()); + if (active_tree_layer) { + gfx::Transform active_tree_screen_space_transform = + active_tree_layer->draw_properties().screen_space_transform; + if (active_tree_screen_space_transform.IsIdentity()) + return 0.f; + if (active_tree_screen_space_transform.ApproximatelyEqual( + pending_tree_layer->draw_properties().screen_space_transform)) + return 0.f; + return (active_tree_layer->draw_properties() + .screen_space_transform.To2dTranslation() - + pending_tree_layer->draw_properties() + .screen_space_transform.To2dTranslation()) + .Length(); + } + } + return 0.f; +} + +// A layer jitters if its screen space transform is same on two successive +// commits, but has changed in between the commits. CalculateLayerJitter +// computes the jitter for the layer. +int LayerImpl::CalculateJitter() { + float jitter = 0.f; + performance_properties().translation_from_last_frame = 0.f; + performance_properties().last_commit_screen_space_transform = + draw_properties().screen_space_transform; + + if (!visible_layer_rect().IsEmpty()) { + if (draw_properties().screen_space_transform.ApproximatelyEqual( + performance_properties().last_commit_screen_space_transform)) { + float translation_from_last_commit = + TranslationFromActiveTreeLayerScreenSpaceTransform(this); + if (translation_from_last_commit > 0.f) { + performance_properties().num_fixed_point_hits++; + performance_properties().translation_from_last_frame = + translation_from_last_commit; + if (performance_properties().num_fixed_point_hits > + LayerTreeImpl::kFixedPointHitsThreshold) { + // Jitter = Translation from fixed point * sqrt(Area of the layer). + // The square root of the area is used instead of the area to match + // the dimensions of both terms on the rhs. + jitter += translation_from_last_commit * + sqrt(visible_layer_rect().size().GetArea()); + } + } else { + performance_properties().num_fixed_point_hits = 0; + } + } + } + return jitter; +} + } // namespace cc
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h index c4c7bb3..b7a6f19 100644 --- a/cc/layers/layer_impl.h +++ b/cc/layers/layer_impl.h
@@ -464,6 +464,8 @@ // TODO(sunxd): Remove this function and replace it with visitor pattern. virtual bool is_surface_layer() const; + int CalculateJitter(); + protected: // When |will_always_push_properties| is true, the layer will not itself set // its SetNeedsPushProperties() state, as it expects to be always pushed to
diff --git a/cc/layers/layer_impl_unittest.cc b/cc/layers/layer_impl_unittest.cc index 3dc9292..f41540c 100644 --- a/cc/layers/layer_impl_unittest.cc +++ b/cc/layers/layer_impl_unittest.cc
@@ -11,7 +11,7 @@ #include "cc/paint/filter_operations.h" #include "cc/test/animation_test_common.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/single_thread_proxy.h" #include "cc/trees/tree_synchronizer.h" @@ -74,10 +74,9 @@ return gfx::Vector2dF(delta.x(), delta.y()); } -class LayerImplTest : public LayerTestCommon::LayerImplTest, - public ::testing::Test { +class LayerImplTest : public LayerTreeImplTestBase, public ::testing::Test { public: - using LayerTestCommon::LayerImplTest::LayerImplTest; + using LayerTreeImplTestBase::LayerTreeImplTestBase; }; TEST_F(LayerImplTest, VerifyPendingLayerChangesAreTrackedProperly) { @@ -98,7 +97,7 @@ LayerImpl* grand_child = AddLayerInPendingTree<LayerImpl>(); CopyProperties(child, grand_child); - UpdateDrawProperties(host_impl()->pending_tree()); + UpdatePendingTreeDrawProperties(); // Creating children is an internal operation and should not mark layers as // changed. @@ -122,7 +121,7 @@ EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( root->SetUpdateRect(arbitrary_rect)); EXECUTE_AND_VERIFY_ONLY_LAYER_CHANGED(root->SetBounds(arbitrary_size)); - UpdateDrawProperties(host_impl()->pending_tree()); + UpdatePendingTreeDrawProperties(); // Changing these properties affects the entire subtree of layers. EXECUTE_AND_VERIFY_SUBTREE_CHANGED( @@ -168,7 +167,7 @@ LayerImpl* child = AddLayer<LayerImpl>(); CopyProperties(scroll, child); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); // Make |scroll| the outer viewport container layer. This ensures the later // call to |SetViewportBoundsDelta| will be on a viewport layer. @@ -179,7 +178,7 @@ scroll->SetMasksToBounds(true); CreateClipNode(scroll); child->SetClipTreeIndex(scroll->clip_tree_index()); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); root->layer_tree_impl()->ResetAllChangeTracking(); // SetViewportBoundsDelta changes subtree only when masks_to_bounds is true. @@ -192,7 +191,7 @@ scroll->SetMasksToBounds(false); scroll->SetClipTreeIndex(root->clip_tree_index()); child->SetClipTreeIndex(root->clip_tree_index()); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); root->layer_tree_impl()->ResetAllChangeTracking(); // SetViewportBoundsDelta does not change the subtree without masks_to_bounds. @@ -202,7 +201,7 @@ EXPECT_TRUE(scroll->LayerPropertyChangedNotFromPropertyTrees()); EXPECT_FALSE(host_impl()->active_tree()->property_trees()->full_tree_damaged); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); root->layer_tree_impl()->ResetAllChangeTracking(); // Ensure some node is affected by the outer viewport bounds delta. This @@ -216,7 +215,7 @@ scroll->SetViewportBoundsDelta(gfx::Vector2d(111, 222)); EXPECT_TRUE(transform_tree.needs_update()); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); root->layer_tree_impl()->ResetAllChangeTracking(); // Ensure scrolling changes the transform tree but does not damage all trees. @@ -242,7 +241,7 @@ CopyProperties(root, layer2); DCHECK(host_impl()->CanDraw()); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); float arbitrary_number = 0.352f; gfx::Size arbitrary_size = gfx::Size(111, 222); @@ -262,7 +261,7 @@ // Create a render surface, because we must have a render surface if we have // filters. CreateEffectNode(layer).render_surface_reason = RenderSurfaceReason::kTest; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); // Related filter functions. VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( @@ -282,7 +281,7 @@ VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); host_impl()->active_tree()->set_needs_update_draw_properties(); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(arbitrary_vector2d)); VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(gfx::Vector2d())); @@ -299,7 +298,7 @@ // Unrelated functions, always set to new values, always set needs update. host_impl()->active_tree()->set_needs_update_draw_properties(); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true); layer->NoteLayerPropertyChanged()); CreateClipNode(layer); @@ -318,7 +317,7 @@ // Unrelated functions, set to the same values, no needs update. GetEffectNode(layer)->filters = arbitrary_filters; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( host_impl()->active_tree()->SetFilterMutated(layer->element_id(), arbitrary_filters)); @@ -398,7 +397,7 @@ CopyProperties(root, layer_); CreateTransformNode(layer_); CreateScrollNode(layer_); - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); } LayerImpl* layer() { return layer_; } @@ -580,5 +579,51 @@ pending_layer->CurrentScrollOffset()); } +TEST_F(LayerImplTest, JitterTest) { + host_impl()->CreatePendingTree(); + auto* root_layer = EnsureRootLayerInPendingTree(); + root_layer->SetBounds(gfx::Size(50, 50)); + SetupViewport(root_layer, gfx::Size(100, 100), gfx::Size(100, 100)); + auto* scroll_layer = host_impl()->pending_tree()->InnerViewportScrollLayer(); + auto* content_layer = AddLayerInPendingTree<LayerImpl>(); + content_layer->SetBounds(gfx::Size(100, 100)); + content_layer->SetDrawsContent(true); + CopyProperties(host_impl()->pending_tree()->OuterViewportScrollLayer(), + content_layer); + UpdatePendingTreeDrawProperties(); + + host_impl()->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); + const int scroll = 5; + int accumulated_scroll = 0; + for (int i = 0; i < LayerTreeImpl::kFixedPointHitsThreshold + 1; ++i) { + host_impl()->ActivateSyncTree(); + accumulated_scroll += scroll; + SetScrollOffset(host_impl()->InnerViewportScrollLayer(), + gfx::ScrollOffset(0, accumulated_scroll)); + UpdateActiveTreeDrawProperties(); + + host_impl()->CreatePendingTree(); + LayerTreeImpl* pending_tree = host_impl()->pending_tree(); + pending_tree->set_source_frame_number(i + 1); + pending_tree->PushPageScaleFromMainThread(1.f, 1.f, 1.f); + // Simulate scroll offset pushed from the main thread. + SetScrollOffset(scroll_layer, gfx::ScrollOffset(0, accumulated_scroll)); + // The scroll done on the active tree is undone on the pending tree. + content_layer->SetOffsetToTransformParent( + gfx::Vector2dF(0, accumulated_scroll)); + content_layer->SetNeedsPushProperties(); + UpdateDrawProperties(pending_tree); + + float jitter = content_layer->CalculateJitter(); + // There should not be any jitter measured till we hit the fixed point hits + // threshold. 250 is sqrt(50 * 50) * 5. 50x50 is the visible bounds of + // content (clipped by the viewport). 5 is the distance between the + // locations of the content in the pending tree and the active tree. + float expected_jitter = + (i == pending_tree->kFixedPointHitsThreshold) ? 250 : 0; + EXPECT_EQ(jitter, expected_jitter); + } +} + } // namespace } // namespace cc
diff --git a/cc/layers/layer_unittest.cc b/cc/layers/layer_unittest.cc index 0f324e7..7446eaa 100644 --- a/cc/layers/layer_unittest.cc +++ b/cc/layers/layer_unittest.cc
@@ -502,6 +502,7 @@ scoped_refptr<Layer> parent = Layer::Create(); FakeContentLayerClient client; scoped_refptr<PictureLayer> mask = PictureLayer::Create(&client); + mask->SetPosition(gfx::PointF(88, 99)); parent->SetMaskLayer(mask); ASSERT_EQ(1u, parent->children().size()); @@ -509,6 +510,11 @@ EXPECT_EQ(mask.get(), parent->children()[0]); EXPECT_TRUE(parent->IsMaskedByChild()); + // Should ignore mask layer's position. + EXPECT_TRUE(mask->position().IsOrigin()); + mask->SetPosition(gfx::PointF(11, 22)); + EXPECT_TRUE(mask->position().IsOrigin()); + parent->SetMaskLayer(mask); ASSERT_EQ(1u, parent->children().size()); EXPECT_EQ(parent.get(), mask->parent());
diff --git a/cc/layers/nine_patch_layer_impl_unittest.cc b/cc/layers/nine_patch_layer_impl_unittest.cc index 388a0449..7b22ec4 100644 --- a/cc/layers/nine_patch_layer_impl_unittest.cc +++ b/cc/layers/nine_patch_layer_impl_unittest.cc
@@ -12,7 +12,7 @@ #include "cc/test/fake_layer_tree_frame_sink.h" #include "cc/test/fake_ui_resource_layer_tree_host_impl.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/single_thread_proxy.h" #include "components/viz/common/quads/texture_draw_quad.h" #include "testing/gmock/include/gmock/gmock.h" @@ -70,8 +70,7 @@ UpdateDrawProperties(host_impl.active_tree()); AppendQuadsData data; - host_impl.active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + host_impl.active_tree()->root_layer()->AppendQuads(render_pass.get(), &data); // Verify quad rects const auto& quads = render_pass->quad_list; @@ -183,8 +182,7 @@ UpdateDrawProperties(host_impl.active_tree()); AppendQuadsData data; - host_impl.active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + host_impl.active_tree()->root_layer()->AppendQuads(render_pass.get(), &data); // Verify quad rects const auto& quads = render_pass->quad_list; @@ -350,7 +348,7 @@ gfx::Size layer_size(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SkBitmap sk_bitmap; sk_bitmap.allocN32Pixels(10, 10); @@ -378,8 +376,7 @@ gfx::Rect occluded; impl.AppendQuadsWithOcclusion(nine_patch_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), - gfx::Rect(layer_size)); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect(layer_size)); EXPECT_EQ(9u, impl.quad_list().size()); } @@ -388,7 +385,7 @@ gfx::Rect occluded(nine_patch_layer_impl->visible_layer_rect()); impl.AppendQuadsWithOcclusion(nine_patch_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); } @@ -398,8 +395,8 @@ impl.AppendQuadsWithOcclusion(nine_patch_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); // The layer outputs nine quads, three of which are partially occluded, and // three fully occluded. EXPECT_EQ(6u, impl.quad_list().size()); @@ -411,7 +408,7 @@ gfx::Size layer_size(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SkBitmap sk_bitmap_opaque; sk_bitmap_opaque.allocN32Pixels(10, 10);
diff --git a/cc/layers/painted_scrollbar_layer_impl_unittest.cc b/cc/layers/painted_scrollbar_layer_impl_unittest.cc index 2015633..3115841 100644 --- a/cc/layers/painted_scrollbar_layer_impl_unittest.cc +++ b/cc/layers/painted_scrollbar_layer_impl_unittest.cc
@@ -7,7 +7,7 @@ #include <stddef.h> #include "cc/resources/ui_resource_bitmap.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "components/viz/common/quads/draw_quad.h" #include "components/viz/common/quads/texture_draw_quad.h" #include "testing/gtest/include/gtest/gtest.h" @@ -22,7 +22,7 @@ gfx::Size viewport_size(1000, 1000); float thumb_opacity = 0.2f; - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SkBitmap thumb_sk_bitmap; thumb_sk_bitmap.allocN32Pixels(10, 10); @@ -70,8 +70,8 @@ impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); EXPECT_EQ(2u, impl.quad_list().size()); EXPECT_EQ(0u, partially_occluded_count); @@ -116,7 +116,7 @@ gfx::Rect occluded(scrollbar_layer_impl->visible_layer_rect()); impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); } @@ -126,8 +126,8 @@ impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); // The layer outputs two quads, which is partially occluded. EXPECT_EQ(2u, impl.quad_list().size()); EXPECT_EQ(2u, partially_occluded_count);
diff --git a/cc/layers/painted_scrollbar_layer_unittest.cc b/cc/layers/painted_scrollbar_layer_unittest.cc index b29ee4a..ee0c030d 100644 --- a/cc/layers/painted_scrollbar_layer_unittest.cc +++ b/cc/layers/painted_scrollbar_layer_unittest.cc
@@ -8,8 +8,8 @@ #include "cc/test/fake_layer_tree_host.h" #include "cc/test/fake_layer_tree_host_client.h" #include "cc/test/fake_scrollbar.h" +#include "cc/test/layer_test_common.h" #include "cc/test/test_task_graph_runner.h" -#include "cc/trees/layer_tree_host_common.h" #include "testing/gmock/include/gmock/gmock.h" using ::testing::Mock; @@ -44,10 +44,7 @@ scrollbar_layer->SetBounds(gfx::Size(100, 100)); layer_tree_host->SetRootLayer(scrollbar_layer); - - LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( - scrollbar_layer.get(), gfx::Rect(scrollbar_layer->bounds())); - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + UpdateDrawProperties(layer_tree_host.get()); EXPECT_EQ(scrollbar_layer->layer_tree_host(), layer_tree_host.get());
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc index 5f08cf3..d6c2c09 100644 --- a/cc/layers/picture_layer.cc +++ b/cc/layers/picture_layer.cc
@@ -63,8 +63,6 @@ ShouldUseTransformedRasterization()); layer_impl->set_gpu_raster_max_texture_size( layer_tree_host()->device_viewport_rect().size()); - - layer_impl->SetIsMask(is_mask()); layer_impl->SetIsBackdropFilterMask(is_backdrop_filter_mask()); // TODO(enne): http://crbug.com/918126 debugging @@ -232,19 +230,10 @@ return picture_layer_inputs_.client && Layer::HasDrawableContent(); } -void PictureLayer::SetIsMask(bool is_mask) { - if (picture_layer_inputs_.is_mask == is_mask) - return; - - picture_layer_inputs_.is_mask = is_mask; - SetNeedsCommit(); -} - void PictureLayer::SetIsBackdropFilterMask(bool is_backdrop_filter_mask) { if (picture_layer_inputs_.is_backdrop_filter_mask == is_backdrop_filter_mask) return; - DCHECK(!is_backdrop_filter_mask || is_mask()); picture_layer_inputs_.is_backdrop_filter_mask = is_backdrop_filter_mask; SetNeedsCommit(); }
diff --git a/cc/layers/picture_layer.h b/cc/layers/picture_layer.h index 0838827..8150e151 100644 --- a/cc/layers/picture_layer.h +++ b/cc/layers/picture_layer.h
@@ -37,11 +37,6 @@ return picture_layer_inputs_.transformed_rasterization_allowed; } - // TODO(crbug.com/1003414): Remove this flag when we tile mask layers (except - // for backdrop filter masks) normally. - void SetIsMask(bool is_mask); - bool is_mask() const { return picture_layer_inputs_.is_mask; } - void SetIsBackdropFilterMask(bool is_backdrop_filter_mask); bool is_backdrop_filter_mask() const { return picture_layer_inputs_.is_backdrop_filter_mask; @@ -77,7 +72,6 @@ ContentLayerClient* client = nullptr; bool nearest_neighbor = false; bool transformed_rasterization_allowed = false; - bool is_mask = false; bool is_backdrop_filter_mask = false; gfx::Rect recorded_viewport; scoped_refptr<DisplayItemList> display_list;
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc index 0bb56d2..98a1dd1 100644 --- a/cc/layers/picture_layer_impl.cc +++ b/cc/layers/picture_layer_impl.cc
@@ -91,7 +91,6 @@ raster_source_scale_(0.f), raster_contents_scale_(0.f), low_res_raster_contents_scale_(0.f), - is_mask_(false), is_backdrop_filter_mask_(false), was_screen_space_transform_animating_(false), only_used_low_res_last_append_quads_(false), @@ -153,7 +152,6 @@ layer_impl->SetNearestNeighbor(nearest_neighbor_); layer_impl->SetUseTransformedRasterization(use_transformed_rasterization_); - layer_impl->SetIsMask(is_mask_); layer_impl->SetIsBackdropFilterMask(is_backdrop_filter_mask_); // Solid color layers have no tilings. @@ -189,8 +187,8 @@ AppendQuadsData* append_quads_data) { // RenderSurfaceImpl::AppendQuads sets mask properties in the DrawQuad for // the masked surface, which will apply to both the backdrop filter and the - // contents of the masked surface, so we should not quad of the mask layer - // in DstIn blend mode. + // contents of the masked surface, so we should not append quads of the mask + // layer in DstIn blend mode which would apply the mask in another codepath. if (is_backdrop_filter_mask_) return; @@ -224,11 +222,7 @@ gfx::Rect scaled_visible_layer_rect = shared_quad_state->visible_quad_layer_rect; - Occlusion occlusion; - // TODO(sunxd): Compute the correct occlusion for mask layers. - if (!is_mask_) { - occlusion = draw_properties().occlusion_in_content_space; - } + Occlusion occlusion = draw_properties().occlusion_in_content_space; EffectNode* effect_node = GetEffectTree().Node(effect_tree_index()); SolidColorLayerImpl::AppendSolidQuads( @@ -247,13 +241,10 @@ tilings_->num_tilings() ? MaximumTilingContentsScale() : 1.f; PopulateScaledSharedQuadState(shared_quad_state, max_contents_scale, contents_opaque()); - Occlusion scaled_occlusion; - if (!is_mask_) { - scaled_occlusion = - draw_properties() - .occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( - shared_quad_state->quad_to_target_transform); - } + Occlusion scaled_occlusion = + draw_properties() + .occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( + shared_quad_state->quad_to_target_transform); if (current_draw_mode_ == DRAW_MODE_RESOURCELESS_SOFTWARE) { DCHECK(shared_quad_state->quad_layer_rect.origin() == gfx::Point(0, 0)); @@ -442,7 +433,7 @@ float alpha = (SkColorGetA(draw_info.solid_color()) * (1.0f / 255.0f)) * shared_quad_state->opacity; - if (is_mask_ || alpha >= std::numeric_limits<float>::epsilon()) { + if (alpha >= std::numeric_limits<float>::epsilon()) { auto* quad = render_pass->CreateAndAppendDrawQuad<viz::SolidColorDrawQuad>(); quad->SetNew( @@ -462,7 +453,7 @@ if (!has_draw_quad) { // Checkerboard. SkColor color = SafeOpaqueBackgroundColor(); - if (!is_mask_ && ShowDebugBorders(DebugBorderType::LAYER)) { + if (ShowDebugBorders(DebugBorderType::LAYER)) { // Fill the whole tile with the missing tile color. color = DebugColors::DefaultCheckerboardColor(); } @@ -813,11 +804,10 @@ const Tile::CreateInfo& info) { int flags = 0; - // We don't handle solid color masks if mask tiling is disabled, we also don't - // handle solid color single texture masks if the flag is enabled, so we - // shouldn't bother analyzing those. + // We don't handle solid color single texture masks for backdrop filters, + // so we shouldn't bother analyzing those. // Otherwise, always analyze to maximize memory savings. - if (!is_mask_) + if (!is_backdrop_filter_mask_) flags = Tile::USE_PICTURE_ANALYSIS; if (contents_opaque()) @@ -907,6 +897,12 @@ viz::ResourceId* resource_id, gfx::Size* resource_size, gfx::SizeF* resource_uv_size) const { + // We need contents resource for backdrop filter masks only. + if (!is_backdrop_filter_mask()) { + *resource_id = 0; + return; + } + // The bounds and the pile size may differ if the pile wasn't updated (ie. // PictureLayer::Update didn't happen). In that case the pile will be empty. DCHECK(raster_source_->GetSize().IsEmpty() || @@ -1349,9 +1345,9 @@ // have tilings that would become larger than the max_texture_size since they // use a single tile for the entire tiling. Other layers can have tilings such // that dimension * scale does not overflow. - float max_dimension = - static_cast<float>(is_mask_ ? layer_tree_impl()->max_texture_size() - : std::numeric_limits<int>::max()); + float max_dimension = static_cast<float>( + is_backdrop_filter_mask_ ? layer_tree_impl()->max_texture_size() + : std::numeric_limits<int>::max()); int higher_dimension = std::max(bounds().width(), bounds().height()); float max_scale = max_dimension / higher_dimension;
diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h index aafc8dd6..d2459c4 100644 --- a/cc/layers/picture_layer_impl.h +++ b/cc/layers/picture_layer_impl.h
@@ -43,13 +43,7 @@ PictureLayerImpl& operator=(const PictureLayerImpl&) = delete; - // TODO(crbug.com/1003414): Remove this flag when we tile mask layers (except - // for backdrop filter masks) normally. - void SetIsMask(bool is_mask) { is_mask_ = is_mask; } - bool is_mask() const { return is_mask_; } - void SetIsBackdropFilterMask(bool is_backdrop_filter_mask) { - DCHECK(!is_backdrop_filter_mask || is_mask_); is_backdrop_filter_mask_ = is_backdrop_filter_mask; } bool is_backdrop_filter_mask() const { return is_backdrop_filter_mask_; } @@ -229,7 +223,6 @@ float raster_contents_scale_; float low_res_raster_contents_scale_; - bool is_mask_ : 1; bool is_backdrop_filter_mask_ : 1; bool was_screen_space_transform_animating_ : 1;
diff --git a/cc/layers/picture_layer_impl_perftest.cc b/cc/layers/picture_layer_impl_perftest.cc index 78cf1d39..e9a87d6e 100644 --- a/cc/layers/picture_layer_impl_perftest.cc +++ b/cc/layers/picture_layer_impl_perftest.cc
@@ -8,7 +8,7 @@ #include "base/timer/lap_timer.h" #include "cc/test/fake_picture_layer_impl.h" #include "cc/test/fake_raster_source.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/tiles/tiling_set_raster_queue_all.h" #include "cc/trees/layer_tree_impl.h" #include "testing/gtest/include/gtest/gtest.h" @@ -34,7 +34,7 @@ tiling_tiles.begin(), tiling_tiles.end(), std::back_inserter(*all_tiles)); } -class PictureLayerImplPerfTest : public LayerTestCommon::LayerImplTest, +class PictureLayerImplPerfTest : public LayerTreeImplTestBase, public testing::Test { public: PictureLayerImplPerfTest() @@ -60,7 +60,7 @@ SetupRootProperties(pending_layer_); pending_tree->SetRootLayerForTesting(std::move(pending_layer)); - LayerTreeHostCommon::PrepareForUpdateDrawPropertiesForTesting(pending_tree); + PrepareForUpdateDrawProperties(pending_tree); // Don't update draw properties because the tilings will conflict with the // tilings that will be added in the tests. }
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc index 4afc2f7..90e7f22 100644 --- a/cc/layers/picture_layer_impl_unittest.cc +++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -28,7 +28,7 @@ #include "cc/test/fake_raster_source.h" #include "cc/test/fake_recording_source.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/test/skia_common.h" #include "cc/test/test_layer_tree_host_base.h" #include "cc/test/test_paint_worklet_input.h" @@ -1177,7 +1177,7 @@ EXPECT_EQ(mask->num_tilings(), 1u); } -TEST_F(PictureLayerImplTest, HugeMasksGetScaledDown) { +TEST_F(PictureLayerImplTest, HugeBackdropFilterMasksGetScaledDown) { host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); gfx::Size layer_bounds(1000, 1000); @@ -1186,10 +1186,12 @@ FakeRasterSource::CreateFilled(layer_bounds); SetupPendingTree(valid_raster_source); - CreateEffectNode(pending_layer()); + CreateEffectNode(pending_layer()) + .backdrop_filters.Append(FilterOperation::CreateInvertFilter(1.0)); auto* pending_mask = AddLayer<FakePictureLayerImpl>( host_impl()->pending_tree(), valid_raster_source); SetupMaskProperties(pending_layer(), pending_mask); + ASSERT_TRUE(pending_mask->is_backdrop_filter_mask()); host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); UpdateDrawProperties(host_impl()->pending_tree()); @@ -1235,7 +1237,7 @@ SetupPendingTree(huge_raster_source); pending_mask->SetBounds(huge_bounds); - pending_mask->SetRasterSourceOnPending(huge_raster_source, Region()); + pending_mask->SetRasterSource(huge_raster_source, Region()); host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); UpdateDrawProperties(host_impl()->pending_tree()); @@ -1291,7 +1293,7 @@ SetupPendingTree(extra_huge_raster_source); pending_mask->SetBounds(extra_huge_bounds); - pending_mask->SetRasterSourceOnPending(extra_huge_raster_source, Region()); + pending_mask->SetRasterSource(extra_huge_raster_source, Region()); EXPECT_FALSE(pending_mask->CanHaveTilings()); @@ -1301,7 +1303,7 @@ EXPECT_EQ(0u, pending_mask->num_tilings()); } -TEST_F(PictureLayerImplTest, ScaledMaskLayer) { +TEST_F(PictureLayerImplTest, ScaledBackdropFilterMaskLayer) { host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); gfx::Size layer_bounds(1000, 1000); @@ -1312,10 +1314,12 @@ FakeRasterSource::CreateFilled(layer_bounds); SetupPendingTree(valid_raster_source); - CreateEffectNode(pending_layer()); + CreateEffectNode(pending_layer()) + .backdrop_filters.Append(FilterOperation::CreateInvertFilter(1.0)); auto* pending_mask = AddLayer<FakePictureLayerImpl>( host_impl()->pending_tree(), valid_raster_source); SetupMaskProperties(pending_layer(), pending_mask); + ASSERT_TRUE(pending_mask->is_backdrop_filter_mask()); host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); UpdateDrawProperties(host_impl()->pending_tree()); @@ -1347,6 +1351,51 @@ EXPECT_EQ(gfx::SizeF(1.0f, 1.0f), mask_uv_size); } +TEST_F(PictureLayerImplTest, ScaledMaskLayer) { + host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); + + gfx::Size layer_bounds(1000, 1000); + + SetInitialDeviceScaleFactor(1.3f); + + scoped_refptr<FakeRasterSource> valid_raster_source = + FakeRasterSource::CreateFilled(layer_bounds); + SetupPendingTree(valid_raster_source); + + CreateEffectNode(pending_layer()); + auto* pending_mask = AddLayer<FakePictureLayerImpl>( + host_impl()->pending_tree(), valid_raster_source); + SetupMaskProperties(pending_layer(), pending_mask); + ASSERT_FALSE(pending_mask->is_backdrop_filter_mask()); + + host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); + UpdateDrawProperties(host_impl()->pending_tree()); + + // Masks are scaled, and do not have a low res tiling. + EXPECT_EQ(1.3f, pending_mask->HighResTiling()->contents_scale_key()); + EXPECT_EQ(1u, pending_mask->num_tilings()); + + host_impl()->tile_manager()->InitializeTilesWithResourcesForTesting( + pending_mask->HighResTiling()->AllTilesForTesting()); + + ActivateTree(); + + FakePictureLayerImpl* active_mask = static_cast<FakePictureLayerImpl*>( + host_impl()->active_tree()->LayerById(pending_mask->id())); + + // Non-backdrop-filter mask layers are tiled normally. + EXPECT_EQ(36u, active_mask->HighResTiling()->AllTilesForTesting().size()); + // And don't have mask resources. + viz::ResourceId mask_resource_id; + gfx::Size mask_texture_size; + gfx::SizeF mask_uv_size; + active_mask->GetContentsResourceId(&mask_resource_id, &mask_texture_size, + &mask_uv_size); + EXPECT_EQ(0u, mask_resource_id); + EXPECT_EQ(gfx::Size(), mask_texture_size); + EXPECT_EQ(gfx::SizeF(), mask_uv_size); +} + TEST_F(PictureLayerImplTest, ReleaseTileResources) { gfx::Size layer_bounds(1300, 1900); SetupDefaultTrees(layer_bounds); @@ -2268,7 +2317,7 @@ auto* raw_pending_layer = pending_layer.get(); SetupRootProperties(raw_pending_layer); pending_tree->SetRootLayerForTesting(std::move(pending_layer)); - LayerTreeHostCommon::PrepareForUpdateDrawPropertiesForTesting(pending_tree); + PrepareForUpdateDrawProperties(pending_tree); // Set some state on the pending layer, make sure it is not clobbered // by a sync from the active layer. This could happen because if the @@ -3270,7 +3319,7 @@ gfx::Size layer_bounds(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; host_impl()->active_tree()->SetDeviceViewportRect(gfx::Rect(viewport_size)); scoped_refptr<FakeRasterSource> pending_raster_source = @@ -3287,8 +3336,7 @@ gfx::Rect occluded; impl.AppendQuadsWithOcclusion(active_layer(), occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), - gfx::Rect(layer_bounds)); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect(layer_bounds)); EXPECT_EQ(100u, impl.quad_list().size()); } @@ -3297,7 +3345,7 @@ gfx::Rect occluded(active_layer()->visible_layer_rect()); impl.AppendQuadsWithOcclusion(active_layer(), occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); } @@ -3307,8 +3355,8 @@ impl.AppendQuadsWithOcclusion(active_layer(), occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); // The layer outputs one quad, which is partially occluded. EXPECT_EQ(100u - 10u, impl.quad_list().size()); EXPECT_EQ(10u + 10u, partially_occluded_count); @@ -3319,7 +3367,7 @@ gfx::Size layer_bounds(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; host_impl()->active_tree()->SetDeviceViewportRect(gfx::Rect(viewport_size)); scoped_refptr<FakeRasterSource> pending_raster_source = @@ -3335,8 +3383,7 @@ impl.AppendQuadsWithOcclusion(active_layer(), occluded); size_t partial_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded(impl.quad_list(), occluded, - &partial_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, &partial_occluded_count); // Because of the implementation of test helper AppendQuadsWithOcclusion, // the occlusion will have a scale transform resulted from the device scale // factor. A single partially overlapped DrawQuad of 500x500 will be added. @@ -3349,7 +3396,7 @@ gfx::Size layer_bounds(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; host_impl()->active_tree()->SetDeviceViewportRect(gfx::Rect(viewport_size)); scoped_refptr<FakeRasterSource> pending_raster_source = @@ -3365,8 +3412,8 @@ impl.AppendQuadsWithOcclusion(active_layer(), occluded); size_t partial_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded(impl.quad_list(), gfx::Rect(), - &partial_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), gfx::Rect(), + &partial_occluded_count); // None of the quads shall be occluded because mask layers ignores // occlusion. EXPECT_EQ(1u, impl.quad_list().size()); @@ -5231,7 +5278,7 @@ host_impl()->ActivateSyncTree(); FakePictureLayerImpl* active_layer = static_cast<FakePictureLayerImpl*>( - host_impl()->active_tree()->root_layer_for_testing()); + host_impl()->active_tree()->root_layer()); SetupDrawPropertiesAndUpdateTiles( active_layer, suggested_ideal_contents_scale, device_scale_factor, page_scale_factor, animation_contents_scale, animation_contents_scale,
diff --git a/cc/layers/picture_layer_unittest.cc b/cc/layers/picture_layer_unittest.cc index 27b933d..9f8feab 100644 --- a/cc/layers/picture_layer_unittest.cc +++ b/cc/layers/picture_layer_unittest.cc
@@ -20,6 +20,7 @@ #include "cc/test/fake_proxy.h" #include "cc/test/fake_recording_source.h" #include "cc/test/layer_test_common.h" +#include "cc/test/property_tree_test_utils.h" #include "cc/test/skia_common.h" #include "cc/test/stub_layer_tree_host_single_thread_client.h" #include "cc/test/test_task_graph_runner.h" @@ -107,7 +108,7 @@ host_impl.pending_tree()->SetRootLayerForTesting( FakePictureLayerImpl::Create(host_impl.pending_tree(), 1)); FakePictureLayerImpl* layer_impl = static_cast<FakePictureLayerImpl*>( - host_impl.pending_tree()->root_layer_for_testing()); + host_impl.pending_tree()->root_layer()); layer->PushPropertiesTo(layer_impl); EXPECT_EQ(invalidation_bounds, @@ -147,7 +148,7 @@ host_impl.pending_tree()->SetRootLayerForTesting( FakePictureLayerImpl::Create(host_impl.pending_tree(), 1)); FakePictureLayerImpl* layer_impl = static_cast<FakePictureLayerImpl*>( - host_impl.pending_tree()->root_layer_for_testing()); + host_impl.pending_tree()->root_layer()); layer->PushPropertiesTo(layer_impl); EXPECT_EQ(gfx::Rect(), layer_impl->GetPendingInvalidation()->bounds()); @@ -191,7 +192,7 @@ host_impl.pending_tree()->SetRootLayerForTesting( FakePictureLayerImpl::Create(host_impl.pending_tree(), 1)); FakePictureLayerImpl* layer_impl = static_cast<FakePictureLayerImpl*>( - host_impl.pending_tree()->root_layer_for_testing()); + host_impl.pending_tree()->root_layer()); SetupRootProperties(layer_impl); UpdateDrawProperties(host_impl.pending_tree()); @@ -210,7 +211,7 @@ host_impl.CreatePendingTree(); layer_impl = static_cast<FakePictureLayerImpl*>( - host_impl.pending_tree()->root_layer_for_testing()); + host_impl.pending_tree()->root_layer()); // We should now have invalid contents and should therefore clear the // recording source. @@ -221,11 +222,9 @@ std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); AppendQuadsData data; - host_impl.active_tree()->root_layer_for_testing()->WillDraw( - DRAW_MODE_SOFTWARE, nullptr); - host_impl.active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); - host_impl.active_tree()->root_layer_for_testing()->DidDraw(nullptr); + host_impl.active_tree()->root_layer()->WillDraw(DRAW_MODE_SOFTWARE, nullptr); + host_impl.active_tree()->root_layer()->AppendQuads(render_pass.get(), &data); + host_impl.active_tree()->root_layer()->DidDraw(nullptr); } TEST(PictureLayerTest, HasSlowPaths) {
diff --git a/cc/layers/render_surface_impl_unittest.cc b/cc/layers/render_surface_impl_unittest.cc index 8bcdb89..46f9c26 100644 --- a/cc/layers/render_surface_impl_unittest.cc +++ b/cc/layers/render_surface_impl_unittest.cc
@@ -9,7 +9,7 @@ #include "cc/layers/append_quads_data.h" #include "cc/test/fake_mask_layer_impl.h" #include "cc/test/fake_raster_source.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "components/viz/common/quads/render_pass_draw_quad.h" #include "testing/gtest/include/gtest/gtest.h" @@ -20,7 +20,7 @@ gfx::Size layer_size(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; LayerImpl* owning_layer_impl = impl.AddLayer<LayerImpl>(); owning_layer_impl->SetBounds(layer_size); @@ -39,8 +39,7 @@ gfx::Rect occluded; impl.AppendSurfaceQuadsWithOcclusion(render_surface_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), - gfx::Rect(layer_size)); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect(layer_size)); EXPECT_EQ(1u, impl.quad_list().size()); } @@ -49,7 +48,7 @@ gfx::Rect occluded(owning_layer_impl->visible_layer_rect()); impl.AppendSurfaceQuadsWithOcclusion(render_surface_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); } @@ -59,8 +58,8 @@ impl.AppendSurfaceQuadsWithOcclusion(render_surface_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); // The layer outputs one quad, which is partially occluded. EXPECT_EQ(1u, impl.quad_list().size()); EXPECT_EQ(1u, partially_occluded_count); @@ -76,7 +75,7 @@ scoped_refptr<FakeRasterSource> raster_source = FakeRasterSource::CreateFilledSolidColor(layer_size); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; auto* root = impl.root_layer(); auto* surface = impl.AddLayer<LayerImpl>(); @@ -143,8 +142,8 @@ // With tiled mask layer, we only generate mask quads for visible rect. In // this case |quad_layer_rect| is not fully covered, but // |visible_quad_layer_rect| is fully covered. - LayerTestCommon::VerifyQuadsExactlyCoverRect( - render_pass->quad_list, quad->shared_quad_state->visible_quad_layer_rect); + VerifyQuadsExactlyCoverRect(render_pass->quad_list, + quad->shared_quad_state->visible_quad_layer_rect); } } // namespace
diff --git a/cc/layers/render_surface_unittest.cc b/cc/layers/render_surface_unittest.cc index 723d930..f3f53072 100644 --- a/cc/layers/render_surface_unittest.cc +++ b/cc/layers/render_surface_unittest.cc
@@ -10,7 +10,7 @@ #include "cc/test/fake_layer_tree_host_impl.h" #include "cc/test/fake_picture_layer_impl.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/test/mock_occlusion_tracker.h" #include "cc/test/test_task_graph_runner.h" #include "cc/trees/layer_tree_impl.h" @@ -86,7 +86,7 @@ // This test checks that SurfacePropertyChanged() has the correct behavior. // - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; LayerImpl* root = impl.root_layer(); LayerTreeImpl* active_tree = impl.host_impl()->active_tree(); @@ -134,7 +134,7 @@ } TEST(RenderSurfaceTest, SanityCheckSurfaceCreatesCorrectSharedQuadState) { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; LayerImpl* root = impl.root_layer(); LayerImpl* layer = impl.AddLayer<LayerImpl>(); @@ -182,7 +182,7 @@ } TEST(RenderSurfaceTest, SanityCheckSurfaceCreatesCorrectRenderPass) { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; LayerImpl* root = impl.root_layer(); LayerImpl* layer = impl.AddLayer<LayerImpl>(); @@ -210,7 +210,7 @@ } TEST(RenderSurfaceTest, SanityCheckSurfaceIgnoreMaskLayerOcclusion) { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; LayerImpl* root = impl.root_layer(); // Set a big enough viewport to show the entire render pass. impl.host_impl()->active_tree()->SetDeviceViewportRect(gfx::Rect(1000, 1000)); @@ -224,7 +224,7 @@ auto* mask_layer = impl.AddLayer<FakePictureLayerImplForRenderSurfaceTest>(); scoped_refptr<FakeRasterSource> raster_source( FakeRasterSource::CreateFilled(mask_layer->bounds())); - mask_layer->SetRasterSourceOnActive(raster_source, Region()); + mask_layer->SetRasterSource(raster_source, Region()); std::vector<gfx::Rect> quad_rects; quad_rects.push_back(gfx::Rect(0, 0, 100, 100)); quad_rects.push_back(gfx::Rect(100, 0, 100, 100));
diff --git a/cc/layers/scrollbar_layer_unittest.cc b/cc/layers/scrollbar_layer_unittest.cc index d34945a..76555ba 100644 --- a/cc/layers/scrollbar_layer_unittest.cc +++ b/cc/layers/scrollbar_layer_unittest.cc
@@ -24,14 +24,13 @@ #include "cc/test/fake_painted_scrollbar_layer.h" #include "cc/test/fake_scrollbar.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/test/layer_tree_test.h" #include "cc/test/mock_occlusion_tracker.h" #include "cc/test/stub_layer_tree_host_single_thread_client.h" #include "cc/test/test_task_graph_runner.h" #include "cc/trees/effect_node.h" #include "cc/trees/layer_tree_host.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/occlusion_tracker.h" #include "cc/trees/scroll_node.h" @@ -805,7 +804,7 @@ TEST_F(ScrollbarLayerTest, SubPixelCanScrollOrientation) { gfx::Size viewport_size(980, 980); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; LayerImpl* scroll_layer = impl.AddLayer<LayerImpl>(); scroll_layer->SetElementId(LayerIdToElementIdForTesting(scroll_layer->id())); @@ -847,7 +846,7 @@ } TEST_F(ScrollbarLayerTest, LayerChangesAffectingScrollbarGeometries) { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; LayerImpl* clip_layer = impl.AddLayer<LayerImpl>(); LayerImpl* scroll_layer = impl.AddLayer<LayerImpl>(); @@ -1080,9 +1079,7 @@ layer_tree_host_->SetRootLayer(layer_tree_root); - LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( - layer_tree_root.get(), layer_tree_host_->device_viewport_rect()); - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + UpdateDrawProperties(layer_tree_host_.get()); scrollbar_layer->SetIsDrawable(true); scrollbar_layer->SetBounds(gfx::Size(100, 100)); @@ -1141,10 +1138,7 @@ layer_tree_root->AddChild(scrollbar_layer); layer_tree_host_->SetRootLayer(layer_tree_root); - - LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( - layer_tree_root.get(), layer_tree_host_->device_viewport_rect()); - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + UpdateDrawProperties(layer_tree_host_.get()); scrollbar_layer->SetIsDrawable(true); scrollbar_layer->SetBounds(gfx::Size(100, 15)); @@ -1315,10 +1309,7 @@ EXPECT_EQ(scrollbar_layer->layer_tree_host(), layer_tree_host_.get()); - LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( - layer_tree_root.get(), layer_tree_host_->device_viewport_rect()); - inputs.device_scale_factor = test_scale; - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + UpdateDrawProperties(layer_tree_host_.get()); layer_tree_host_->SetViewportRectAndScale( layer_tree_host_->device_viewport_rect(), test_scale, @@ -1385,13 +1376,10 @@ scrollbar_layer->fake_scrollbar()->set_location(scrollbar_rect.origin()); scrollbar_layer->fake_scrollbar()->set_track_rect(scrollbar_rect); - LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( - layer_tree_root.get(), layer_tree_host_->device_viewport_rect()); - inputs.device_scale_factor = test_scale; - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); layer_tree_host_->SetViewportRectAndScale( layer_tree_host_->device_viewport_rect(), test_scale, layer_tree_host_->local_surface_id_allocation_from_parent()); + UpdateDrawProperties(layer_tree_host_.get()); scrollbar_layer->Update();
diff --git a/cc/layers/solid_color_layer_impl_unittest.cc b/cc/layers/solid_color_layer_impl_unittest.cc index b07ab75a..1e5bb9a 100644 --- a/cc/layers/solid_color_layer_impl_unittest.cc +++ b/cc/layers/solid_color_layer_impl_unittest.cc
@@ -11,8 +11,7 @@ #include "cc/animation/animation_host.h" #include "cc/layers/append_quads_data.h" #include "cc/layers/solid_color_layer.h" -#include "cc/test/layer_test_common.h" -#include "cc/trees/layer_tree_host_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "components/viz/common/quads/solid_color_draw_quad.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -20,7 +19,7 @@ namespace cc { namespace { -class SolidColorLayerImplTest : public LayerTestCommon::LayerImplTest, +class SolidColorLayerImplTest : public LayerTreeImplTestBase, public ::testing::Test {}; TEST_F(SolidColorLayerImplTest, VerifyTilingCompleteAndNoOverlap) { @@ -28,6 +27,7 @@ gfx::Size layer_size = gfx::Size(800, 600); gfx::Rect visible_layer_rect = gfx::Rect(layer_size); + root_layer()->SetBounds(layer_size); auto* layer = AddLayer<SolidColorLayerImpl>(); layer->SetBounds(layer_size); @@ -35,12 +35,11 @@ layer->SetBackgroundColor(SK_ColorRED); CopyProperties(root_layer(), layer); CreateEffectNode(layer).render_surface_reason = RenderSurfaceReason::kTest; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); AppendQuadsData data; layer->AppendQuads(render_pass.get(), &data); - LayerTestCommon::VerifyQuadsExactlyCoverRect(render_pass->quad_list, - visible_layer_rect); + VerifyQuadsExactlyCoverRect(render_pass->quad_list, visible_layer_rect); } TEST_F(SolidColorLayerImplTest, VerifyCorrectBackgroundColorInQuad) { @@ -48,6 +47,7 @@ std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); gfx::Size layer_size = gfx::Size(100, 100); gfx::Rect visible_layer_rect = gfx::Rect(layer_size); + root_layer()->SetBounds(layer_size); auto* layer = AddLayer<SolidColorLayerImpl>(); layer->SetBounds(layer_size); @@ -55,7 +55,7 @@ layer->SetBackgroundColor(test_color); CopyProperties(root_layer(), layer); CreateEffectNode(layer).render_surface_reason = RenderSurfaceReason::kTest; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(visible_layer_rect, layer->draw_properties().visible_layer_rect); @@ -81,7 +81,7 @@ CopyProperties(root_layer(), layer); auto& effect_node = CreateEffectNode(layer); effect_node.opacity = opacity; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(opacity, layer->draw_properties().opacity); @@ -108,7 +108,7 @@ auto& effect_node = CreateEffectNode(layer); effect_node.render_surface_reason = RenderSurfaceReason::kTest; effect_node.opacity = opacity; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); // Opacity is applied on render surface, so the layer doesn't have opacity. EXPECT_EQ(1.f, layer->draw_properties().opacity); @@ -135,7 +135,7 @@ layer->SetBackgroundColor(test_color); CopyProperties(root_layer(), layer); CreateEffectNode(layer).render_surface_reason = RenderSurfaceReason::kTest; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); AppendQuadsData data; layer->AppendQuads(render_pass.get(), &data); @@ -155,7 +155,7 @@ auto& effect_node = CreateEffectNode(layer); effect_node.render_surface_reason = RenderSurfaceReason::kTest; effect_node.opacity = 0.f; - UpdateDrawProperties(host_impl()->active_tree()); + UpdateActiveTreeDrawProperties(); AppendQuadsData data; layer->AppendQuads(render_pass.get(), &data); @@ -179,9 +179,7 @@ &client, &task_graph_runner, animation_host.get()); host->SetRootLayer(root); - LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( - root.get(), gfx::Rect(500, 500)); - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + UpdateDrawProperties(host.get()); EXPECT_FALSE(layer->contents_opaque()); layer->SetBackgroundColor(SkColorSetARGB(255, 10, 20, 30)); @@ -255,8 +253,7 @@ gfx::Rect occluded; AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(quad_list(), - gfx::Rect(layer_size)); + VerifyQuadsExactlyCoverRect(quad_list(), gfx::Rect(layer_size)); EXPECT_EQ(1u, quad_list().size()); } @@ -265,7 +262,7 @@ gfx::Rect occluded(solid_color_layer_impl->visible_layer_rect()); AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(quad_list(), gfx::Rect()); EXPECT_EQ(quad_list().size(), 0u); } @@ -275,8 +272,7 @@ AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded(quad_list(), occluded, - &partially_occluded_count); + VerifyQuadsAreOccluded(quad_list(), occluded, &partially_occluded_count); // 4 quads are completely occluded, 8 are partially occluded. EXPECT_EQ(1u, quad_list().size()); EXPECT_EQ(1u, partially_occluded_count);
diff --git a/cc/layers/solid_color_scrollbar_layer_impl_unittest.cc b/cc/layers/solid_color_scrollbar_layer_impl_unittest.cc index 0b464a9..5f1b460 100644 --- a/cc/layers/solid_color_scrollbar_layer_impl_unittest.cc +++ b/cc/layers/solid_color_scrollbar_layer_impl_unittest.cc
@@ -6,7 +6,7 @@ #include <stddef.h> -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "testing/gtest/include/gtest/gtest.h" namespace cc { @@ -16,7 +16,7 @@ gfx::Size layer_size(10, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; ScrollbarOrientation orientation = VERTICAL; int thumb_thickness = layer_size.width(); @@ -48,7 +48,7 @@ gfx::Rect occluded; impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), thumb_rect); + VerifyQuadsExactlyCoverRect(impl.quad_list(), thumb_rect); EXPECT_EQ(1u, impl.quad_list().size()); } @@ -57,7 +57,7 @@ gfx::Rect occluded(scrollbar_layer_impl->visible_layer_rect()); impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); } @@ -67,8 +67,8 @@ impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); // The layer outputs one quad, which is partially occluded. EXPECT_EQ(1u, impl.quad_list().size()); EXPECT_EQ(1u, partially_occluded_count);
diff --git a/cc/layers/surface_layer_impl_unittest.cc b/cc/layers/surface_layer_impl_unittest.cc index 896d20ad..b5e8b78 100644 --- a/cc/layers/surface_layer_impl_unittest.cc +++ b/cc/layers/surface_layer_impl_unittest.cc
@@ -7,8 +7,7 @@ #include <stddef.h> #include "cc/layers/append_quads_data.h" -#include "cc/test/layer_test_common.h" -#include "cc/trees/layer_tree_host_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -25,7 +24,7 @@ const viz::LocalSurfaceId kArbitraryLocalSurfaceId( 9, base::UnguessableToken::Create()); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SurfaceLayerImpl* surface_layer_impl = impl.AddLayer<SurfaceLayerImpl>(); surface_layer_impl->SetBounds(layer_size); @@ -42,8 +41,7 @@ gfx::Rect occluded; impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), - gfx::Rect(layer_size)); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect(layer_size)); EXPECT_EQ(1u, impl.quad_list().size()); EXPECT_TRUE(surface_layer_impl->WillDraw(DRAW_MODE_HARDWARE, nullptr)); } @@ -53,7 +51,7 @@ gfx::Rect occluded(surface_layer_impl->visible_layer_rect()); impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); EXPECT_FALSE(surface_layer_impl->WillDraw(DRAW_MODE_HARDWARE, nullptr)); } @@ -64,8 +62,8 @@ impl.AppendQuadsWithOcclusion(surface_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); // The layer outputs one quad, which is partially occluded. EXPECT_EQ(1u, impl.quad_list().size()); EXPECT_EQ(1u, partially_occluded_count); @@ -76,7 +74,7 @@ // This test verifies that activation_dependencies and the fallback_surface_id // are populated correctly if primary and fallback surfaces differ. TEST(SurfaceLayerImplTest, SurfaceLayerImplWithTwoDifferentSurfaces) { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SurfaceLayerImpl* surface_layer_impl = impl.AddLayer<SurfaceLayerImpl>(); // Populate the primary viz::SurfaceInfo. @@ -174,7 +172,7 @@ // and the other uses the default then AppendQuadsData is populated // correctly. TEST(SurfaceLayerImplTest, SurfaceLayerImplsWithDeadlines) { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SurfaceLayerImpl* surface_layer_impl = impl.AddLayer<SurfaceLayerImpl>(); CopyProperties(impl.root_layer(), surface_layer_impl); @@ -218,7 +216,7 @@ // SurfaceLayerImpl holds the same surface ID for both the primary // and fallback viz::SurfaceInfo. TEST(SurfaceLayerImplTest, SurfaceLayerImplWithMatchingPrimaryAndFallback) { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SurfaceLayerImpl* surface_layer_impl = impl.AddLayer<SurfaceLayerImpl>(); // Populate the primary viz::SurfaceId. @@ -259,7 +257,7 @@ TEST(SurfaceLayerImplTest, GetEnclosingRectInTargetSpace) { gfx::Size layer_size(902, 1000); gfx::Size viewport_size(902, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SurfaceLayerImpl* surface_layer_impl = impl.AddLayer<SurfaceLayerImpl>(); surface_layer_impl->SetBounds(layer_size); surface_layer_impl->SetDrawsContent(true);
diff --git a/cc/layers/texture_layer_impl_unittest.cc b/cc/layers/texture_layer_impl_unittest.cc index 09479159..c9bd8c0b 100644 --- a/cc/layers/texture_layer_impl_unittest.cc +++ b/cc/layers/texture_layer_impl_unittest.cc
@@ -8,7 +8,7 @@ #include "base/bind.h" #include "cc/test/fake_layer_tree_frame_sink.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/layer_tree_frame_sink.h" #include "components/viz/common/gpu/context_provider.h" #include "components/viz/common/quads/draw_quad.h" @@ -26,7 +26,7 @@ const gfx::Rect layer_rect(layer_bounds); const Region layer_region(layer_rect); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; TextureLayerImpl* layer = impl.AddLayer<TextureLayerImpl>(); layer->SetBounds(layer_bounds); @@ -52,7 +52,7 @@ gfx::Size layer_size(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; auto resource = viz::TransferableResource::MakeGL( gpu::Mailbox::Generate(), GL_LINEAR, GL_TEXTURE_2D, @@ -75,8 +75,7 @@ gfx::Rect occluded; impl.AppendQuadsWithOcclusion(texture_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), - gfx::Rect(layer_size)); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect(layer_size)); EXPECT_EQ(1u, impl.quad_list().size()); } @@ -85,7 +84,7 @@ gfx::Rect occluded(texture_layer_impl->visible_layer_rect()); impl.AppendQuadsWithOcclusion(texture_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); } @@ -95,8 +94,8 @@ impl.AppendQuadsWithOcclusion(texture_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); // The layer outputs one quad, which is partially occluded. EXPECT_EQ(1u, impl.quad_list().size()); EXPECT_EQ(1u, partially_occluded_count); @@ -105,7 +104,7 @@ TEST(TextureLayerImplTest, ResourceNotFreedOnGpuRasterToggle) { bool released = false; - LayerTestCommon::LayerImplTest impl( + LayerTreeImplTestBase impl( FakeLayerTreeFrameSink::Create3dForGpuRasterization()); impl.host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
diff --git a/cc/layers/tile_size_calculator.cc b/cc/layers/tile_size_calculator.cc index d6569b5f..eacb897 100644 --- a/cc/layers/tile_size_calculator.cc +++ b/cc/layers/tile_size_calculator.cc
@@ -124,9 +124,9 @@ gfx::Size TileSizeCalculator::CalculateTileSize() { gfx::Size content_bounds = layer_impl()->content_bounds(); - if (layer_impl()->is_mask()) { - // Masks are not tiled, so if we can't cover the whole mask with one tile, - // we shouldn't have such a tiling at all. + if (layer_impl()->is_backdrop_filter_mask()) { + // Backdrop filter masks are not tiled, so if we can't cover the whole mask + // with one tile, we shouldn't have such a tiling at all. DCHECK_LE(content_bounds.width(), layer_impl()->layer_tree_impl()->max_texture_size()); DCHECK_LE(content_bounds.height(),
diff --git a/cc/layers/ui_resource_layer_impl_unittest.cc b/cc/layers/ui_resource_layer_impl_unittest.cc index de5bb8a..e7337ea8 100644 --- a/cc/layers/ui_resource_layer_impl_unittest.cc +++ b/cc/layers/ui_resource_layer_impl_unittest.cc
@@ -12,7 +12,7 @@ #include "cc/test/fake_layer_tree_frame_sink.h" #include "cc/test/fake_layer_tree_host_impl.h" #include "cc/test/fake_ui_resource_layer_tree_host_impl.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/test/test_task_graph_runner.h" #include "cc/trees/single_thread_proxy.h" #include "components/viz/common/quads/draw_quad.h" @@ -55,8 +55,7 @@ std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); AppendQuadsData data; - host_impl->active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + host_impl->active_tree()->root_layer()->AppendQuads(render_pass.get(), &data); // Verify quad rects const viz::QuadList& quads = render_pass->quad_list; @@ -104,8 +103,7 @@ std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create(); AppendQuadsData data; - host_impl->active_tree()->root_layer_for_testing()->AppendQuads( - render_pass.get(), &data); + host_impl->active_tree()->root_layer()->AppendQuads(render_pass.get(), &data); // Verify needs_blending is set appropriately. const viz::QuadList& quads = render_pass->quad_list; @@ -179,7 +177,7 @@ gfx::Size layer_size(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; SkBitmap sk_bitmap; sk_bitmap.allocN32Pixels(10, 10); @@ -202,8 +200,7 @@ gfx::Rect occluded; impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), - gfx::Rect(layer_size)); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect(layer_size)); EXPECT_EQ(1u, impl.quad_list().size()); } @@ -212,7 +209,7 @@ gfx::Rect occluded(ui_resource_layer_impl->visible_layer_rect()); impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); } @@ -222,8 +219,8 @@ impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); // The layer outputs one quad, which is partially occluded. EXPECT_EQ(1u, impl.quad_list().size()); EXPECT_EQ(1u, partially_occluded_count);
diff --git a/cc/layers/ui_resource_layer_unittest.cc b/cc/layers/ui_resource_layer_unittest.cc index 17397773..2b627f5 100644 --- a/cc/layers/ui_resource_layer_unittest.cc +++ b/cc/layers/ui_resource_layer_unittest.cc
@@ -9,7 +9,7 @@ #include "cc/resources/scoped_ui_resource.h" #include "cc/test/fake_layer_tree_host.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/test/stub_layer_tree_host_single_thread_client.h" #include "cc/trees/single_thread_proxy.h" #include "testing/gmock/include/gmock/gmock.h" @@ -47,7 +47,7 @@ FakeLayerTreeHost* layer_tree_host() { return layer_impl_test_.host(); } private: - LayerTestCommon::LayerImplTest layer_impl_test_; + LayerTreeImplTestBase layer_impl_test_; }; TEST_F(UIResourceLayerTest, SetBitmap) { @@ -131,7 +131,7 @@ // Add to a layer tree; now the UIResourceManager holds onto a ref // indefinitely. { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; impl.host()->SetRootLayer(test_layer); test_layer->SetBitmap(bitmap); @@ -182,7 +182,7 @@ // still be the same. We can make sure it's using the same shared bitmap by // verifying that whatever ID it has, it changes away from and back to when we // change the shared bitmap to something else then back to the original. - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; impl.host()->SetRootLayer(layer1); layer1->Update(); EXPECT_TRUE(layer1->DrawsContent());
diff --git a/cc/layers/video_frame_provider_client_impl_unittest.cc b/cc/layers/video_frame_provider_client_impl_unittest.cc index 3db751c..fa4c2e9 100644 --- a/cc/layers/video_frame_provider_client_impl_unittest.cc +++ b/cc/layers/video_frame_provider_client_impl_unittest.cc
@@ -5,7 +5,7 @@ #include "cc/layers/video_frame_provider_client_impl.h" #include "cc/layers/video_layer_impl.h" #include "cc/test/fake_video_frame_provider.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "components/viz/common/frame_sinks/begin_frame_args.h" #include "media/base/video_frame.h" #include "testing/gmock/include/gmock/gmock.h" @@ -92,7 +92,7 @@ protected: FakeVideoFrameProvider provider_; - LayerTestCommon::LayerImplTest impl_; + LayerTreeImplTestBase impl_; scoped_refptr<VideoFrameProviderClientImpl> client_impl_; VideoLayerImpl* video_layer_impl_; scoped_refptr<media::VideoFrame> test_frame_;
diff --git a/cc/layers/video_layer_impl_unittest.cc b/cc/layers/video_layer_impl_unittest.cc index 24e7534..8a22f39 100644 --- a/cc/layers/video_layer_impl_unittest.cc +++ b/cc/layers/video_layer_impl_unittest.cc
@@ -9,7 +9,7 @@ #include "base/bind_helpers.h" #include "cc/layers/video_frame_provider_client_impl.h" #include "cc/test/fake_video_frame_provider.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/single_thread_proxy.h" #include "components/viz/common/gpu/context_provider.h" #include "components/viz/common/quads/draw_quad.h" @@ -38,7 +38,7 @@ gfx::Size layer_size(1000, 1000); gfx::Size viewport_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( @@ -61,10 +61,9 @@ gfx::Rect occluded; impl.AppendQuadsWithOcclusion(video_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), - gfx::Rect(layer_size)); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect(layer_size)); - LayerTestCommon::VerifyQuadsExactlyCoverRect( + VerifyQuadsExactlyCoverRect( impl.quad_list(), impl.quad_list().cbegin()->shared_quad_state->visible_quad_layer_rect); EXPECT_EQ(1u, impl.quad_list().size()); @@ -75,7 +74,7 @@ gfx::Rect occluded(video_layer_impl->visible_layer_rect()); impl.AppendQuadsWithOcclusion(video_layer_impl, occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); + VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); EXPECT_EQ(impl.quad_list().size(), 0u); } @@ -85,9 +84,9 @@ impl.AppendQuadsWithOcclusion(video_layer_impl, occluded); size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - impl.quad_list(), occluded, &partially_occluded_count); - LayerTestCommon::VerifyQuadsExactlyCoverRect( + VerifyQuadsAreOccluded(impl.quad_list(), occluded, + &partially_occluded_count); + VerifyQuadsExactlyCoverRect( impl.quad_list(), impl.quad_list().cbegin()->shared_quad_state->visible_quad_layer_rect); // The layer outputs one quad, which is partially occluded. @@ -100,7 +99,7 @@ gfx::Size layer_size(1000, 1000); gfx::Rect visible(layer_size); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; impl.host_impl()->active_tree()->SetDeviceViewportRect(visible); DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); auto* active_tree = impl.host_impl()->active_tree(); @@ -136,7 +135,7 @@ } TEST(VideoLayerImplTest, DidBecomeActiveShouldSetActiveVideoLayer) { - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); FakeVideoFrameProvider provider; @@ -157,7 +156,7 @@ gfx::Size layer_size(100, 50); gfx::Size viewport_size(1000, 500); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( @@ -194,7 +193,7 @@ gfx::Size layer_size(100, 50); gfx::Size viewport_size(1000, 500); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( @@ -231,7 +230,7 @@ gfx::Size layer_size(100, 50); gfx::Size viewport_size(1000, 500); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( @@ -268,7 +267,7 @@ gfx::Size layer_size(100, 50); gfx::Size viewport_size(1000, 500); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( @@ -304,7 +303,7 @@ TEST(VideoLayerImplTest, SoftwareVideoFrameGeneratesYUVQuad) { gfx::Size layer_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); gpu::MailboxHolder mailbox_holder; @@ -344,7 +343,7 @@ TEST(VideoLayerImplTest, HibitSoftwareVideoFrameGeneratesYUVQuad) { gfx::Size layer_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); gpu::MailboxHolder mailbox_holder; @@ -382,7 +381,7 @@ TEST(VideoLayerImplTest, NativeYUVFrameGeneratesYUVQuad) { gfx::Size layer_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); gpu::MailboxHolder mailbox_holders[media::VideoFrame::kMaxPlanes]; @@ -427,7 +426,7 @@ TEST(VideoLayerImplTest, NativeARGBFrameGeneratesTextureQuad) { gfx::Size layer_size(1000, 1000); - LayerTestCommon::LayerImplTest impl; + LayerTreeImplTestBase impl; DebugSetImplThreadAndMainThreadBlocked(impl.task_runner_provider()); gpu::MailboxHolder mailbox_holders[media::VideoFrame::kMaxPlanes];
diff --git a/cc/metrics/frame_sequence_tracker.cc b/cc/metrics/frame_sequence_tracker.cc index 31dce1de..23004540 100644 --- a/cc/metrics/frame_sequence_tracker.cc +++ b/cc/metrics/frame_sequence_tracker.cc
@@ -67,8 +67,10 @@ // FrameSequenceTrackerCollection FrameSequenceTrackerCollection::FrameSequenceTrackerCollection( + bool is_single_threaded, CompositorFrameReportingController* compositor_frame_reporting_controller) - : compositor_frame_reporting_controller_( + : is_single_threaded_(is_single_threaded), + compositor_frame_reporting_controller_( compositor_frame_reporting_controller) { StartSequence(FrameSequenceTrackerType::kUniversal); } @@ -80,6 +82,8 @@ void FrameSequenceTrackerCollection::StartSequence( FrameSequenceTrackerType type) { + if (is_single_threaded_) + return; if (frame_trackers_.contains(type)) return; auto tracker = base::WrapUnique(new FrameSequenceTracker(type));
diff --git a/cc/metrics/frame_sequence_tracker.h b/cc/metrics/frame_sequence_tracker.h index 685018e..2adac7e 100644 --- a/cc/metrics/frame_sequence_tracker.h +++ b/cc/metrics/frame_sequence_tracker.h
@@ -48,8 +48,9 @@ // submitted frames. class CC_EXPORT FrameSequenceTrackerCollection { public: - explicit FrameSequenceTrackerCollection( - CompositorFrameReportingController* = nullptr); + FrameSequenceTrackerCollection( + bool is_single_threaded, + CompositorFrameReportingController* frame_reporting_controller); ~FrameSequenceTrackerCollection(); FrameSequenceTrackerCollection(const FrameSequenceTrackerCollection&) = @@ -95,6 +96,7 @@ private: friend class FrameSequenceTrackerTest; + const bool is_single_threaded_; // The callsite can use the type to manipulate the tracker. base::flat_map<FrameSequenceTrackerType, std::unique_ptr<FrameSequenceTracker>>
diff --git a/cc/metrics/frame_sequence_tracker_unittest.cc b/cc/metrics/frame_sequence_tracker_unittest.cc index a597e48..1c492db 100644 --- a/cc/metrics/frame_sequence_tracker_unittest.cc +++ b/cc/metrics/frame_sequence_tracker_unittest.cc
@@ -22,7 +22,8 @@ FrameSequenceTrackerTest() : compositor_frame_reporting_controller_( std::make_unique<CompositorFrameReportingController>()), - collection_(compositor_frame_reporting_controller_.get()) { + collection_(/* is_single_threaded=*/false, + compositor_frame_reporting_controller_.get()) { collection_.StartSequence(FrameSequenceTrackerType::kTouchScroll); tracker_ = collection_.GetTrackerForTesting( FrameSequenceTrackerType::kTouchScroll);
diff --git a/cc/test/fake_layer_tree_host.cc b/cc/test/fake_layer_tree_host.cc index aaa23ea..5dc61b0c 100644 --- a/cc/test/fake_layer_tree_host.cc +++ b/cc/test/fake_layer_tree_host.cc
@@ -93,7 +93,7 @@ ids.outer_viewport_scroll = outer_viewport_scroll_layer()->id(); active_tree()->SetViewportLayersFromIds(ids); - return active_tree()->root_layer_for_testing(); + return active_tree()->root_layer(); } LayerImpl* FakeLayerTreeHost::CommitAndCreatePendingTree() { @@ -105,7 +105,7 @@ pending_tree()->property_trees()->scroll_tree.PushScrollUpdatesFromMainThread( property_trees(), pending_tree()); - return pending_tree()->root_layer_for_testing(); + return pending_tree()->root_layer(); } } // namespace cc
diff --git a/cc/test/fake_picture_layer_impl.cc b/cc/test/fake_picture_layer_impl.cc index 2787eaa..b8e16269 100644 --- a/cc/test/fake_picture_layer_impl.cc +++ b/cc/test/fake_picture_layer_impl.cc
@@ -9,6 +9,7 @@ #include <vector> #include "base/memory/ptr_util.h" +#include "cc/test/fake_raster_source.h" #include "cc/tiles/tile.h" #include "cc/trees/layer_tree_impl.h" @@ -21,7 +22,10 @@ : PictureLayerImpl(tree_impl, id) { if (raster_source) { SetBounds(raster_source->GetSize()); - SetRasterSourceOnPending(raster_source, Region()); + SetRasterSource(raster_source, Region()); + } else { + // Just to avoid crash on null RasterSource when updating tilings. + SetRasterSource(FakeRasterSource::CreateEmpty(gfx::Size()), Region()); } } @@ -78,23 +82,9 @@ return result; } -void FakePictureLayerImpl::SetRasterSourceOnPending( +void FakePictureLayerImpl::SetRasterSource( scoped_refptr<RasterSource> raster_source, const Region& invalidation) { - DCHECK(layer_tree_impl()->IsPendingTree()); - Region invalidation_temp = invalidation; - const PictureLayerTilingSet* pending_set = nullptr; - const PaintWorkletRecordMap* pending_paint_worklet_records = nullptr; - set_gpu_raster_max_texture_size( - layer_tree_impl()->GetDeviceViewport().size()); - UpdateRasterSource(raster_source, &invalidation_temp, pending_set, - pending_paint_worklet_records); -} - -void FakePictureLayerImpl::SetRasterSourceOnActive( - scoped_refptr<RasterSource> raster_source, - const Region& invalidation) { - DCHECK(layer_tree_impl()->IsActiveTree()); Region invalidation_temp = invalidation; const PictureLayerTilingSet* pending_set = nullptr; const PaintWorkletRecordMap* pending_paint_worklet_records = nullptr;
diff --git a/cc/test/fake_picture_layer_impl.h b/cc/test/fake_picture_layer_impl.h index 7387f48..0077483a 100644 --- a/cc/test/fake_picture_layer_impl.h +++ b/cc/test/fake_picture_layer_impl.h
@@ -77,10 +77,8 @@ PictureLayerTilingSet* tilings() { return tilings_.get(); } RasterSource* raster_source() { return raster_source_.get(); } - void SetRasterSourceOnPending(scoped_refptr<RasterSource> raster_source, - const Region& invalidation); - void SetRasterSourceOnActive(scoped_refptr<RasterSource> raster_source, - const Region& invalidation); + void SetRasterSource(scoped_refptr<RasterSource> raster_source, + const Region& invalidation); size_t append_quads_count() { return append_quads_count_; } const Region& invalidation() const { return invalidation_; }
diff --git a/cc/test/layer_test_common.cc b/cc/test/layer_test_common.cc index 6ccb689..7bfe6f25 100644 --- a/cc/test/layer_test_common.cc +++ b/cc/test/layer_test_common.cc
@@ -4,33 +4,22 @@ #include "cc/test/layer_test_common.h" -#include <stddef.h> - -#include "cc/animation/animation.h" -#include "cc/animation/animation_host.h" -#include "cc/animation/animation_id_provider.h" #include "cc/base/math_util.h" #include "cc/base/region.h" -#include "cc/layers/append_quads_data.h" -#include "cc/test/animation_test_common.h" -#include "cc/test/fake_layer_tree_frame_sink.h" -#include "cc/test/mock_occlusion_tracker.h" #include "cc/test/property_tree_test_utils.h" -#include "cc/trees/layer_tree_host_common.h" -#include "components/viz/common/frame_sinks/copy_output_request.h" -#include "components/viz/common/frame_sinks/copy_output_result.h" +#include "cc/trees/draw_property_utils.h" +#include "cc/trees/layer_tree_impl.h" +#include "cc/trees/property_tree_builder.h" #include "components/viz/common/quads/draw_quad.h" #include "components/viz/common/quads/render_pass.h" #include "testing/gtest/include/gtest/gtest.h" -#include "ui/gfx/geometry/point_conversions.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect_conversions.h" -#include "ui/gfx/geometry/size_conversions.h" namespace cc { // Align with expected and actual output. -const char* LayerTestCommon::quad_string = " Quad: "; +static const char* kQuadString = " Quad: "; static bool CanRectFBeSafelyRoundedToRect(const gfx::RectF& r) { // Ensure that range of float values is not beyond integer range. @@ -43,8 +32,8 @@ return floored_rect == r; } -void LayerTestCommon::VerifyQuadsExactlyCoverRect(const viz::QuadList& quads, - const gfx::Rect& rect) { +void VerifyQuadsExactlyCoverRect(const viz::QuadList& quads, + const gfx::Rect& rect) { Region remaining = rect; for (auto iter = quads.cbegin(); iter != quads.cend(); ++iter) { @@ -61,10 +50,10 @@ gfx::Rect quad_rect = gfx::ToEnclosingRect(quad_rectf); EXPECT_TRUE(rect.Contains(quad_rect)) - << quad_string << iter.index() << " rect: " << rect.ToString() + << kQuadString << iter.index() << " rect: " << rect.ToString() << " quad: " << quad_rect.ToString(); EXPECT_TRUE(remaining.Contains(quad_rect)) - << quad_string << iter.index() << " remaining: " << remaining.ToString() + << kQuadString << iter.index() << " remaining: " << remaining.ToString() << " quad: " << quad_rect.ToString(); remaining.Subtract(quad_rect); } @@ -73,9 +62,9 @@ } // static -void LayerTestCommon::VerifyQuadsAreOccluded(const viz::QuadList& quads, - const gfx::Rect& occluded, - size_t* partially_occluded_count) { +void VerifyQuadsAreOccluded(const viz::QuadList& quads, + const gfx::Rect& occluded, + size_t* partially_occluded_count) { // No quad should exist if it's fully occluded. for (auto* quad : quads) { gfx::Rect target_visible_rect = MathUtil::MapEnclosingClippedRect( @@ -117,182 +106,68 @@ } } -LayerTestCommon::LayerImplTest::LayerImplTest() - : LayerImplTest(LayerListSettings()) {} +void PrepareForUpdateDrawProperties(LayerTreeImpl* layer_tree_impl) { + if (!layer_tree_impl->settings().use_layer_lists) + return; -LayerTestCommon::LayerImplTest::LayerImplTest( - std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink) - : LayerImplTest(LayerListSettings(), std::move(layer_tree_frame_sink)) {} + // TODO(wangxianzhu): We should DCHECK(!needs_rebuild) after we remove all + // unnecessary setting of the flag in layer list mode. + auto* property_trees = layer_tree_impl->property_trees(); + property_trees->needs_rebuild = false; -LayerTestCommon::LayerImplTest::LayerImplTest(const LayerTreeSettings& settings) - : LayerImplTest(settings, FakeLayerTreeFrameSink::Create3d()) {} - -LayerTestCommon::LayerImplTest::LayerImplTest( - const LayerTreeSettings& settings, - std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink) - : layer_tree_frame_sink_(std::move(layer_tree_frame_sink)), - animation_host_(AnimationHost::CreateForTesting(ThreadInstance::MAIN)), - host_(FakeLayerTreeHost::Create(&client_, - &task_graph_runner_, - animation_host_.get(), - settings)), - render_pass_(viz::RenderPass::Create()), - layer_impl_id_(2) { - std::unique_ptr<LayerImpl> root = - LayerImpl::Create(host_impl()->active_tree(), 1); - root->SetBounds(gfx::Size(1, 1)); - if (settings.use_layer_lists) - SetupRootProperties(root.get()); - host_impl()->active_tree()->SetRootLayerForTesting(std::move(root)); - host_impl()->SetVisible(true); - EXPECT_TRUE(host_impl()->InitializeFrameSink(layer_tree_frame_sink_.get())); - - const int timeline_id = AnimationIdProvider::NextTimelineId(); - timeline_ = AnimationTimeline::Create(timeline_id); - animation_host_->AddAnimationTimeline(timeline_); - // Create impl-side instance. - animation_host_->PushPropertiesTo(host_impl()->animation_host()); - timeline_impl_ = host_impl()->animation_host()->GetTimelineById(timeline_id); + // The following are needed for tests that modify impl-side property trees. + // In production code impl-side property trees are pushed from the main + // thread and the following are done in other ways. + std::vector<std::unique_ptr<RenderSurfaceImpl>> old_render_surfaces; + property_trees->effect_tree.TakeRenderSurfaces(&old_render_surfaces); + property_trees->effect_tree.CreateOrReuseRenderSurfaces(&old_render_surfaces, + layer_tree_impl); + layer_tree_impl->MoveChangeTrackingToLayers(); + property_trees->ResetCachedData(); } -LayerTestCommon::LayerImplTest::~LayerImplTest() { - animation_host_->RemoveAnimationTimeline(timeline_); - timeline_ = nullptr; - host_impl()->ReleaseLayerTreeFrameSink(); +void UpdateDrawProperties(LayerTreeImpl* layer_tree_impl, + LayerImplList* output_update_layer_list) { + PrepareForUpdateDrawProperties(layer_tree_impl); + layer_tree_impl->UpdateDrawProperties( + /*update_image_animation_controller*/ true, output_update_layer_list); } -LayerImpl* LayerTestCommon::LayerImplTest::EnsureRootLayerInPendingTree() { - LayerTreeImpl* pending_tree = host_impl()->pending_tree(); - auto* root = pending_tree->root_layer_for_testing(); - if (root) - return root; - pending_tree->SetRootLayerForTesting(LayerImpl::Create(pending_tree, 1)); - root = pending_tree->root_layer_for_testing(); - root->SetBounds(gfx::Size(1, 1)); - if (host()->IsUsingLayerLists()) - SetupRootProperties(root); - return root; -} - -void LayerTestCommon::LayerImplTest::CalcDrawProps( - const gfx::Size& viewport_size) { - RenderSurfaceList render_surface_list; - LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( - root_layer(), gfx::Rect(viewport_size), &render_surface_list); - inputs.update_layer_list = &update_layer_impl_list_; - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); -} - -void LayerTestCommon::LayerImplTest::AppendQuadsWithOcclusion( - LayerImpl* layer_impl, - const gfx::Rect& occluded) { - AppendQuadsData data; - - render_pass_->quad_list.clear(); - render_pass_->shared_quad_state_list.clear(); - - Occlusion occlusion(layer_impl->DrawTransform(), - SimpleEnclosedRegion(occluded), SimpleEnclosedRegion()); - layer_impl->draw_properties().occlusion_in_content_space = occlusion; - - if (layer_impl->WillDraw(DRAW_MODE_HARDWARE, resource_provider())) { - layer_impl->AppendQuads(render_pass_.get(), &data); - layer_impl->DidDraw(resource_provider()); - } -} - -void LayerTestCommon::LayerImplTest::AppendQuadsForPassWithOcclusion( - LayerImpl* layer_impl, - viz::RenderPass* given_render_pass, - const gfx::Rect& occluded) { - AppendQuadsData data; - - given_render_pass->quad_list.clear(); - given_render_pass->shared_quad_state_list.clear(); - - Occlusion occlusion(layer_impl->DrawTransform(), - SimpleEnclosedRegion(occluded), SimpleEnclosedRegion()); - layer_impl->draw_properties().occlusion_in_content_space = occlusion; - - layer_impl->WillDraw(DRAW_MODE_HARDWARE, resource_provider()); - layer_impl->AppendQuads(given_render_pass, &data); - layer_impl->DidDraw(resource_provider()); -} - -void LayerTestCommon::LayerImplTest::AppendSurfaceQuadsWithOcclusion( - RenderSurfaceImpl* surface_impl, - const gfx::Rect& occluded) { - AppendQuadsData data; - - render_pass_->quad_list.clear(); - render_pass_->shared_quad_state_list.clear(); - - surface_impl->set_occlusion_in_content_space( - Occlusion(gfx::Transform(), SimpleEnclosedRegion(occluded), - SimpleEnclosedRegion())); - surface_impl->AppendQuads(DRAW_MODE_HARDWARE, render_pass_.get(), &data); -} - -void LayerTestCommon::LayerImplTest::ExecuteCalculateDrawProperties( - LayerImpl* root_layer, - float device_scale_factor, - const gfx::Transform& device_transform, - float page_scale_factor, - LayerImpl* page_scale_layer) { - if (device_scale_factor != - root_layer->layer_tree_impl()->device_scale_factor() && - !root_layer->layer_tree_impl()->settings().use_layer_lists) - root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true; - - root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor); - - EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f)); - - gfx::Rect device_viewport_rect = - gfx::Rect(root_layer->bounds().width() * device_scale_factor, - root_layer->bounds().height() * device_scale_factor); - - render_surface_list_impl_.reset(new RenderSurfaceList); - - // We are probably not testing what is intended if the root_layer bounds are - // empty. - DCHECK(!root_layer->bounds().IsEmpty()); - LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( - root_layer, device_viewport_rect, render_surface_list_impl_.get()); - inputs.device_scale_factor = device_scale_factor; - inputs.page_scale_factor = page_scale_factor; - inputs.page_scale_layer = page_scale_layer; - inputs.device_transform = device_transform; - inputs.update_layer_list = &update_layer_impl_list_; - - if (page_scale_layer) { - PropertyTrees* property_trees = - root_layer->layer_tree_impl()->property_trees(); - inputs.page_scale_transform_node = property_trees->transform_tree.Node( - page_scale_layer->transform_tree_index()); +void UpdateDrawProperties(LayerTreeHost* layer_tree_host, + LayerList* output_update_layer_list) { + LayerList update_layer_list; + if (layer_tree_host->IsUsingLayerLists()) { + // TODO(wangxianzhu): We should DCHECK(!needs_rebuild) after we remove all + // unnecessary setting of the flag in layer list mode. + layer_tree_host->property_trees()->needs_rebuild = false; + } else { + PropertyTreeBuilder::BuildPropertyTrees(layer_tree_host); } - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + draw_property_utils::UpdatePropertyTrees(layer_tree_host); + draw_property_utils::FindLayersThatNeedUpdates(layer_tree_host, + &update_layer_list); + + if (output_update_layer_list) + *output_update_layer_list = std::move(update_layer_list); } -void LayerTestCommon::LayerImplTest:: - ExecuteCalculateDrawPropertiesWithoutAdjustingRasterScales( - LayerImpl* root_layer) { - gfx::Rect device_viewport_rect = - gfx::Rect(root_layer->bounds().width(), root_layer->bounds().height()); - render_surface_list_impl_.reset(new RenderSurfaceList); - - DCHECK(!root_layer->bounds().IsEmpty()); - LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( - root_layer, device_viewport_rect, render_surface_list_impl_.get()); - - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); +void SetDeviceScaleAndUpdateViewportRect(LayerTreeImpl* layer_tree_impl, + float device_scale_factor) { + layer_tree_impl->SetDeviceScaleFactor(device_scale_factor); + gfx::Size root_bounds = layer_tree_impl->root_layer()->bounds(); + layer_tree_impl->SetDeviceViewportRect( + gfx::Rect(root_bounds.width() * device_scale_factor, + root_bounds.height() * device_scale_factor)); } -void UpdateDrawProperties(LayerTreeImpl* layer_tree_impl) { - LayerTreeHostCommon::PrepareForUpdateDrawPropertiesForTesting( - layer_tree_impl); - layer_tree_impl->UpdateDrawProperties(); +void SetDeviceScaleAndUpdateViewportRect(LayerTreeHost* layer_tree_host, + float device_scale_factor) { + gfx::Size root_bounds = layer_tree_host->root_layer()->bounds(); + gfx::Rect viewport_rect(root_bounds.width() * device_scale_factor, + root_bounds.height() * device_scale_factor); + layer_tree_host->SetViewportRectAndScale(viewport_rect, device_scale_factor, + viz::LocalSurfaceIdAllocation()); } } // namespace cc
diff --git a/cc/test/layer_test_common.h b/cc/test/layer_test_common.h index a538cc01..1943e6a 100644 --- a/cc/test/layer_test_common.h +++ b/cc/test/layer_test_common.h
@@ -5,20 +5,7 @@ #ifndef CC_TEST_LAYER_TEST_COMMON_H_ #define CC_TEST_LAYER_TEST_COMMON_H_ -#include <stddef.h> - -#include <memory> -#include <utility> - -#include "cc/animation/animation_timeline.h" -#include "cc/test/fake_layer_tree_host.h" -#include "cc/test/fake_layer_tree_host_client.h" -#include "cc/test/property_tree_test_utils.h" -#include "cc/test/test_task_graph_runner.h" -#include "cc/trees/effect_node.h" -#include "cc/trees/layer_tree_host_impl.h" -#include "cc/trees/layer_tree_settings.h" -#include "components/viz/common/quads/render_pass.h" +#include "cc/layers/layer_collections.h" #define EXPECT_SET_NEEDS_COMMIT(expect, code_to_test) \ do { \ @@ -43,133 +30,41 @@ } namespace cc { -class LayerImpl; -class LayerTreeFrameSink; -class RenderSurfaceImpl; -// Updates draw properties after prepared for testing. -void UpdateDrawProperties(LayerTreeImpl*); +class LayerTreeHost; +class LayerTreeImpl; -class LayerTestCommon { - public: - static const char* quad_string; +// In tests that build layer tree and property trees directly at impl-side, +// before calling LayerTreeImpl::UpdateDrawProperties() or any function calling +// it, we should call this function to make the layer tree and property trees +// ready for draw property update. +void PrepareForUpdateDrawProperties(LayerTreeImpl*); - static void VerifyQuadsExactlyCoverRect(const viz::QuadList& quads, - const gfx::Rect& rect); +// Calls LayerTreeImpl::UpdateDrawProperties() after calling the above function. +// If |output_update_layer_list| is not null, it accepts layers output from +// draw_property_utils::FindLayersThatNeedUpdates(). +void UpdateDrawProperties(LayerTreeImpl*, + LayerImplList* output_update_layer_list = nullptr); - static void VerifyQuadsAreOccluded(const viz::QuadList& quads, - const gfx::Rect& occluded, - size_t* partially_occluded_count); +// Main-thread counterpart of the above function. If |output_update_layer_list| +// is not null, it accepts layers output from +// draw_property_utils::FindLayersThatNeedUpdates(). +void UpdateDrawProperties(LayerTreeHost*, + LayerList* output_update_layer_list = nullptr); - class LayerImplTest { - public: - LayerImplTest(); - explicit LayerImplTest( - std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink); - explicit LayerImplTest(const LayerTreeSettings& settings); - LayerImplTest(const LayerTreeSettings& settings, - std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink); - ~LayerImplTest(); +// Set device scale factor and update device viewport rect to be the root layer +// size scaled by the device scale factor. +void SetDeviceScaleAndUpdateViewportRect(LayerTreeImpl*, + float device_scale_factor); +void SetDeviceScaleAndUpdateViewportRect(LayerTreeHost*, + float device_scale_factor); - template <typename T, typename... Args> - T* AddLayer(Args&&... args) { - return AddLayerInternal<T>(host_impl()->active_tree(), - std::forward<Args>(args)...); - } +void VerifyQuadsExactlyCoverRect(const viz::QuadList& quads, + const gfx::Rect& rect); - LayerImpl* EnsureRootLayerInPendingTree(); - - template <typename T, typename... Args> - T* AddLayerInPendingTree(Args&&... args) { - return AddLayerInternal<T>(host_impl()->pending_tree(), - std::forward<Args>(args)...); - } - - void CalcDrawProps(const gfx::Size& viewport_size); - void AppendQuadsWithOcclusion(LayerImpl* layer_impl, - const gfx::Rect& occluded); - void AppendQuadsForPassWithOcclusion(LayerImpl* layer_impl, - viz::RenderPass* given_render_pass, - const gfx::Rect& occluded); - void AppendSurfaceQuadsWithOcclusion(RenderSurfaceImpl* surface_impl, - const gfx::Rect& occluded); - - LayerTreeFrameSink* layer_tree_frame_sink() const { - return host_impl()->layer_tree_frame_sink(); - } - viz::ClientResourceProvider* resource_provider() const { - return host_impl()->resource_provider(); - } - LayerImpl* root_layer() const { - return host_impl()->active_tree()->root_layer_for_testing(); - } - FakeLayerTreeHost* host() { return host_.get(); } - FakeLayerTreeHostImpl* host_impl() const { return host_->host_impl(); } - TaskRunnerProvider* task_runner_provider() const { - return host_impl()->task_runner_provider(); - } - const viz::QuadList& quad_list() const { return render_pass_->quad_list; } - scoped_refptr<AnimationTimeline> timeline() { return timeline_; } - scoped_refptr<AnimationTimeline> timeline_impl() { return timeline_impl_; } - - void SetElementIdsForTesting() { - host_impl()->active_tree()->SetElementIdsForTesting(); - } - - // These two functions calculates draw properties by directly calling - // LayerTreeHostCommon, not through LayerTreeImpl API, thus they don't - // update LayerTreeImpl's needs_update_draw_properties flag. - // TODO(wangxianzhu): Remove this version after cleaning up - // LayerTreeHostCommon API. - void ExecuteCalculateDrawProperties( - LayerImpl* root_layer, - float device_scale_factor = 1.0f, - const gfx::Transform& device_transform = gfx::Transform(), - float page_scale_factor = 1.0f, - LayerImpl* page_scale_layer = nullptr); - - void ExecuteCalculateDrawPropertiesWithoutAdjustingRasterScales( - LayerImpl* root_layer); - - const RenderSurfaceList* render_surface_list_impl() const { - return render_surface_list_impl_.get(); - } - - bool UpdateLayerImplListContains(int id) const { - for (const auto* layer : update_layer_impl_list_) { - if (layer->id() == id) - return true; - } - return false; - } - - const LayerImplList& update_layer_impl_list() const { - return update_layer_impl_list_; - } - - private: - template <typename T, typename... Args> - T* AddLayerInternal(LayerTreeImpl* tree, Args&&... args) { - std::unique_ptr<T> layer = - T::Create(tree, layer_impl_id_++, std::forward<Args>(args)...); - T* ptr = layer.get(); - tree->AddLayer(std::move(layer)); - return ptr; - } - - FakeLayerTreeHostClient client_; - TestTaskGraphRunner task_graph_runner_; - std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink_; - std::unique_ptr<AnimationHost> animation_host_; - std::unique_ptr<FakeLayerTreeHost> host_; - std::unique_ptr<viz::RenderPass> render_pass_; - scoped_refptr<AnimationTimeline> timeline_; - scoped_refptr<AnimationTimeline> timeline_impl_; - int layer_impl_id_; - std::unique_ptr<RenderSurfaceList> render_surface_list_impl_; - LayerImplList update_layer_impl_list_; - }; -}; +void VerifyQuadsAreOccluded(const viz::QuadList& quads, + const gfx::Rect& occluded, + size_t* partially_occluded_count); } // namespace cc
diff --git a/cc/test/layer_tree_impl_test_base.cc b/cc/test/layer_tree_impl_test_base.cc new file mode 100644 index 0000000..6e8be89 --- /dev/null +++ b/cc/test/layer_tree_impl_test_base.cc
@@ -0,0 +1,152 @@ +// Copyright 2012 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 "cc/test/layer_tree_impl_test_base.h" + +#include <stddef.h> + +#include "cc/animation/animation.h" +#include "cc/animation/animation_host.h" +#include "cc/animation/animation_id_provider.h" +#include "cc/layers/append_quads_data.h" +#include "cc/test/animation_test_common.h" +#include "cc/test/fake_layer_tree_frame_sink.h" +#include "cc/test/mock_occlusion_tracker.h" +#include "cc/test/property_tree_test_utils.h" +#include "cc/trees/draw_property_utils.h" +#include "ui/gfx/geometry/point_conversions.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/rect_conversions.h" +#include "ui/gfx/geometry/size_conversions.h" + +namespace cc { + +LayerTreeImplTestBase::LayerTreeImplTestBase() + : LayerTreeImplTestBase(LayerListSettings()) {} + +LayerTreeImplTestBase::LayerTreeImplTestBase( + std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink) + : LayerTreeImplTestBase(LayerListSettings(), + std::move(layer_tree_frame_sink)) {} + +LayerTreeImplTestBase::LayerTreeImplTestBase(const LayerTreeSettings& settings) + : LayerTreeImplTestBase(settings, FakeLayerTreeFrameSink::Create3d()) {} + +LayerTreeImplTestBase::LayerTreeImplTestBase( + const LayerTreeSettings& settings, + std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink) + : layer_tree_frame_sink_(std::move(layer_tree_frame_sink)), + animation_host_(AnimationHost::CreateForTesting(ThreadInstance::MAIN)), + host_(FakeLayerTreeHost::Create(&client_, + &task_graph_runner_, + animation_host_.get(), + settings)), + render_pass_(viz::RenderPass::Create()), + layer_impl_id_(2) { + std::unique_ptr<LayerImpl> root = + LayerImpl::Create(host_impl()->active_tree(), 1); + root->SetBounds(gfx::Size(1, 1)); + if (settings.use_layer_lists) + SetupRootProperties(root.get()); + host_impl()->active_tree()->SetRootLayerForTesting(std::move(root)); + host_impl()->SetVisible(true); + EXPECT_TRUE(host_impl()->InitializeFrameSink(layer_tree_frame_sink_.get())); + + const int timeline_id = AnimationIdProvider::NextTimelineId(); + timeline_ = AnimationTimeline::Create(timeline_id); + animation_host_->AddAnimationTimeline(timeline_); + // Create impl-side instance. + animation_host_->PushPropertiesTo(host_impl()->animation_host()); + timeline_impl_ = host_impl()->animation_host()->GetTimelineById(timeline_id); +} + +LayerTreeImplTestBase::~LayerTreeImplTestBase() { + animation_host_->RemoveAnimationTimeline(timeline_); + timeline_ = nullptr; + host_impl()->ReleaseLayerTreeFrameSink(); +} + +LayerImpl* LayerTreeImplTestBase::EnsureRootLayerInPendingTree() { + LayerTreeImpl* pending_tree = host_impl()->pending_tree(); + auto* root = pending_tree->root_layer(); + if (root) + return root; + pending_tree->SetRootLayerForTesting(LayerImpl::Create(pending_tree, 1)); + root = pending_tree->root_layer(); + root->SetBounds(gfx::Size(1, 1)); + if (host()->IsUsingLayerLists()) + SetupRootProperties(root); + return root; +} + +void LayerTreeImplTestBase::CalcDrawProps(const gfx::Size& viewport_size) { + host_impl()->active_tree()->SetDeviceViewportRect(gfx::Rect(viewport_size)); + UpdateDrawProperties(host_impl()->active_tree()); +} + +void LayerTreeImplTestBase::AppendQuadsWithOcclusion( + LayerImpl* layer_impl, + const gfx::Rect& occluded) { + AppendQuadsData data; + + render_pass_->quad_list.clear(); + render_pass_->shared_quad_state_list.clear(); + + Occlusion occlusion(layer_impl->DrawTransform(), + SimpleEnclosedRegion(occluded), SimpleEnclosedRegion()); + layer_impl->draw_properties().occlusion_in_content_space = occlusion; + + if (layer_impl->WillDraw(DRAW_MODE_HARDWARE, resource_provider())) { + layer_impl->AppendQuads(render_pass_.get(), &data); + layer_impl->DidDraw(resource_provider()); + } +} + +void LayerTreeImplTestBase::AppendQuadsForPassWithOcclusion( + LayerImpl* layer_impl, + viz::RenderPass* given_render_pass, + const gfx::Rect& occluded) { + AppendQuadsData data; + + given_render_pass->quad_list.clear(); + given_render_pass->shared_quad_state_list.clear(); + + Occlusion occlusion(layer_impl->DrawTransform(), + SimpleEnclosedRegion(occluded), SimpleEnclosedRegion()); + layer_impl->draw_properties().occlusion_in_content_space = occlusion; + + layer_impl->WillDraw(DRAW_MODE_HARDWARE, resource_provider()); + layer_impl->AppendQuads(given_render_pass, &data); + layer_impl->DidDraw(resource_provider()); +} + +void LayerTreeImplTestBase::AppendSurfaceQuadsWithOcclusion( + RenderSurfaceImpl* surface_impl, + const gfx::Rect& occluded) { + AppendQuadsData data; + + render_pass_->quad_list.clear(); + render_pass_->shared_quad_state_list.clear(); + + surface_impl->set_occlusion_in_content_space( + Occlusion(gfx::Transform(), SimpleEnclosedRegion(occluded), + SimpleEnclosedRegion())); + surface_impl->AppendQuads(DRAW_MODE_HARDWARE, render_pass_.get(), &data); +} + +void LayerTreeImplTestBase::UpdateActiveTreeDrawProperties( + float device_scale_factor) { + SetDeviceScaleAndUpdateViewportRect(host_impl()->active_tree(), + device_scale_factor); + UpdateDrawProperties(host_impl()->active_tree(), &update_layer_impl_list_); +} + +void LayerTreeImplTestBase::UpdatePendingTreeDrawProperties( + float device_scale_factor) { + SetDeviceScaleAndUpdateViewportRect(host_impl()->pending_tree(), + device_scale_factor); + UpdateDrawProperties(host_impl()->pending_tree(), &update_layer_impl_list_); +} + +} // namespace cc
diff --git a/cc/test/layer_tree_impl_test_base.h b/cc/test/layer_tree_impl_test_base.h new file mode 100644 index 0000000..107db70 --- /dev/null +++ b/cc/test/layer_tree_impl_test_base.h
@@ -0,0 +1,128 @@ +// Copyright 2012 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 CC_TEST_LAYER_TREE_IMPL_TEST_BASE_H_ +#define CC_TEST_LAYER_TREE_IMPL_TEST_BASE_H_ + +#include <stddef.h> + +#include <memory> +#include <utility> + +#include "cc/animation/animation_timeline.h" +#include "cc/test/fake_layer_tree_host.h" +#include "cc/test/fake_layer_tree_host_client.h" +#include "cc/test/layer_test_common.h" +#include "cc/test/property_tree_test_utils.h" +#include "cc/test/test_task_graph_runner.h" +#include "cc/trees/effect_node.h" +#include "cc/trees/layer_tree_host_impl.h" +#include "cc/trees/layer_tree_settings.h" +#include "components/viz/common/quads/render_pass.h" + +namespace cc { + +class LayerImpl; +class LayerTreeFrameSink; +class RenderSurfaceImpl; + +class LayerTreeImplTestBase { + public: + LayerTreeImplTestBase(); + explicit LayerTreeImplTestBase( + std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink); + explicit LayerTreeImplTestBase(const LayerTreeSettings& settings); + LayerTreeImplTestBase( + const LayerTreeSettings& settings, + std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink); + ~LayerTreeImplTestBase(); + + template <typename T, typename... Args> + T* AddLayer(Args&&... args) { + return AddLayerInternal<T>(host_impl()->active_tree(), + std::forward<Args>(args)...); + } + + LayerImpl* EnsureRootLayerInPendingTree(); + + template <typename T, typename... Args> + T* AddLayerInPendingTree(Args&&... args) { + return AddLayerInternal<T>(host_impl()->pending_tree(), + std::forward<Args>(args)...); + } + + void CalcDrawProps(const gfx::Size& viewport_size); + void AppendQuadsWithOcclusion(LayerImpl* layer_impl, + const gfx::Rect& occluded); + void AppendQuadsForPassWithOcclusion(LayerImpl* layer_impl, + viz::RenderPass* given_render_pass, + const gfx::Rect& occluded); + void AppendSurfaceQuadsWithOcclusion(RenderSurfaceImpl* surface_impl, + const gfx::Rect& occluded); + + LayerTreeFrameSink* layer_tree_frame_sink() const { + return host_impl()->layer_tree_frame_sink(); + } + viz::ClientResourceProvider* resource_provider() const { + return host_impl()->resource_provider(); + } + LayerImpl* root_layer() const { + return host_impl()->active_tree()->root_layer(); + } + FakeLayerTreeHost* host() { return host_.get(); } + FakeLayerTreeHostImpl* host_impl() const { return host_->host_impl(); } + TaskRunnerProvider* task_runner_provider() const { + return host_impl()->task_runner_provider(); + } + const viz::QuadList& quad_list() const { return render_pass_->quad_list; } + scoped_refptr<AnimationTimeline> timeline() { return timeline_; } + scoped_refptr<AnimationTimeline> timeline_impl() { return timeline_impl_; } + + void SetElementIdsForTesting() { + host_impl()->active_tree()->SetElementIdsForTesting(); + } + + // These functions sets device scale factor and update device viewport rect + // before calling the global UpdateDrawProperties() with + // update_layer_impl_list_. + void UpdateActiveTreeDrawProperties(float device_scale_factor = 1.0f); + void UpdatePendingTreeDrawProperties(float device_scale_factor = 1.0f); + + bool UpdateLayerImplListContains(int id) const { + for (const auto* layer : update_layer_impl_list_) { + if (layer->id() == id) + return true; + } + return false; + } + + const LayerImplList& update_layer_impl_list() const { + return update_layer_impl_list_; + } + + private: + template <typename T, typename... Args> + T* AddLayerInternal(LayerTreeImpl* tree, Args&&... args) { + std::unique_ptr<T> layer = + T::Create(tree, layer_impl_id_++, std::forward<Args>(args)...); + T* ptr = layer.get(); + tree->AddLayer(std::move(layer)); + return ptr; + } + + FakeLayerTreeHostClient client_; + TestTaskGraphRunner task_graph_runner_; + std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink_; + std::unique_ptr<AnimationHost> animation_host_; + std::unique_ptr<FakeLayerTreeHost> host_; + std::unique_ptr<viz::RenderPass> render_pass_; + scoped_refptr<AnimationTimeline> timeline_; + scoped_refptr<AnimationTimeline> timeline_impl_; + int layer_impl_id_; + LayerImplList update_layer_impl_list_; +}; + +} // namespace cc + +#endif // CC_TEST_LAYER_TREE_IMPL_TEST_BASE_H_
diff --git a/cc/test/pixel_test_output_surface.cc b/cc/test/pixel_test_output_surface.cc index 19c62b1..38353f25 100644 --- a/cc/test/pixel_test_output_surface.cc +++ b/cc/test/pixel_test_output_surface.cc
@@ -77,7 +77,9 @@ } void PixelTestOutputSurface::SwapBuffersCallback() { - client_->DidReceiveSwapBuffersAck(gfx::SwapTimings()); + base::TimeTicks now = base::TimeTicks::Now(); + gfx::SwapTimings timings = {now, now}; + client_->DidReceiveSwapBuffersAck(timings); client_->DidReceivePresentationFeedback( gfx::PresentationFeedback(base::TimeTicks::Now(), base::TimeDelta(), 0)); }
diff --git a/cc/test/property_tree_test_utils.cc b/cc/test/property_tree_test_utils.cc index 293cfb75..6809e2e0 100644 --- a/cc/test/property_tree_test_utils.cc +++ b/cc/test/property_tree_test_utils.cc
@@ -4,12 +4,11 @@ #include "cc/test/property_tree_test_utils.h" -#include "cc/layers/layer.h" -#include "cc/layers/layer_impl.h" +#include "cc/layers/picture_layer.h" +#include "cc/layers/picture_layer_impl.h" #include "cc/trees/clip_node.h" #include "cc/trees/effect_node.h" #include "cc/trees/layer_tree_host.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/property_tree.h" #include "cc/trees/scroll_node.h" @@ -149,7 +148,6 @@ template <typename LayerType, typename MaskLayerType> void SetupMaskPropertiesInternal(LayerType* masked_layer, MaskLayerType* mask_layer) { - mask_layer->SetIsMask(true); if (!GetEffectNode(masked_layer)->backdrop_filters.IsEmpty()) mask_layer->SetIsBackdropFilterMask(true); mask_layer->SetBounds(masked_layer->bounds()); @@ -359,7 +357,7 @@ LayerTreeImpl* layer_tree_impl = root->layer_tree_impl(); DCHECK(!layer_tree_impl->InnerViewportScrollLayer()); DCHECK(layer_tree_impl->settings().use_layer_lists); - DCHECK_EQ(root, layer_tree_impl->root_layer_for_testing()); + DCHECK_EQ(root, layer_tree_impl->root_layer()); std::unique_ptr<LayerImpl> inner_viewport_container_layer = LayerImpl::Create(layer_tree_impl, 10000); @@ -408,4 +406,19 @@ layer_tree_impl->OuterViewportScrollLayer()); } +PropertyTrees* GetPropertyTrees(const Layer* layer) { + return layer->layer_tree_host()->property_trees(); +} + +PropertyTrees* GetPropertyTrees(const LayerImpl* layer) { + return layer->layer_tree_impl()->property_trees(); +} + +RenderSurfaceImpl* GetRenderSurface(const LayerImpl* layer) { + auto& effect_tree = GetPropertyTrees(layer)->effect_tree; + if (auto* surface = effect_tree.GetRenderSurface(layer->effect_tree_index())) + return surface; + return effect_tree.GetRenderSurface(GetEffectNode(layer)->target_id); +} + } // namespace cc
diff --git a/cc/test/property_tree_test_utils.h b/cc/test/property_tree_test_utils.h index 1f803c4..f818efe1 100644 --- a/cc/test/property_tree_test_utils.h +++ b/cc/test/property_tree_test_utils.h
@@ -7,7 +7,6 @@ #include "cc/trees/clip_node.h" #include "cc/trees/effect_node.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/property_tree.h" #include "cc/trees/scroll_node.h" #include "cc/trees/transform_node.h" @@ -55,6 +54,9 @@ void SetupMaskProperties(LayerImpl* masked_layer, PictureLayerImpl* mask_layer); void SetupMaskProperties(Layer* masked_layer, PictureLayer* mask_layer); +PropertyTrees* GetPropertyTrees(const Layer* layer); +PropertyTrees* GetPropertyTrees(const LayerImpl* layer); + template <typename LayerType> TransformNode* GetTransformNode(const LayerType* layer) { return GetPropertyTrees(layer)->transform_tree.Node( @@ -169,12 +171,7 @@ const gfx::Size& content_size); // Returns the RenderSurfaceImpl into which the given layer draws. -inline RenderSurfaceImpl* GetRenderSurface(const LayerImpl* layer) { - auto& effect_tree = GetPropertyTrees(layer)->effect_tree; - if (auto* surface = effect_tree.GetRenderSurface(layer->effect_tree_index())) - return surface; - return effect_tree.GetRenderSurface(GetEffectNode(layer)->target_id); -} +RenderSurfaceImpl* GetRenderSurface(const LayerImpl* layer); // TODO(wangxianzhu): Add functions to create property nodes not based on // layers when needed.
diff --git a/cc/test/test_layer_tree_host_base.cc b/cc/test/test_layer_tree_host_base.cc index 7051a8c..70fbaf3 100644 --- a/cc/test/test_layer_tree_host_base.cc +++ b/cc/test/test_layer_tree_host_base.cc
@@ -107,14 +107,14 @@ host_impl()->active_tree()->device_scale_factor()); // Steal from the recycled tree if possible. - LayerImpl* pending_root = pending_tree->root_layer_for_testing(); + LayerImpl* pending_root = pending_tree->root_layer(); DCHECK(!pending_layer_); DCHECK(!pending_root || pending_root->id() == root_id_); if (!pending_root) { pending_tree->SetRootLayerForTesting( LayerImpl::Create(pending_tree, root_id_)); - pending_root = pending_tree->root_layer_for_testing(); + pending_root = pending_tree->root_layer(); auto* page_scale_layer = AddLayer<LayerImpl>(pending_tree); pending_layer_ = AddLayer<FakePictureLayerImpl>(pending_tree); @@ -143,7 +143,7 @@ // The bounds() just mirror the raster source size. if (raster_source) { pending_layer_->SetBounds(raster_source->GetSize()); - pending_layer_->SetRasterSourceOnPending(raster_source, invalidation); + pending_layer_->SetRasterSource(raster_source, invalidation); } host_impl()->pending_tree()->set_needs_update_draw_properties();
diff --git a/cc/test/test_layer_tree_host_base.h b/cc/test/test_layer_tree_host_base.h index 3e76715..8388ed5d 100644 --- a/cc/test/test_layer_tree_host_base.h +++ b/cc/test/test_layer_tree_host_base.h
@@ -14,6 +14,7 @@ #include "cc/test/test_task_graph_runner.h" #include "cc/tiles/tile_priority.h" #include "cc/trees/layer_tree_frame_sink.h" +#include "cc/trees/layer_tree_impl.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/geometry/size.h"
diff --git a/cc/trees/damage_tracker.cc b/cc/trees/damage_tracker.cc index 5f8642e7..e56e331 100644 --- a/cc/trees/damage_tracker.cc +++ b/cc/trees/damage_tracker.cc
@@ -15,7 +15,6 @@ #include "cc/layers/render_surface_impl.h" #include "cc/paint/filter_operations.h" #include "cc/trees/effect_node.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "ui/gfx/geometry/rect_conversions.h" @@ -28,9 +27,7 @@ DamageTracker::DamageTracker() = default; DamageTracker::~DamageTracker() = default; -void DamageTracker::UpdateDamageTracking( - LayerTreeImpl* layer_tree_impl, - const RenderSurfaceList& render_surface_list) { +void DamageTracker::UpdateDamageTracking(LayerTreeImpl* layer_tree_impl) { // // This function computes the "damage rect" of each target surface, and // updates the state that is used to correctly track damage across frames. The @@ -104,7 +101,7 @@ // erased from map. // - for (RenderSurfaceImpl* render_surface : render_surface_list) { + for (auto* render_surface : layer_tree_impl->GetRenderSurfaceList()) { render_surface->damage_tracker()->PrepareForUpdate(); }
diff --git a/cc/trees/damage_tracker.h b/cc/trees/damage_tracker.h index 7edeac4..2515a56 100644 --- a/cc/trees/damage_tracker.h +++ b/cc/trees/damage_tracker.h
@@ -34,9 +34,7 @@ DamageTracker& operator=(const DamageTracker&) = delete; - static void UpdateDamageTracking( - LayerTreeImpl* layer_tree_impl, - const RenderSurfaceList& render_surface_list); + static void UpdateDamageTracking(LayerTreeImpl* layer_tree_impl); void DidDrawDamagedArea() { current_damage_ = DamageAccumulator();
diff --git a/cc/trees/damage_tracker_unittest.cc b/cc/trees/damage_tracker_unittest.cc index b65674e..d2636625 100644 --- a/cc/trees/damage_tracker_unittest.cc +++ b/cc/trees/damage_tracker_unittest.cc
@@ -13,8 +13,7 @@ #include "cc/test/fake_picture_layer_impl.h" #include "cc/test/fake_raster_source.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" -#include "cc/trees/layer_tree_host_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/single_thread_proxy.h" #include "cc/trees/transform_node.h" @@ -67,8 +66,7 @@ } } -class DamageTrackerTest : public LayerTestCommon::LayerImplTest, - public testing::Test { +class DamageTrackerTest : public LayerTreeImplTestBase, public testing::Test { public: LayerImpl* CreateTestTreeWithOneSurface(int number_of_children) { ClearLayersAndProperties(); @@ -173,9 +171,7 @@ root->layer_tree_impl()->set_needs_update_draw_properties(); UpdateDrawProperties(root->layer_tree_impl()); - DamageTracker::UpdateDamageTracking( - root->layer_tree_impl(), - root->layer_tree_impl()->GetRenderSurfaceList()); + DamageTracker::UpdateDamageTracking(root->layer_tree_impl()); root->layer_tree_impl()->ResetAllChangeTracking(); } @@ -1903,12 +1899,11 @@ grand_child2_->SetBounds(gfx::Size(1, 1)); grand_child2_->SetDrawsContent(true); - ExecuteCalculateDrawProperties(root); + UpdateDrawProperties(host_impl()->active_tree()); // Avoid the descendant-only property change path that skips unioning damage // from descendant layers. GetRenderSurface(child1_)->NoteAncestorPropertyChanged(); - DamageTracker::UpdateDamageTracking(host_impl()->active_tree(), - *render_surface_list_impl()); + DamageTracker::UpdateDamageTracking(host_impl()->active_tree()); // The expected damage would be too large to store in a gfx::Rect, so we // should damage everything on child1_. @@ -1942,9 +1937,8 @@ grand_child2_->AddDamageRect(gfx::Rect(grand_child1_->bounds())); // Recompute all damage / properties. - ExecuteCalculateDrawProperties(root); - DamageTracker::UpdateDamageTracking(host_impl()->active_tree(), - *render_surface_list_impl()); + UpdateDrawProperties(host_impl()->active_tree()); + DamageTracker::UpdateDamageTracking(host_impl()->active_tree()); // Child1 should still not have a valid rect, since the union of the damage of // its children is not representable by a single rect. @@ -1992,12 +1986,11 @@ grand_child2_->SetBounds(gfx::Size(1, 1)); grand_child2_->SetDrawsContent(true); - ExecuteCalculateDrawProperties(root); + UpdateDrawProperties(host_impl()->active_tree()); // Avoid the descendant-only property change path that skips unioning damage // from descendant layers. GetRenderSurface(child1_)->NoteAncestorPropertyChanged(); - DamageTracker::UpdateDamageTracking(host_impl()->active_tree(), - *render_surface_list_impl()); + DamageTracker::UpdateDamageTracking(host_impl()->active_tree()); // The expected damage would be too large to store in a gfx::Rect, so we // should damage everything on child1_. @@ -2031,9 +2024,8 @@ grand_child2_->AddDamageRect(gfx::Rect(grand_child1_->bounds())); // Recompute all damage / properties. - ExecuteCalculateDrawProperties(root); - DamageTracker::UpdateDamageTracking(host_impl()->active_tree(), - *render_surface_list_impl()); + UpdateDrawProperties(host_impl()->active_tree()); + DamageTracker::UpdateDamageTracking(host_impl()->active_tree()); // Child1 should still not have a valid rect, since the union of the damage of // its children is not representable by a single rect.
diff --git a/cc/trees/debug_rect_history.cc b/cc/trees/debug_rect_history.cc index 77917aa..1e5bb11 100644 --- a/cc/trees/debug_rect_history.cc +++ b/cc/trees/debug_rect_history.cc
@@ -14,7 +14,6 @@ #include "cc/layers/render_surface_impl.h" #include "cc/trees/damage_tracker.h" #include "cc/trees/layer_tree_host.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "ui/gfx/geometry/rect_conversions.h"
diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/draw_properties_unittest.cc similarity index 70% rename from cc/trees/layer_tree_host_common_unittest.cc rename to cc/trees/draw_properties_unittest.cc index 98e11ff2..73487b8 100644 --- a/cc/trees/layer_tree_host_common_unittest.cc +++ b/cc/trees/draw_properties_unittest.cc
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "cc/trees/layer_tree_host_common.h" - #include <stddef.h> #include <algorithm> @@ -20,33 +18,22 @@ #include "cc/animation/single_keyframe_effect_animation.h" #include "cc/animation/transform_operations.h" #include "cc/base/math_util.h" -#include "cc/input/main_thread_scrolling_reason.h" #include "cc/layers/content_layer_client.h" #include "cc/layers/effect_tree_layer_list_iterator.h" #include "cc/layers/layer.h" #include "cc/layers/layer_client.h" #include "cc/layers/layer_impl.h" #include "cc/layers/render_surface_impl.h" -#include "cc/layers/texture_layer.h" -#include "cc/layers/texture_layer_client.h" #include "cc/test/animation_test_common.h" #include "cc/test/fake_content_layer_client.h" -#include "cc/test/fake_impl_task_runner_provider.h" -#include "cc/test/fake_layer_tree_frame_sink.h" -#include "cc/test/fake_layer_tree_host.h" -#include "cc/test/fake_layer_tree_host_impl.h" #include "cc/test/fake_picture_layer.h" #include "cc/test/fake_picture_layer_impl.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" -#include "cc/test/test_task_graph_runner.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/clip_node.h" #include "cc/trees/draw_property_utils.h" #include "cc/trees/effect_node.h" -#include "cc/trees/property_tree_builder.h" #include "cc/trees/scroll_node.h" -#include "cc/trees/single_thread_proxy.h" -#include "cc/trees/task_runner_provider.h" #include "cc/trees/transform_node.h" #include "components/viz/common/frame_sinks/copy_output_request.h" #include "components/viz/common/frame_sinks/copy_output_result.h" @@ -64,11 +51,11 @@ return GetEffectNode(layer)->subtree_has_copy_request; } -class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest { +class DrawPropertiesTestBase : public LayerTreeImplTestBase { public: - LayerTreeHostCommonTestBase() = default; - explicit LayerTreeHostCommonTestBase(const LayerTreeSettings& settings) - : LayerTestCommon::LayerImplTest(settings) {} + DrawPropertiesTestBase() = default; + explicit DrawPropertiesTestBase(const LayerTreeSettings& settings) + : LayerTreeImplTestBase(settings) {} static void SetScrollOffsetDelta(LayerImpl* layer_impl, const gfx::Vector2dF& delta) { @@ -96,40 +83,9 @@ .starting_animation_scale; } - // Inherits the impl version from LayerImplTest. - using LayerImplTest::ExecuteCalculateDrawProperties; - - // This is the main version. - void ExecuteCalculateDrawProperties(Layer* root_layer, - float device_scale_factor = 1.0f, - float page_scale_factor = 1.0f, - Layer* page_scale_layer = nullptr) { - if (!host()->IsUsingLayerLists() && - device_scale_factor != host()->device_scale_factor()) { - DCHECK_EQ(1.0f, page_scale_factor); - DCHECK(!page_scale_layer); - host()->property_trees()->needs_rebuild = true; - } - - EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f)); - gfx::Rect device_viewport_rect = - gfx::Rect(root_layer->bounds().width() * device_scale_factor, - root_layer->bounds().height() * device_scale_factor); - - root_layer->layer_tree_host()->SetViewportRectAndScale( - device_viewport_rect, device_scale_factor, - viz::LocalSurfaceIdAllocation()); - - // We are probably not testing what is intended if the root_layer bounds are - // empty. - DCHECK(!root_layer->bounds().IsEmpty()); - LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( - root_layer, device_viewport_rect); - inputs.device_scale_factor = device_scale_factor; - inputs.page_scale_factor = page_scale_factor; - inputs.page_scale_layer = page_scale_layer; - inputs.update_layer_list = &update_layer_list_; - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + void UpdateMainDrawProperties(float device_scale_factor = 1.0f) { + SetDeviceScaleAndUpdateViewportRect(host(), device_scale_factor); + UpdateDrawProperties(host(), &update_layer_list_); } LayerImpl* ImplOf(const scoped_refptr<Layer>& layer) { @@ -145,11 +101,8 @@ // Updates main thread draw properties, commits main thread tree to // impl-side pending tree, and updates pending tree draw properties. - void Commit(float device_scale_factor = 1.0f, - float page_scale_factor = 1.0f, - Layer* page_scale_layer = nullptr) { - ExecuteCalculateDrawProperties(host()->root_layer(), device_scale_factor, - page_scale_factor, page_scale_layer); + void Commit(float device_scale_factor = 1.0f) { + UpdateMainDrawProperties(device_scale_factor); if (!host_impl()->pending_tree()) host_impl()->CreatePendingTree(); host()->CommitAndCreatePendingTree(); @@ -157,22 +110,18 @@ // FakeLayerTreeHost instead of manually pushing the properties from the // layer tree host to the pending tree. host()->PushLayerTreePropertiesTo(host_impl()->pending_tree()); - ExecuteCalculateDrawProperties( - host_impl()->pending_tree()->root_layer_for_testing(), - device_scale_factor, gfx::Transform(), page_scale_factor, - PendingImplOf(page_scale_layer)); + + UpdateDrawProperties(host_impl()->pending_tree()); } // Calls Commit(), then activates the pending tree, and updates active tree // draw properties. - void CommitAndActivate(float device_scale_factor = 1.0f, - float page_scale_factor = 1.0f, - Layer* page_scale_layer = nullptr) { - Commit(device_scale_factor, page_scale_factor, page_scale_layer); + void CommitAndActivate(float device_scale_factor = 1.0f) { + Commit(device_scale_factor); host_impl()->ActivateSyncTree(); - ExecuteCalculateDrawProperties(root_layer(), device_scale_factor, - gfx::Transform(), page_scale_factor, - ImplOf(page_scale_layer)); + DCHECK_EQ(device_scale_factor, + host_impl()->active_tree()->device_scale_factor()); + UpdateActiveTreeDrawProperties(device_scale_factor); } bool UpdateLayerListContains(int id) const { @@ -185,23 +134,32 @@ const LayerList& update_layer_list() const { return update_layer_list_; } + const RenderSurfaceList& GetRenderSurfaceList() { + return host_impl()->active_tree()->GetRenderSurfaceList(); + } + + void SetDeviceTransform(const gfx::Transform& device_transform) { + host_impl()->OnDraw(device_transform, host_impl()->external_viewport(), + false, false); + } + private: LayerList update_layer_list_; }; -class LayerTreeHostCommonTest : public LayerTreeHostCommonTestBase, - public testing::Test {}; +class DrawPropertiesTest : public DrawPropertiesTestBase, + public testing::Test {}; -class LayerTreeHostCommonTestWithLayerTree : public LayerTreeHostCommonTestBase, - public testing::Test { +class DrawPropertiesTestWithLayerTree : public DrawPropertiesTestBase, + public testing::Test { public: - LayerTreeHostCommonTestWithLayerTree() - : LayerTreeHostCommonTestBase(LayerTreeSettings()) {} + DrawPropertiesTestWithLayerTree() + : DrawPropertiesTestBase(LayerTreeSettings()) {} }; -class LayerTreeHostCommonDrawRectsTest : public LayerTreeHostCommonTest { +class DrawPropertiesDrawRectsTest : public DrawPropertiesTest { public: - LayerTreeHostCommonDrawRectsTest() : LayerTreeHostCommonTest() {} + DrawPropertiesDrawRectsTest() : DrawPropertiesTest() {} void SetUp() override { LayerImpl* root = root_layer(); @@ -236,7 +194,7 @@ gfx::PointF(layer_rect.origin()).OffsetFromOrigin(); drawing_layer_transform_node.flattens_inherited_transform = false; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); return drawing_layer; } @@ -246,7 +204,7 @@ // and with identity transforms, then the draw transform, // screen space transform, and the hierarchy passed on to children // layers should also be identity transforms. -TEST_F(LayerTreeHostCommonTest, TransformsForNoOpLayer) { +TEST_F(DrawPropertiesTest, TransformsForNoOpLayer) { LayerImpl* parent = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); LayerImpl* grand_child = AddLayer<LayerImpl>(); @@ -256,7 +214,7 @@ CopyProperties(parent, child); CopyProperties(child, grand_child); - ExecuteCalculateDrawProperties(parent); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), child->DrawTransform()); EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), @@ -267,28 +225,7 @@ grand_child->ScreenSpaceTransform()); } -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, EffectTreeTransformIdTest) { - // Tests that effect tree node gets a valid transform id when a layer - // has opacity but doesn't create a render surface. - auto parent = Layer::Create(); - host()->SetRootLayer(parent); - auto child = Layer::Create(); - parent->AddChild(child); - child->SetIsDrawable(true); - - parent->SetBounds(gfx::Size(100, 100)); - child->SetPosition(gfx::PointF(10, 10)); - child->SetBounds(gfx::Size(100, 100)); - child->SetOpacity(0.f); - ExecuteCalculateDrawProperties(parent.get()); - EffectNode* node = GetEffectNode(child.get()); - const int transform_tree_size = - GetPropertyTrees(parent.get())->transform_tree.next_available_id(); - EXPECT_LT(node->transform_id, transform_tree_size); -} - -TEST_F(LayerTreeHostCommonTest, TransformsForSingleLayer) { +TEST_F(DrawPropertiesTest, TransformsForSingleLayer) { LayerImpl* root = root_layer(); LayerImpl* layer = AddLayer<LayerImpl>(); @@ -303,7 +240,7 @@ // Case 1: Setting the bounds of the layer should not affect either the draw // transform or the screenspace transform. layer->SetBounds(gfx::Size(10, 12)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( gfx::Transform(), draw_property_utils::DrawTransform(layer, transform_tree, effect_tree)); @@ -315,7 +252,7 @@ // no effect on the transforms. CreateTransformNode(layer).origin = gfx::Point3F(2.5f, 3.0f, 0.f); layer->SetBounds(gfx::Size(10, 12)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( gfx::Transform(), draw_property_utils::DrawTransform(layer, transform_tree, effect_tree)); @@ -328,7 +265,7 @@ gfx::Transform position_transform; position_transform.Translate(0.f, 1.2f); SetPostTranslation(layer, gfx::Vector2dF(0.f, 1.2f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( position_transform, draw_property_utils::DrawTransform(layer, transform_tree, effect_tree)); @@ -344,7 +281,7 @@ SetTransform(layer, layer_transform); SetTransformOrigin(layer, gfx::Point3F()); SetPostTranslation(layer, gfx::Vector2dF()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( layer_transform, draw_property_utils::DrawTransform(layer, transform_tree, effect_tree)); @@ -358,7 +295,7 @@ gfx::Transform expected_result = translation_to_anchor * layer_transform * Inverse(translation_to_anchor); SetTransformOrigin(layer, gfx::Point3F(5.f, 0.f, 0.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( expected_result, draw_property_utils::DrawTransform(layer, transform_tree, effect_tree)); @@ -372,7 +309,7 @@ expected_result = position_transform * translation_to_anchor * layer_transform * Inverse(translation_to_anchor); SetPostTranslation(layer, gfx::Vector2dF(0.f, 1.2f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( expected_result, draw_property_utils::DrawTransform(layer, transform_tree, effect_tree)); @@ -381,7 +318,7 @@ draw_property_utils::ScreenSpaceTransform(layer, transform_tree)); } -TEST_F(LayerTreeHostCommonTest, TransformsAboutScrollOffset) { +TEST_F(DrawPropertiesTest, TransformsAboutScrollOffset) { const gfx::ScrollOffset kScrollOffset(50, 100); const gfx::Vector2dF kScrollDelta(2.34f, 5.67f); const gfx::Vector2d kMaxScrollOffset(200, 200); @@ -420,9 +357,14 @@ kScrollOffset); SetScrollOffsetDelta(scroll_layer, kScrollDelta); - const gfx::Transform kDeviceTransform; - ExecuteCalculateDrawProperties(root, kDeviceScale, kDeviceTransform, - page_scale, page_scale_layer); + LayerTreeHost::ViewportPropertyIds viewport_property_ids; + viewport_property_ids.page_scale_transform = + page_scale_layer->transform_tree_index(); + host_impl()->active_tree()->set_viewport_property_ids(viewport_property_ids); + + host_impl()->active_tree()->SetPageScaleOnActiveTree(page_scale); + UpdateActiveTreeDrawProperties(kDeviceScale); + gfx::Transform expected_transform; gfx::PointF sub_layer_screen_position = kScrollLayerPosition - kScrollDelta; expected_transform.Translate( @@ -440,8 +382,7 @@ const float kTranslateY = 20.6f; arbitrary_translate.Translate(kTranslateX, kTranslateY); SetTransform(scroll_layer, arbitrary_translate); - ExecuteCalculateDrawProperties(root, kDeviceScale, kDeviceTransform, - page_scale, page_scale_layer); + UpdateActiveTreeDrawProperties(kDeviceScale); expected_transform.MakeIdentity(); expected_transform.Translate( std::round(kTranslateX * page_scale * kDeviceScale + @@ -456,13 +397,9 @@ // Test that page scale is updated even when we don't rebuild property trees. page_scale = 1.888f; - LayerTreeImpl::ViewportLayerIds viewport_ids; - viewport_ids.page_scale = page_scale_layer->id(); - root->layer_tree_impl()->SetViewportLayersFromIds(viewport_ids); - root->layer_tree_impl()->SetPageScaleOnActiveTree(page_scale); - EXPECT_FALSE(root->layer_tree_impl()->property_trees()->needs_rebuild); - ExecuteCalculateDrawProperties(root, kDeviceScale, kDeviceTransform, - page_scale, page_scale_layer); + host_impl()->active_tree()->SetPageScaleOnActiveTree(page_scale); + EXPECT_FALSE(host_impl()->active_tree()->property_trees()->needs_rebuild); + UpdateActiveTreeDrawProperties(kDeviceScale); expected_transform.MakeIdentity(); expected_transform.Translate( @@ -476,7 +413,7 @@ sublayer->DrawTransform()); } -TEST_F(LayerTreeHostCommonTest, TransformsForSimpleHierarchy) { +TEST_F(DrawPropertiesTest, TransformsForSimpleHierarchy) { LayerImpl* root = root_layer(); LayerImpl* parent = AddLayer<LayerImpl>(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -500,7 +437,7 @@ CopyProperties(parent, child); CopyProperties(child, grand_child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( gfx::Transform(), @@ -519,7 +456,7 @@ gfx::Transform parent_position_transform; parent_position_transform.Translate(0.f, 1.2f); SetPostTranslation(parent, gfx::Vector2dF(0.f, 1.2f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( parent_position_transform, draw_property_utils::DrawTransform(child, transform_tree, effect_tree)); @@ -543,7 +480,7 @@ Inverse(parent_translation_to_anchor); SetTransform(parent, parent_layer_transform); SetPostTranslation(parent, gfx::Vector2dF()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( parent_composite_transform, draw_property_utils::DrawTransform(child, transform_tree, effect_tree)); @@ -559,7 +496,7 @@ draw_property_utils::ScreenSpaceTransform(grand_child, transform_tree)); } -TEST_F(LayerTreeHostCommonTest, TransformsForSingleRenderSurface) { +TEST_F(DrawPropertiesTest, TransformsForSingleRenderSurface) { LayerImpl* root = root_layer(); LayerImpl* parent = AddLayer<LayerImpl>(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -596,7 +533,7 @@ CreateEffectNode(child).render_surface_reason = RenderSurfaceReason::kTest; CopyProperties(child, grand_child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // Render surface should have been created now. ASSERT_TRUE(GetRenderSurface(child)); @@ -622,7 +559,7 @@ child->render_target()->screen_space_transform()); } -TEST_F(LayerTreeHostCommonTest, TransformsForRenderSurfaceHierarchy) { +TEST_F(DrawPropertiesTest, TransformsForRenderSurfaceHierarchy) { // This test creates a more complex tree and verifies it all at once. This // covers the following cases: // - layers that are described w.r.t. a render surface: should have draw @@ -747,7 +684,7 @@ grand_child_of_rs2_transform_node.origin = gfx::Point3F(2.5f, 0.f, 0.f); grand_child_of_rs2_transform_node.local = layer_transform; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // Only layers that are associated with render surfaces should have an actual // RenderSurface() value. @@ -860,82 +797,7 @@ 5.0, grand_child_of_rs2->ScreenSpaceTransform().matrix().get(1, 3)); } -// Needs layer tree mode: testing PropertyTreeBuilder (forcing flattening on -// surface). -TEST_F(LayerTreeHostCommonTestWithLayerTree, TransformsForFlatteningLayer) { - // For layers that flatten their subtree, there should be an orthographic - // projection (for x and y values) in the middle of the transform sequence. - // Note that the way the code is currently implemented, it is not expected to - // use a canonical orthographic projection. - - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto child = Layer::Create(); - root->AddChild(child); - child->SetIsDrawable(true); - auto grand_child = Layer::Create(); - child->AddChild(grand_child); - grand_child->SetIsDrawable(true); - auto great_grand_child = Layer::Create(); - grand_child->AddChild(great_grand_child); - great_grand_child->SetIsDrawable(true); - - gfx::Transform rotation_about_y_axis; - rotation_about_y_axis.RotateAboutYAxis(30.0); - - root->SetBounds(gfx::Size(100, 100)); - child->SetTransform(rotation_about_y_axis); - child->SetBounds(gfx::Size(10, 10)); - child->SetForceRenderSurfaceForTesting(true); - grand_child->SetTransform(rotation_about_y_axis); - grand_child->SetBounds(gfx::Size(10, 10)); - great_grand_child->SetBounds(gfx::Size(10, 10)); - - // No layers in this test should preserve 3d. - ASSERT_TRUE(root->should_flatten_transform()); - ASSERT_TRUE(child->should_flatten_transform()); - ASSERT_TRUE(grand_child->should_flatten_transform()); - ASSERT_TRUE(great_grand_child->should_flatten_transform()); - - gfx::Transform expected_child_draw_transform = rotation_about_y_axis; - gfx::Transform expected_child_screen_space_transform = rotation_about_y_axis; - gfx::Transform expected_grand_child_draw_transform = - rotation_about_y_axis; // draws onto child's render surface - gfx::Transform flattened_rotation_about_y = rotation_about_y_axis; - flattened_rotation_about_y.FlattenTo2d(); - gfx::Transform expected_grand_child_screen_space_transform = - flattened_rotation_about_y * rotation_about_y_axis; - gfx::Transform expected_great_grand_child_draw_transform = - flattened_rotation_about_y; - gfx::Transform expected_great_grand_child_screen_space_transform = - flattened_rotation_about_y * flattened_rotation_about_y; - - CommitAndActivate(); - - // The child's draw transform should have been taken by its surface. - ASSERT_TRUE(GetRenderSurfaceImpl(child)); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected_child_draw_transform, - GetRenderSurfaceImpl(child)->draw_transform()); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected_child_screen_space_transform, - GetRenderSurfaceImpl(child)->screen_space_transform()); - EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), - ImplOf(child)->DrawTransform()); - EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_screen_space_transform, - ImplOf(child)->ScreenSpaceTransform()); - EXPECT_TRANSFORMATION_MATRIX_EQ(expected_grand_child_draw_transform, - ImplOf(grand_child)->DrawTransform()); - EXPECT_TRANSFORMATION_MATRIX_EQ(expected_grand_child_screen_space_transform, - ImplOf(grand_child)->ScreenSpaceTransform()); - EXPECT_TRANSFORMATION_MATRIX_EQ(expected_great_grand_child_draw_transform, - ImplOf(great_grand_child)->DrawTransform()); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected_great_grand_child_screen_space_transform, - ImplOf(great_grand_child)->ScreenSpaceTransform()); -} - -TEST_F(LayerTreeHostCommonTest, LayerFullyContainedWithinClipInTargetSpace) { +TEST_F(DrawPropertiesTest, LayerFullyContainedWithinClipInTargetSpace) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); LayerImpl* grand_child = AddLayer<LayerImpl>(); @@ -959,7 +821,7 @@ grand_child_transform_node.flattens_inherited_transform = false; grand_child_transform_node.local = grand_child_transform; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // Mapping grand_child's bounds to screen space produces an empty rect, but // only because it is turned sideways. The entire rect is contained inside @@ -971,7 +833,7 @@ grand_child->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, TransformsForDegenerateIntermediateLayer) { +TEST_F(DrawPropertiesTest, TransformsForDegenerateIntermediateLayer) { // A layer that is empty in one axis, but not the other, was accidentally // skipping a necessary translation. Without that translation, the coordinate // space of the layer's draw transform is incorrect. @@ -996,7 +858,7 @@ CreateEffectNode(child).render_surface_reason = RenderSurfaceReason::kTest; CopyProperties(child, grand_child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(child)); // This is the real test, the rest are sanity checks. @@ -1007,7 +869,7 @@ grand_child->DrawTransform()); } -TEST_F(LayerTreeHostCommonTest, RenderSurfaceWithSublayerScale) { +TEST_F(DrawPropertiesTest, RenderSurfaceWithSublayerScale) { LayerImpl* root = root_layer(); LayerImpl* render_surface = AddLayer<LayerImpl>(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -1033,7 +895,7 @@ // render_surface will have a sublayer scale because of device scale factor. float device_scale_factor = 2.0f; - ExecuteCalculateDrawProperties(root, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); // Between grand_child and render_surface, we translate by (10, 10) and scale // by a factor of 2. @@ -1042,7 +904,7 @@ expected_translation); } -TEST_F(LayerTreeHostCommonTest, TransformAboveRootLayer) { +TEST_F(DrawPropertiesTest, TransformAboveRootLayer) { // Transformations applied at the root of the tree should be forwarded // to child layers instead of applied to the root RenderSurface. LayerImpl* root = root_layer(); @@ -1061,7 +923,8 @@ gfx::Transform translate; translate.Translate(50, 50); { - ExecuteCalculateDrawProperties(root, device_scale_factor, translate); + SetDeviceTransform(translate); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_TRANSFORMATION_MATRIX_EQ( translate, root->draw_properties().target_space_transform); EXPECT_TRANSFORMATION_MATRIX_EQ( @@ -1075,7 +938,8 @@ gfx::Transform scale; scale.Scale(2, 2); { - ExecuteCalculateDrawProperties(root, device_scale_factor, scale); + SetDeviceTransform(scale); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_TRANSFORMATION_MATRIX_EQ( scale, root->draw_properties().target_space_transform); EXPECT_TRANSFORMATION_MATRIX_EQ( @@ -1089,7 +953,8 @@ gfx::Transform rotate; rotate.Rotate(2); { - ExecuteCalculateDrawProperties(root, device_scale_factor, rotate); + SetDeviceTransform(rotate); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_TRANSFORMATION_MATRIX_EQ( rotate, root->draw_properties().target_space_transform); EXPECT_TRANSFORMATION_MATRIX_EQ( @@ -1105,7 +970,8 @@ composite.ConcatTransform(scale); composite.ConcatTransform(rotate); { - ExecuteCalculateDrawProperties(root, device_scale_factor, composite); + SetDeviceTransform(composite); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_TRANSFORMATION_MATRIX_EQ( composite, root->draw_properties().target_space_transform); EXPECT_TRANSFORMATION_MATRIX_EQ( @@ -1120,7 +986,8 @@ device_scale_factor = 1.5f; { - ExecuteCalculateDrawProperties(root, device_scale_factor, translate); + SetDeviceTransform(translate); + UpdateActiveTreeDrawProperties(device_scale_factor); gfx::Transform device_scaled_translate = translate; device_scaled_translate.Scale(device_scale_factor, device_scale_factor); EXPECT_TRANSFORMATION_MATRIX_EQ( @@ -1137,215 +1004,7 @@ } } -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - RenderSurfaceForNonAxisAlignedClipping) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto rotated_and_transparent = Layer::Create(); - root->AddChild(rotated_and_transparent); - auto clips_subtree = Layer::Create(); - rotated_and_transparent->AddChild(clips_subtree); - auto draws_content = Layer::Create(); - clips_subtree->AddChild(draws_content); - - root->SetBounds(gfx::Size(10, 10)); - rotated_and_transparent->SetBounds(gfx::Size(10, 10)); - rotated_and_transparent->SetOpacity(0.5f); - gfx::Transform rotate; - rotate.Rotate(2); - rotated_and_transparent->SetTransform(rotate); - clips_subtree->SetBounds(gfx::Size(10, 10)); - clips_subtree->SetMasksToBounds(true); - draws_content->SetBounds(gfx::Size(10, 10)); - draws_content->SetIsDrawable(true); - - ExecuteCalculateDrawProperties(root.get()); - EXPECT_TRUE(GetEffectNode(clips_subtree.get())->HasRenderSurface()); -} - -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - EffectNodesForNonAxisAlignedClips) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto rotate_and_clip = Layer::Create(); - root->AddChild(rotate_and_clip); - auto only_clip = Layer::Create(); - rotate_and_clip->AddChild(only_clip); - auto rotate_and_clip2 = Layer::Create(); - only_clip->AddChild(rotate_and_clip2); - - gfx::Transform rotate; - rotate.Rotate(2); - root->SetBounds(gfx::Size(10, 10)); - rotate_and_clip->SetBounds(gfx::Size(10, 10)); - rotate_and_clip->SetTransform(rotate); - rotate_and_clip->SetMasksToBounds(true); - only_clip->SetBounds(gfx::Size(10, 10)); - only_clip->SetMasksToBounds(true); - rotate_and_clip2->SetBounds(gfx::Size(10, 10)); - rotate_and_clip2->SetTransform(rotate); - rotate_and_clip2->SetMasksToBounds(true); - - ExecuteCalculateDrawProperties(root.get()); - // non-axis aligned clip should create an effect node - EXPECT_NE(root->effect_tree_index(), rotate_and_clip->effect_tree_index()); - // Since only_clip's clip is in the same non-axis aligned space as - // rotate_and_clip's clip, no new effect node should be created. - EXPECT_EQ(rotate_and_clip->effect_tree_index(), - only_clip->effect_tree_index()); - // rotate_and_clip2's clip and only_clip's clip are in different non-axis - // aligned spaces. So, new effect node should be created. - EXPECT_NE(rotate_and_clip2->effect_tree_index(), - only_clip->effect_tree_index()); -} - -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - RenderSurfaceListForRenderSurfaceWithClippedLayer) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto render_surface1 = Layer::Create(); - root->AddChild(render_surface1); - auto child = Layer::Create(); - render_surface1->AddChild(child); - - root->SetBounds(gfx::Size(10, 10)); - root->SetMasksToBounds(true); - render_surface1->SetBounds(gfx::Size(10, 10)); - render_surface1->SetForceRenderSurfaceForTesting(true); - child->SetIsDrawable(true); - child->SetPosition(gfx::PointF(30.f, 30.f)); - child->SetBounds(gfx::Size(10, 10)); - - CommitAndActivate(); - - // The child layer's content is entirely outside the root's clip rect, so - // the intermediate render surface should not be listed here, even if it was - // forced to be created. Render surfaces without children or visible content - // are unexpected at draw time (e.g. we might try to create a content texture - // of size 0). - ASSERT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_EQ(1U, render_surface_list_impl()->size()); -} - -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - RenderSurfaceListForTransparentChild) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto render_surface1 = Layer::Create(); - root->AddChild(render_surface1); - auto child = Layer::Create(); - render_surface1->AddChild(child); - - root->SetBounds(gfx::Size(10, 10)); - render_surface1->SetBounds(gfx::Size(10, 10)); - render_surface1->SetForceRenderSurfaceForTesting(true); - render_surface1->SetOpacity(0.f); - child->SetBounds(gfx::Size(10, 10)); - child->SetIsDrawable(true); - - CommitAndActivate(); - - // Since the layer is transparent, render_surface1_impl->GetRenderSurface() - // should not have gotten added anywhere. Also, the drawable content rect - // should not have been extended by the children. - ASSERT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_EQ(0, GetRenderSurfaceImpl(root)->num_contributors()); - EXPECT_EQ(1U, render_surface_list_impl()->size()); - EXPECT_EQ(static_cast<viz::RenderPassId>(root->id()), - render_surface_list_impl()->at(0)->id()); - EXPECT_EQ(gfx::Rect(), ImplOf(root)->drawable_content_rect()); -} - -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - RenderSurfaceListForTransparentChildWithBackdropFilter) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto render_surface1 = Layer::Create(); - root->AddChild(render_surface1); - auto child = Layer::Create(); - render_surface1->AddChild(child); - - root->SetBounds(gfx::Size(10, 10)); - render_surface1->SetBounds(gfx::Size(10, 10)); - render_surface1->SetForceRenderSurfaceForTesting(true); - render_surface1->SetOpacity(0.f); - render_surface1->SetIsDrawable(true); - FilterOperations filters; - filters.Append(FilterOperation::CreateBlurFilter(1.5f)); - render_surface1->SetBackdropFilters(filters); - child->SetBounds(gfx::Size(10, 10)); - child->SetIsDrawable(true); - host()->SetElementIdsForTesting(); - - CommitAndActivate(); - EXPECT_EQ(2U, render_surface_list_impl()->size()); - - // The layer is fully transparent, but has a backdrop filter, so it - // shouldn't be skipped and should be drawn. - ASSERT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_EQ(1, GetRenderSurfaceImpl(root)->num_contributors()); - EXPECT_EQ(gfx::RectF(0, 0, 10, 10), - GetRenderSurfaceImpl(root)->DrawableContentRect()); - EXPECT_TRUE(GetEffectNode(ImplOf(render_surface1))->is_drawn); - - // When root is transparent, the layer should not be drawn. - host_impl()->active_tree()->SetOpacityMutated(root->element_id(), 0.f); - host_impl()->active_tree()->SetOpacityMutated(render_surface1->element_id(), - 1.f); - ImplOf(render_surface1)->set_visible_layer_rect(gfx::Rect()); - ExecuteCalculateDrawProperties(ImplOf(root)); - - EXPECT_FALSE(GetEffectNode(ImplOf(render_surface1))->is_drawn); - EXPECT_EQ(gfx::Rect(), ImplOf(render_surface1)->visible_layer_rect()); -} - -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, RenderSurfaceListForFilter) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto parent = Layer::Create(); - root->AddChild(parent); - auto child1 = Layer::Create(); - parent->AddChild(child1); - auto child2 = Layer::Create(); - parent->AddChild(child2); - - gfx::Transform scale_matrix; - scale_matrix.Scale(2.0f, 2.0f); - - root->SetBounds(gfx::Size(100, 100)); - parent->SetTransform(scale_matrix); - FilterOperations filters; - filters.Append(FilterOperation::CreateBlurFilter(10.0f)); - parent->SetFilters(filters); - parent->SetForceRenderSurfaceForTesting(true); - child1->SetBounds(gfx::Size(25, 25)); - child1->SetIsDrawable(true); - child1->SetForceRenderSurfaceForTesting(true); - child2->SetPosition(gfx::PointF(25, 25)); - child2->SetBounds(gfx::Size(25, 25)); - child2->SetIsDrawable(true); - child2->SetForceRenderSurfaceForTesting(true); - - CommitAndActivate(); - - ASSERT_TRUE(GetRenderSurfaceImpl(parent)); - EXPECT_EQ(2, GetRenderSurfaceImpl(parent)->num_contributors()); - EXPECT_EQ(4U, render_surface_list_impl()->size()); - - // The rectangle enclosing child1 and child2 (0,0 50x50), expanded for the - // blur (-30,-30 110x110), and then scaled by the scale matrix - // (-60,-60 220x220). - EXPECT_EQ(gfx::RectF(-60, -60, 220, 220), - GetRenderSurfaceImpl(parent)->DrawableContentRect()); -} - -TEST_F(LayerTreeHostCommonTest, DrawableContentRectForReferenceFilter) { +TEST_F(DrawPropertiesTest, DrawableContentRectForReferenceFilter) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -1361,7 +1020,7 @@ child_effect_node.render_surface_reason = RenderSurfaceReason::kTest; child_effect_node.filters = filters; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // The render surface's size should be unaffected by the offset image filter; // it need only have a drawable content rect large enough to contain the @@ -1371,7 +1030,7 @@ GetRenderSurface(child)->DrawableContentRect()); } -TEST_F(LayerTreeHostCommonTest, DrawableContentRectForReferenceFilterHighDpi) { +TEST_F(DrawPropertiesTest, DrawableContentRectForReferenceFilterHighDpi) { const float device_scale_factor = 2.0f; LayerImpl* root = root_layer(); @@ -1390,7 +1049,7 @@ child_effect_node.render_surface_reason = RenderSurfaceReason::kTest; child_effect_node.filters = filters; - ExecuteCalculateDrawProperties(root, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); // The render surface's size should be unaffected by the offset image filter; // it need only have a drawable content rect large enough to contain the @@ -1401,7 +1060,7 @@ GetRenderSurface(child)->DrawableContentRect()); } -TEST_F(LayerTreeHostCommonTest, RenderSurfaceForBlendMode) { +TEST_F(DrawPropertiesTest, RenderSurfaceForBlendMode) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -1415,7 +1074,7 @@ child_effect_node.blend_mode = SkBlendMode::kMultiply; child_effect_node.opacity = 0.5f; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // Since the child layer has a blend mode other than normal, it should get // its own render surface. @@ -1425,7 +1084,7 @@ EXPECT_EQ(SkBlendMode::kMultiply, GetRenderSurface(child)->BlendMode()); } -TEST_F(LayerTreeHostCommonTest, RenderSurfaceDrawOpacity) { +TEST_F(DrawPropertiesTest, RenderSurfaceDrawOpacity) { LayerImpl* root = root_layer(); LayerImpl* surface1 = AddLayer<LayerImpl>(); LayerImpl* not_surface = AddLayer<LayerImpl>(); @@ -1449,7 +1108,7 @@ surface2_effect_node.render_surface_reason = RenderSurfaceReason::kTest; surface2_effect_node.opacity = 0.5f; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(surface1)); ASSERT_EQ(GetRenderSurface(not_surface), GetRenderSurface(surface1)); @@ -1460,88 +1119,9 @@ EXPECT_EQ(0.25f, GetRenderSurface(surface2)->draw_opacity()); } -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, ForceRenderSurface) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto render_surface1 = Layer::Create(); - root->AddChild(render_surface1); - auto child = Layer::Create(); - render_surface1->AddChild(child); - - root->SetBounds(gfx::Size(10, 10)); - render_surface1->SetBounds(gfx::Size(10, 10)); - render_surface1->SetForceRenderSurfaceForTesting(true); - child->SetBounds(gfx::Size(10, 10)); - child->SetIsDrawable(true); - - CommitAndActivate(); - - // The root layer always creates a render surface - EXPECT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(render_surface1), GetRenderSurfaceImpl(root)); - - render_surface1->SetForceRenderSurfaceForTesting(false); - CommitAndActivate(); - - EXPECT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(render_surface1), GetRenderSurfaceImpl(root)); -} - -// Needs layer tree mode: testing PropertyTreeBuilder (force flattening on -// surface). -TEST_F(LayerTreeHostCommonTestWithLayerTree, - RenderSurfacesFlattenScreenSpaceTransform) { - // Render surfaces act as a flattening point for their subtree, so should - // always flatten the target-to-screen space transform seen by descendants. - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto parent = Layer::Create(); - root->AddChild(parent); - auto child = Layer::Create(); - parent->AddChild(child); - auto grand_child = Layer::Create(); - child->AddChild(grand_child); - - gfx::Transform rotation_about_y_axis; - rotation_about_y_axis.RotateAboutYAxis(30.0); - - root->SetBounds(gfx::Size(100, 100)); - parent->SetTransform(rotation_about_y_axis); - parent->SetBounds(gfx::Size(10, 10)); - parent->SetForceRenderSurfaceForTesting(true); - child->SetBounds(gfx::Size(10, 10)); - child->SetIsDrawable(true); - grand_child->SetBounds(gfx::Size(10, 10)); - grand_child->SetIsDrawable(true); - grand_child->SetShouldFlattenTransform(false); - - CommitAndActivate(); - - EXPECT_TRUE(GetRenderSurfaceImpl(parent)); - EXPECT_EQ(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(parent)); - EXPECT_EQ(GetRenderSurfaceImpl(grand_child), GetRenderSurfaceImpl(parent)); - - EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), - ImplOf(child)->DrawTransform()); - EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), - ImplOf(grand_child)->DrawTransform()); - - // The screen-space transform inherited by |child| and |grand_child| - // should have been flattened at their render target. In particular, the fact - // that |grand_child| happens to preserve 3d shouldn't affect this - // flattening. - gfx::Transform flattened_rotation_about_y = rotation_about_y_axis; - flattened_rotation_about_y.FlattenTo2d(); - EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_y, - ImplOf(child)->ScreenSpaceTransform()); - EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_y, - ImplOf(grand_child)->ScreenSpaceTransform()); -} - -TEST_F(LayerTreeHostCommonTest, ClipRectCullsRenderSurfaces) { +TEST_F(DrawPropertiesTest, ClipRectCullsRenderSurfaces) { // The entire subtree of layers that are outside the clip rect should be - // culled away, and should not affect the render_surface_list. + // culled away, and should not affect the GetRenderSurfaceList. // // The test tree is set up as follows: // - all layers except the leaf_nodes are forced to be a new render surface @@ -1560,8 +1140,9 @@ LayerImpl* grand_child = AddLayer<LayerImpl>(); LayerImpl* great_grand_child = AddLayer<LayerImpl>(); - // leaf_node1 ensures that root and child are kept on the render_surface_list, - // even though grand_child and great_grand_child should be clipped. + // leaf_node1 ensures that root and child are kept on the + // GetRenderSurfaceList, even though grand_child and great_grand_child should + // be clipped. LayerImpl* leaf_node1 = AddLayer<LayerImpl>(); LayerImpl* leaf_node2 = AddLayer<LayerImpl>(); @@ -1588,16 +1169,16 @@ leaf_node2->SetOffsetToTransformParent( great_grand_child->offset_to_transform_parent()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); - ASSERT_EQ(2U, render_surface_list_impl()->size()); + ASSERT_EQ(2U, GetRenderSurfaceList().size()); EXPECT_EQ(static_cast<uint64_t>(root->id()), - render_surface_list_impl()->at(0)->id()); + GetRenderSurfaceList().at(0)->id()); EXPECT_EQ(static_cast<uint64_t>(child->id()), - render_surface_list_impl()->at(1)->id()); + GetRenderSurfaceList().at(1)->id()); } -TEST_F(LayerTreeHostCommonTest, ClipRectCullsSurfaceWithoutVisibleContent) { +TEST_F(DrawPropertiesTest, ClipRectCullsSurfaceWithoutVisibleContent) { // When a render surface has a clip rect, it is used to clip the content rect // of the surface. @@ -1610,7 +1191,7 @@ // In this configuration, grand_child should be outside the clipped // content rect of the child, making grand_child not appear in the - // render_surface_list. + // GetRenderSurfaceList. LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -1635,15 +1216,15 @@ leaf_node->SetOffsetToTransformParent( grand_child->offset_to_transform_parent()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); - // We should cull child and grand_child from the render_surface_list. - ASSERT_EQ(1U, render_surface_list_impl()->size()); + // We should cull child and grand_child from the GetRenderSurfaceList. + ASSERT_EQ(1U, GetRenderSurfaceList().size()); EXPECT_EQ(static_cast<uint64_t>(root->id()), - render_surface_list_impl()->at(0)->id()); + GetRenderSurfaceList().at(0)->id()); } -TEST_F(LayerTreeHostCommonTest, IsClippedIsSetCorrectlyLayerImpl) { +TEST_F(DrawPropertiesTest, IsClippedIsSetCorrectlyLayerImpl) { // Tests that LayerImpl's IsClipped() property is set to true when: // - the layer clips its subtree, e.g. masks to bounds, // - the layer is clipped by an ancestor that contributes to the same @@ -1689,7 +1270,7 @@ CopyProperties(child2, leaf_node2); // Case 1: nothing is clipped except the root render surface. - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(root)); ASSERT_TRUE(GetRenderSurface(child2)); @@ -1717,7 +1298,8 @@ GetEffectNode(child2)->clip_id = parent->clip_tree_index(); leaf_node2->SetClipTreeIndex(parent->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + host_impl()->active_tree()->set_needs_update_draw_properties(); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(root)); ASSERT_TRUE(GetRenderSurface(child2)); @@ -1747,7 +1329,8 @@ CreateClipNode(child2); leaf_node2->SetClipTreeIndex(child2->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + host_impl()->active_tree()->set_needs_update_draw_properties(); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(root)); ASSERT_TRUE(GetRenderSurface(child2)); @@ -1763,7 +1346,7 @@ EXPECT_TRUE(leaf_node2->is_clipped()); } -TEST_F(LayerTreeHostCommonTest, UpdateClipRectCorrectly) { +TEST_F(DrawPropertiesTest, UpdateClipRectCorrectly) { // Tests that when as long as layer is clipped, it's clip rect is set to // correct value. LayerImpl* root = root_layer(); @@ -1782,7 +1365,7 @@ CopyProperties(parent, child); CreateClipNode(child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_FALSE(root->is_clipped()); EXPECT_FALSE(parent->is_clipped()); @@ -1795,7 +1378,8 @@ child->SetOffsetToTransformParent(gfx::Vector2dF(100.f, 100.f)); GetClipNode(child)->clip += gfx::Vector2dF(100.f, 100.f); - ExecuteCalculateDrawProperties(root); + host_impl()->active_tree()->set_needs_update_draw_properties(); + UpdateActiveTreeDrawProperties(); EXPECT_FALSE(root->is_clipped()); EXPECT_TRUE(parent->is_clipped()); @@ -1803,7 +1387,7 @@ EXPECT_EQ(gfx::Rect(), child->clip_rect()); } -TEST_F(LayerTreeHostCommonTest, DrawableContentRectForLayers) { +TEST_F(DrawPropertiesTest, DrawableContentRectForLayers) { // Verify that layers get the appropriate DrawableContentRect when their // parent MasksToBounds is true. // @@ -1851,7 +1435,7 @@ CopyProperties(child, grand_child4); grand_child4->SetOffsetToTransformParent(gfx::Vector2dF(45.f, 45.f)); - ExecuteCalculateDrawProperties(parent); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(5, 5, 10, 10), grand_child1->drawable_content_rect()); EXPECT_EQ(gfx::Rect(15, 15, 5, 5), grand_child3->drawable_content_rect()); @@ -1859,7 +1443,7 @@ EXPECT_TRUE(grand_child4->drawable_content_rect().IsEmpty()); } -TEST_F(LayerTreeHostCommonTest, ClipRectIsPropagatedCorrectlyToSurfaces) { +TEST_F(DrawPropertiesTest, ClipRectIsPropagatedCorrectlyToSurfaces) { // Verify that render surfaces (and their layers) get the appropriate // clip rects when their parent MasksToBounds is true. // @@ -1927,7 +1511,7 @@ CreateClipNode(grand_child4); CopyProperties(grand_child4, leaf_node4); - ExecuteCalculateDrawProperties(parent); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(grand_child1)); ASSERT_TRUE(GetRenderSurface(grand_child2)); @@ -1943,7 +1527,7 @@ GetRenderSurface(grand_child3)->clip_rect()); } -TEST_F(LayerTreeHostCommonTest, AnimationsForRenderSurfaceHierarchy) { +TEST_F(DrawPropertiesTest, AnimationsForRenderSurfaceHierarchy) { LayerImpl* root = root_layer(); LayerImpl* top = AddLayer<LayerImpl>(); LayerImpl* render_surface1 = AddLayer<LayerImpl>(); @@ -2052,7 +1636,7 @@ AddAnimatedTransformToElementWithAnimation(grand_child_of_rs2->element_id(), timeline_impl(), 10.0, 30, 0); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // Only layers that are associated with render surfaces should have an actual // RenderSurface() value. @@ -2123,7 +1707,7 @@ 5.0, grand_child_of_rs2->ScreenSpaceTransform().matrix().get(1, 3)); } -TEST_F(LayerTreeHostCommonTest, LargeTransforms) { +TEST_F(DrawPropertiesTest, LargeTransforms) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); LayerImpl* grand_child = AddLayer<LayerImpl>(); @@ -2141,7 +1725,7 @@ CopyProperties(child, grand_child); CreateTransformNode(grand_child).local = large_transform; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(), grand_child->visible_layer_rect()); } @@ -2158,7 +1742,7 @@ layer->element_id(), layer->GetElementTypeForAnimation()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, ScreenSpaceTransformIsAnimatingWithDelayedAnimation) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -2191,7 +1775,7 @@ AddKeyframeModelToElementWithAnimation( grand_child->element_id(), timeline_impl(), std::move(keyframe_model)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_FALSE(root->screen_space_transform_is_animating()); EXPECT_FALSE(child->screen_space_transform_is_animating()); @@ -2204,7 +1788,7 @@ // Test visible layer rect and drawable content rect are calculated correctly // for identity transforms. -TEST_F(LayerTreeHostCommonDrawRectsTest, DrawRectsForIdentityTransform) { +TEST_F(DrawPropertiesDrawRectsTest, DrawRectsForIdentityTransform) { gfx::Rect target_surface_rect = gfx::Rect(0, 0, 100, 100); gfx::Transform layer_to_surface_transform; @@ -2241,7 +1825,7 @@ // Test visible layer rect and drawable content rect are calculated correctly // for rotations about z-axis (i.e. 2D rotations). -TEST_F(LayerTreeHostCommonDrawRectsTest, DrawRectsFor2DRotations) { +TEST_F(DrawPropertiesDrawRectsTest, DrawRectsFor2DRotations) { gfx::Rect target_surface_rect = gfx::Rect(0, 0, 100, 100); gfx::Rect layer_content_rect = gfx::Rect(0, 0, 30, 30); gfx::Transform layer_to_surface_transform; @@ -2305,7 +1889,7 @@ // Test visible layer rect and drawable content rect are calculated correctly // for 3d transforms. -TEST_F(LayerTreeHostCommonDrawRectsTest, DrawRectsFor3dOrthographicTransform) { +TEST_F(DrawPropertiesDrawRectsTest, DrawRectsFor3dOrthographicTransform) { gfx::Rect target_surface_rect = gfx::Rect(0, 0, 100, 100); gfx::Rect layer_content_rect = gfx::Rect(0, 0, 100, 100); gfx::Transform layer_to_surface_transform; @@ -2345,7 +1929,7 @@ // Test visible layer rect and drawable content rect are calculated correctly // when the layer has a perspective projection onto the target surface. -TEST_F(LayerTreeHostCommonDrawRectsTest, DrawRectsFor3dPerspectiveTransform) { +TEST_F(DrawPropertiesDrawRectsTest, DrawRectsFor3dPerspectiveTransform) { gfx::Rect target_surface_rect = gfx::Rect(0, 0, 100, 100); gfx::Rect layer_content_rect = gfx::Rect(-50, -50, 200, 200); gfx::Transform layer_to_surface_transform; @@ -2399,7 +1983,7 @@ // in our code (nor in the CSS spec to my knowledge). Therefore, layers that // are technically behind the surface in an orthographic world should not be // clipped when they are flattened to the surface. -TEST_F(LayerTreeHostCommonDrawRectsTest, +TEST_F(DrawPropertiesDrawRectsTest, DrawRectsFor3dOrthographicIsNotClippedBehindSurface) { gfx::Rect target_surface_rect = gfx::Rect(0, 0, 100, 100); gfx::Rect layer_content_rect = gfx::Rect(0, 0, 100, 100); @@ -2431,8 +2015,7 @@ // coordinates before converting to cartesian coordinates. The drawable // content rect would be entire surface rect because layer is rotated at the // camera position. -TEST_F(LayerTreeHostCommonDrawRectsTest, - DrawRectsFor3dPerspectiveWhenClippedByW) { +TEST_F(DrawPropertiesDrawRectsTest, DrawRectsFor3dPerspectiveWhenClippedByW) { gfx::Rect target_surface_rect = gfx::Rect(0, 0, 200, 200); gfx::Rect layer_content_rect = gfx::Rect(0, 0, 20, 2); gfx::Transform layer_to_surface_transform; @@ -2483,7 +2066,7 @@ // transform was a perspective projection that was clipped, it returns a rect // that encloses the clipped bounds. Un-projecting this new rect may require // clipping again. -TEST_F(LayerTreeHostCommonDrawRectsTest, DrawRectsForPerspectiveUnprojection) { +TEST_F(DrawPropertiesDrawRectsTest, DrawRectsForPerspectiveUnprojection) { // This sequence of transforms causes one corner of the layer to protrude // across the w = 0 plane, and should be clipped. gfx::Rect target_surface_rect = gfx::Rect(0, 0, 150, 150); @@ -2515,7 +2098,7 @@ drawing_layer->drawable_content_rect()); } -TEST_F(LayerTreeHostCommonTest, DrawableAndVisibleContentRectsForSimpleLayers) { +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsForSimpleLayers) { LayerImpl* root = root_layer(); LayerImpl* child1_layer = AddLayer<LayerImpl>(); LayerImpl* child2_layer = AddLayer<LayerImpl>(); @@ -2535,7 +2118,7 @@ CopyProperties(root, child3_layer); child3_layer->SetOffsetToTransformParent(gfx::Vector2dF(125.f, 125.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::RectF(100.f, 100.f), GetRenderSurface(root)->DrawableContentRect()); @@ -2554,7 +2137,7 @@ EXPECT_EQ(gfx::Rect(125, 125, 50, 50), child3_layer->drawable_content_rect()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsForLayersClippedByLayer) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -2581,7 +2164,7 @@ CopyProperties(child, grand_child3); grand_child3->SetOffsetToTransformParent(gfx::Vector2dF(125.f, 125.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::RectF(100.f, 100.f), GetRenderSurface(root)->DrawableContentRect()); @@ -2601,7 +2184,7 @@ EXPECT_TRUE(grand_child3->drawable_content_rect().IsEmpty()); } -TEST_F(LayerTreeHostCommonTest, VisibleContentRectWithClippingAndScaling) { +TEST_F(DrawPropertiesTest, VisibleContentRectWithClippingAndScaling) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); LayerImpl* grand_child = AddLayer<LayerImpl>(); @@ -2623,133 +2206,13 @@ CopyProperties(child, grand_child); CreateTransformNode(grand_child).local = grand_child_scale_matrix; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // The visible rect is expanded to integer coordinates. EXPECT_EQ(gfx::Rect(41, 41), grand_child->visible_layer_rect()); } -// Needs layer tree mode: testing PropertyTreeBuilder (creating expanding clip -// node for pixel-moving filter). -TEST_F(LayerTreeHostCommonTestWithLayerTree, - VisibleRectWithClippingAndFilters) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto clip = Layer::Create(); - root->AddChild(clip); - auto filter = Layer::Create(); - clip->AddChild(filter); - auto filter_child = Layer::Create(); - filter->AddChild(filter_child); - - root->SetBounds(gfx::Size(100, 100)); - clip->SetBounds(gfx::Size(10, 10)); - filter->SetForceRenderSurfaceForTesting(true); - filter_child->SetBounds(gfx::Size(2000, 2000)); - filter_child->SetPosition(gfx::PointF(-50, -50)); - filter_child->SetIsDrawable(true); - - clip->SetMasksToBounds(true); - - CommitAndActivate(); - - EXPECT_EQ(gfx::Rect(50, 50, 10, 10), - ImplOf(filter_child)->visible_layer_rect()); - EXPECT_EQ(gfx::Rect(10, 10), GetRenderSurfaceImpl(filter)->content_rect()); - - FilterOperations blur_filter; - blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f)); - filter->SetFilters(blur_filter); - - CommitAndActivate(); - - EXPECT_EQ(gfx::Rect(38, 38, 34, 34), - ImplOf(filter_child)->visible_layer_rect()); - EXPECT_EQ(gfx::Rect(-12, -12, 34, 34), - GetRenderSurfaceImpl(filter)->content_rect()); - - gfx::Transform vertical_flip; - vertical_flip.Scale(1, -1); - sk_sp<PaintFilter> flip_filter = sk_make_sp<MatrixPaintFilter>( - vertical_flip.matrix(), kLow_SkFilterQuality, nullptr); - FilterOperations reflection_filter; - reflection_filter.Append( - FilterOperation::CreateReferenceFilter(sk_make_sp<XfermodePaintFilter>( - SkBlendMode::kSrcOver, std::move(flip_filter), nullptr))); - filter->SetFilters(reflection_filter); - - CommitAndActivate(); - - EXPECT_EQ(gfx::Rect(49, 39, 12, 21), - ImplOf(filter_child)->visible_layer_rect()); - EXPECT_EQ(gfx::Rect(-1, -11, 12, 21), - GetRenderSurfaceImpl(filter)->content_rect()); -} - -// Needs layer tree mode: testing PropertyTreeBuilder (creating expanding clip -// node for pixel-moving filter). -TEST_F(LayerTreeHostCommonTestWithLayerTree, - VisibleRectWithScalingClippingAndFilters) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto scale = Layer::Create(); - root->AddChild(scale); - auto clip = Layer::Create(); - scale->AddChild(clip); - auto filter = Layer::Create(); - clip->AddChild(filter); - auto filter_child = Layer::Create(); - filter->AddChild(filter_child); - - root->SetBounds(gfx::Size(100, 100)); - clip->SetBounds(gfx::Size(10, 10)); - filter->SetForceRenderSurfaceForTesting(true); - filter_child->SetBounds(gfx::Size(2000, 2000)); - filter_child->SetPosition(gfx::PointF(-50, -50)); - filter_child->SetIsDrawable(true); - - clip->SetMasksToBounds(true); - - gfx::Transform scale_transform; - scale_transform.Scale(3, 3); - scale->SetTransform(scale_transform); - - CommitAndActivate(); - - EXPECT_EQ(gfx::Rect(50, 50, 10, 10), - ImplOf(filter_child)->visible_layer_rect()); - EXPECT_EQ(gfx::Rect(30, 30), GetRenderSurfaceImpl(filter)->content_rect()); - - FilterOperations blur_filter; - blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f)); - filter->SetFilters(blur_filter); - - CommitAndActivate(); - - EXPECT_EQ(gfx::Rect(38, 38, 34, 34), - ImplOf(filter_child)->visible_layer_rect()); - EXPECT_EQ(gfx::Rect(-36, -36, 102, 102), - GetRenderSurfaceImpl(filter)->content_rect()); - - gfx::Transform vertical_flip; - vertical_flip.Scale(1, -1); - sk_sp<PaintFilter> flip_filter = sk_make_sp<MatrixPaintFilter>( - vertical_flip.matrix(), kLow_SkFilterQuality, nullptr); - FilterOperations reflection_filter; - reflection_filter.Append( - FilterOperation::CreateReferenceFilter(sk_make_sp<XfermodePaintFilter>( - SkBlendMode::kSrcOver, std::move(flip_filter), nullptr))); - filter->SetFilters(reflection_filter); - - CommitAndActivate(); - - EXPECT_EQ(gfx::Rect(49, 39, 12, 21), - ImplOf(filter_child)->visible_layer_rect()); - EXPECT_EQ(gfx::Rect(-1, -31, 32, 61), - GetRenderSurfaceImpl(filter)->content_rect()); -} - -TEST_F(LayerTreeHostCommonTest, ClipRectWithClipParent) { +TEST_F(DrawPropertiesTest, ClipRectWithClipParent) { LayerImpl* root = root_layer(); LayerImpl* clip = AddLayer<LayerImpl>(); LayerImpl* child1 = AddLayer<LayerImpl>(); @@ -2771,7 +2234,7 @@ child2->SetDrawsContent(true); CopyProperties(clip, child2); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(child1->is_clipped()); EXPECT_TRUE(child2->is_clipped()); @@ -2779,7 +2242,7 @@ EXPECT_EQ(gfx::Rect(10, 10), child2->clip_rect()); } -TEST_F(LayerTreeHostCommonTest, ClipRectWithClippedDescendantOfFilter) { +TEST_F(DrawPropertiesTest, ClipRectWithClippedDescendantOfFilter) { LayerImpl* root = root_layer(); LayerImpl* filter = AddLayer<LayerImpl>(); LayerImpl* clip = AddLayer<LayerImpl>(); @@ -2797,7 +2260,7 @@ CreateClipNode(clip); CopyProperties(clip, filter_grand_child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(filter_grand_child->is_clipped()); EXPECT_EQ(gfx::Rect(10, 10), filter_grand_child->clip_rect()); @@ -2805,13 +2268,13 @@ blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f)); SetFilter(filter, blur_filter); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(filter_grand_child->is_clipped()); EXPECT_EQ(gfx::Rect(10, 10), filter_grand_child->clip_rect()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsForLayersInUnclippedRenderSurface) { LayerImpl* root = root_layer(); LayerImpl* render_surface = AddLayer<LayerImpl>(); @@ -2838,7 +2301,7 @@ CopyProperties(render_surface, child3); child3->SetOffsetToTransformParent(gfx::Vector2dF(125.f, 125.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(render_surface)); @@ -2865,8 +2328,7 @@ EXPECT_EQ(gfx::Rect(125, 125, 50, 50), child3->drawable_content_rect()); } -TEST_F(LayerTreeHostCommonTest, - VisibleContentRectsForClippedSurfaceWithEmptyClip) { +TEST_F(DrawPropertiesTest, VisibleContentRectsForClippedSurfaceWithEmptyClip) { LayerImpl* root = root_layer(); LayerImpl* child1 = AddLayer<LayerImpl>(); LayerImpl* child2 = AddLayer<LayerImpl>(); @@ -2887,12 +2349,12 @@ CopyProperties(root, child3); child3->SetOffsetToTransformParent(gfx::Vector2dF(125.f, 125.f)); - RenderSurfaceList render_surface_list_impl; // Now set the root render surface an empty clip. - LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( - root, gfx::Rect(), &render_surface_list_impl); + // Not using UpdateActiveTreeDrawProperties() because we want a special + // device viewport rect. + host_impl()->active_tree()->SetDeviceViewportRect(gfx::Rect()); + UpdateDrawProperties(host_impl()->active_tree()); - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); ASSERT_TRUE(GetRenderSurface(root)); EXPECT_FALSE(root->is_clipped()); @@ -2908,7 +2370,7 @@ EXPECT_EQ(empty, child3->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsForLayersWithUninvertibleTransform) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -2924,7 +2386,7 @@ CopyProperties(root, child); CreateTransformNode(child).local = uninvertible_matrix; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(child->visible_layer_rect().IsEmpty()); EXPECT_TRUE(child->drawable_content_rect().IsEmpty()); @@ -2936,7 +2398,7 @@ ASSERT_FALSE(uninvertible_matrix.IsInvertible()); SetTransform(child, uninvertible_matrix); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(child->visible_layer_rect().IsEmpty()); EXPECT_TRUE(child->drawable_content_rect().IsEmpty()); @@ -2948,13 +2410,13 @@ ASSERT_FALSE(uninvertible_matrix.IsInvertible()); SetTransform(child, uninvertible_matrix); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(child->visible_layer_rect().IsEmpty()); EXPECT_TRUE(child->drawable_content_rect().IsEmpty()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, VisibleContentRectForLayerWithUninvertibleDrawTransform) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -2984,7 +2446,7 @@ grand_child_transform_node.sorting_context_id = 1; grand_child_transform_node.local = rotation; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // Though all layers have invertible transforms, matrix multiplication using // floating-point math makes the draw transform uninvertible. @@ -2996,7 +2458,7 @@ } // Needs layer tree mode: mask layer. -TEST_F(LayerTreeHostCommonTestWithLayerTree, OcclusionBySiblingOfTarget) { +TEST_F(DrawPropertiesTestWithLayerTree, OcclusionBySiblingOfTarget) { auto root = Layer::Create(); auto child = Layer::Create(); FakeContentLayerClient client; @@ -3035,7 +2497,6 @@ host()->SetRootLayer(root); CommitAndActivate(); - host_impl()->active_tree()->UpdateDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ( GetRenderSurfaceImpl(surface)->draw_transform(), translate); @@ -3057,35 +2518,7 @@ EXPECT_TRUE(expected_occlusion.IsEqual(actual_occlusion)); } -// Needs layer tree mode: testing PropertyTreeBuilder (snapping transform for -// texture layer). -TEST_F(LayerTreeHostCommonTestWithLayerTree, TextureLayerSnapping) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto child = TextureLayer::CreateForMailbox(nullptr); - root->AddChild(child); - - root->SetBounds(gfx::Size(100, 100)); - child->SetBounds(gfx::Size(100, 100)); - child->SetIsDrawable(true); - gfx::Transform fractional_translate; - fractional_translate.Translate(10.5f, 20.3f); - child->SetTransform(fractional_translate); - - CommitAndActivate(); - - auto child_screen_space_transform = ImplOf(child)->ScreenSpaceTransform(); - EXPECT_NE(child_screen_space_transform, fractional_translate); - fractional_translate.RoundTranslationComponents(); - EXPECT_TRANSFORMATION_MATRIX_EQ(child_screen_space_transform, - fractional_translate); - gfx::RectF layer_bounds_in_screen_space = MathUtil::MapClippedRect( - child_screen_space_transform, gfx::RectF(gfx::SizeF(child->bounds()))); - EXPECT_EQ(layer_bounds_in_screen_space, gfx::RectF(11.f, 20.f, 100.f, 100.f)); -} - -TEST_F(LayerTreeHostCommonTest, - OcclusionForLayerWithUninvertibleDrawTransform) { +TEST_F(DrawPropertiesTest, OcclusionForLayerWithUninvertibleDrawTransform) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); LayerImpl* grand_child = AddLayer<LayerImpl>(); @@ -3121,7 +2554,7 @@ CopyProperties(root, occluding_child); CreateTransformNode(occluding_child).flattens_inherited_transform = false; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // Though all layers have invertible transforms, matrix multiplication using // floating-point math makes the draw transform uninvertible. @@ -3137,7 +2570,7 @@ .occlusion_in_content_space.GetUnoccludedContentRect(layer_bounds)); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsForLayersInClippedRenderSurface) { LayerImpl* root = root_layer(); LayerImpl* render_surface = AddLayer<LayerImpl>(); @@ -3166,7 +2599,7 @@ CopyProperties(render_surface, child3); child3->SetOffsetToTransformParent(gfx::Vector2dF(125.f, 125.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(render_surface)); @@ -3195,8 +2628,7 @@ } // Check that clipping does not propagate down surfaces. -TEST_F(LayerTreeHostCommonTest, - DrawableAndVisibleContentRectsForSurfaceHierarchy) { +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsForSurfaceHierarchy) { LayerImpl* root = root_layer(); LayerImpl* render_surface1 = AddLayer<LayerImpl>(); LayerImpl* render_surface2 = AddLayer<LayerImpl>(); @@ -3229,7 +2661,7 @@ CopyProperties(render_surface2, child3); child3->SetOffsetToTransformParent(gfx::Vector2dF(125.f, 125.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(render_surface1)); ASSERT_TRUE(GetRenderSurface(render_surface2)); @@ -3265,7 +2697,7 @@ EXPECT_EQ(gfx::Rect(125, 125, 50, 50), child3->drawable_content_rect()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, VisibleRectsForClippedDescendantsOfUnclippedSurfaces) { LayerImpl* root = root_layer(); LayerImpl* render_surface1 = AddLayer<LayerImpl>(); @@ -3296,12 +2728,12 @@ CreateEffectNode(render_surface2).render_surface_reason = RenderSurfaceReason::kTest; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(100, 100), child1->visible_layer_rect()); EXPECT_EQ(gfx::Rect(100, 100), render_surface2->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, VisibleRectsWhenClipChildIsBetweenTwoRenderSurfaces) { LayerImpl* root = root_layer(); LayerImpl* clip_parent = AddLayer<LayerImpl>(); @@ -3333,13 +2765,13 @@ CreateEffectNode(render_surface2).render_surface_reason = RenderSurfaceReason::kTest; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(20, 20), render_surface1->visible_layer_rect()); EXPECT_EQ(gfx::Rect(50, 50), clip_child->visible_layer_rect()); EXPECT_EQ(gfx::Rect(50, 50), render_surface2->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, ClipRectOfSurfaceWhoseParentIsAClipChild) { +TEST_F(DrawPropertiesTest, ClipRectOfSurfaceWhoseParentIsAClipChild) { LayerImpl* root = root_layer(); LayerImpl* clip_parent = AddLayer<LayerImpl>(); LayerImpl* clip_layer = AddLayer<LayerImpl>(); @@ -3380,17 +2812,18 @@ RenderSurfaceReason::kTest; float device_scale_factor = 1.f; - ExecuteCalculateDrawProperties(root, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_EQ(gfx::Rect(50, 50), GetRenderSurface(render_surface2)->clip_rect()); device_scale_factor = 2.f; - ExecuteCalculateDrawProperties(root, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); + EXPECT_EQ(gfx::Rect(100, 100), GetRenderSurface(render_surface2)->clip_rect()); } // Test that only drawn layers contribute to render surface content rect. -TEST_F(LayerTreeHostCommonTest, RenderSurfaceContentRectWhenLayerNotDrawn) { +TEST_F(DrawPropertiesTest, RenderSurfaceContentRectWhenLayerNotDrawn) { LayerImpl* root = root_layer(); LayerImpl* surface = AddLayer<LayerImpl>(); LayerImpl* test_layer = AddLayer<LayerImpl>(); @@ -3404,11 +2837,11 @@ CreateEffectNode(surface).render_surface_reason = RenderSurfaceReason::kTest; CopyProperties(surface, test_layer); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(100, 100), GetRenderSurface(surface)->content_rect()); test_layer->SetDrawsContent(true); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(150, 150), GetRenderSurface(surface)->content_rect()); } @@ -3416,7 +2849,7 @@ // surface_with_unclipped_descendants->clipped_surface, checks that the bounds // of surface_with_unclipped_descendants doesn't propagate to the // clipped_surface below it. -TEST_F(LayerTreeHostCommonTest, VisibleRectsMultipleSurfaces) { +TEST_F(DrawPropertiesTest, VisibleRectsMultipleSurfaces) { LayerImpl* root = root_layer(); LayerImpl* unclipped_surface = AddLayer<LayerImpl>(); LayerImpl* clip_parent = AddLayer<LayerImpl>(); @@ -3448,7 +2881,7 @@ CreateEffectNode(clipped_surface).render_surface_reason = RenderSurfaceReason::kTest; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(30, 30), unclipped_surface->visible_layer_rect()); EXPECT_EQ(gfx::Rect(20, 20), unclipped_desc_surface->visible_layer_rect()); EXPECT_EQ(gfx::Rect(50, 50), clipped_surface->visible_layer_rect()); @@ -3457,7 +2890,7 @@ // Tests visible rects computation when we have unclipped_surface-> // surface_with_unclipped_descendants->clipped_surface, checks that the bounds // of root propagate to the clipped_surface. -TEST_F(LayerTreeHostCommonTest, RootClipPropagationToClippedSurface) { +TEST_F(DrawPropertiesTest, RootClipPropagationToClippedSurface) { LayerImpl* root = root_layer(); LayerImpl* unclipped_surface = AddLayer<LayerImpl>(); LayerImpl* clip_parent = AddLayer<LayerImpl>(); @@ -3490,7 +2923,7 @@ CreateEffectNode(clipped_surface).render_surface_reason = RenderSurfaceReason::kTest; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(10, 10), unclipped_surface->visible_layer_rect()); EXPECT_EQ(gfx::Rect(10, 10), unclipped_desc_surface->visible_layer_rect()); EXPECT_EQ(gfx::Rect(10, 10), clipped_surface->visible_layer_rect()); @@ -3498,7 +2931,7 @@ // Layers that have non-axis aligned bounds (due to transforms) have an // expanded, axis-aligned DrawableContentRect and visible content rect. -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsWithTransformOnUnclippedSurface) { LayerImpl* root = root_layer(); LayerImpl* render_surface = AddLayer<LayerImpl>(); @@ -3521,7 +2954,7 @@ child1_transform_node.post_translation = gfx::Vector2dF(25.f, 25.f); child1_transform_node.local = child_rotation; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(render_surface)); @@ -3536,9 +2969,7 @@ // regions of the subtree. int diagonal_radius = ceil(sqrt(2.0) * 25.0); gfx::Rect expected_surface_drawable_content = - gfx::Rect(50 - diagonal_radius, - 50 - diagonal_radius, - diagonal_radius * 2, + gfx::Rect(50 - diagonal_radius, 50 - diagonal_radius, diagonal_radius * 2, diagonal_radius * 2); EXPECT_EQ(gfx::RectF(expected_surface_drawable_content), GetRenderSurface(render_surface)->DrawableContentRect()); @@ -3550,7 +2981,7 @@ // Layers that have non-axis aligned bounds (due to transforms) have an // expanded, axis-aligned DrawableContentRect and visible content rect. -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsWithTransformOnClippedSurface) { LayerImpl* root = root_layer(); LayerImpl* render_surface = AddLayer<LayerImpl>(); @@ -3575,17 +3006,16 @@ child1_transform_node.post_translation = gfx::Vector2dF(25.f, 25.f); child1_transform_node.local = child_rotation; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(render_surface)); // The clipped surface clamps the DrawableContentRect that encloses the // rotated layer. int diagonal_radius = ceil(sqrt(2.0) * 25.0); - gfx::Rect unclipped_surface_content = gfx::Rect(50 - diagonal_radius, - 50 - diagonal_radius, - diagonal_radius * 2, - diagonal_radius * 2); + gfx::Rect unclipped_surface_content = + gfx::Rect(50 - diagonal_radius, 50 - diagonal_radius, diagonal_radius * 2, + diagonal_radius * 2); gfx::RectF expected_surface_drawable_content( gfx::IntersectRects(unclipped_surface_content, gfx::Rect(50, 50))); EXPECT_EQ(expected_surface_drawable_content, @@ -3600,7 +3030,7 @@ EXPECT_EQ(unclipped_surface_content, child1->drawable_content_rect()); } -TEST_F(LayerTreeHostCommonTest, DrawableAndVisibleContentRectsInHighDPI) { +TEST_F(DrawPropertiesTest, DrawableAndVisibleContentRectsInHighDPI) { LayerImpl* root = root_layer(); FakePictureLayerImpl* render_surface1 = AddLayer<FakePictureLayerImpl>(); FakePictureLayerImpl* render_surface2 = AddLayer<FakePictureLayerImpl>(); @@ -3640,7 +3070,7 @@ child3->SetOffsetToTransformParent(gfx::Vector2dF(125.f, 125.f)); float device_scale_factor = 2.f; - ExecuteCalculateDrawProperties(root, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); ASSERT_TRUE(GetRenderSurface(render_surface1)); ASSERT_TRUE(GetRenderSurface(render_surface2)); @@ -3673,375 +3103,10 @@ EXPECT_EQ(gfx::Rect(0, 0, 0, 0), child3->visible_layer_rect()); } -// Verify the behavior of back-face culling when there are no preserve-3d -// layers. Note that 3d transforms still apply in this case, but they are -// "flattened" to each parent layer according to current W3C spec. -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - BackFaceCullingWithoutPreserves3d) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto front_facing_child = Layer::Create(); - root->AddChild(front_facing_child); - auto back_facing_child = Layer::Create(); - root->AddChild(back_facing_child); - auto front_facing_surface = Layer::Create(); - root->AddChild(front_facing_surface); - auto back_facing_surface = Layer::Create(); - root->AddChild(back_facing_surface); - auto front_facing_child_of_front_facing_surface = Layer::Create(); - front_facing_surface->AddChild(front_facing_child_of_front_facing_surface); - auto back_facing_child_of_front_facing_surface = Layer::Create(); - front_facing_surface->AddChild(back_facing_child_of_front_facing_surface); - auto front_facing_child_of_back_facing_surface = Layer::Create(); - back_facing_surface->AddChild(front_facing_child_of_back_facing_surface); - auto back_facing_child_of_back_facing_surface = Layer::Create(); - back_facing_surface->AddChild(back_facing_child_of_back_facing_surface); - - // Nothing is double-sided - front_facing_child->SetDoubleSided(false); - back_facing_child->SetDoubleSided(false); - front_facing_surface->SetDoubleSided(false); - back_facing_surface->SetDoubleSided(false); - front_facing_child_of_front_facing_surface->SetDoubleSided(false); - back_facing_child_of_front_facing_surface->SetDoubleSided(false); - front_facing_child_of_back_facing_surface->SetDoubleSided(false); - back_facing_child_of_back_facing_surface->SetDoubleSided(false); - - // Everything draws content. - front_facing_child->SetIsDrawable(true); - back_facing_child->SetIsDrawable(true); - front_facing_surface->SetIsDrawable(true); - back_facing_surface->SetIsDrawable(true); - front_facing_child_of_front_facing_surface->SetIsDrawable(true); - back_facing_child_of_front_facing_surface->SetIsDrawable(true); - front_facing_child_of_back_facing_surface->SetIsDrawable(true); - back_facing_child_of_back_facing_surface->SetIsDrawable(true); - - gfx::Transform backface_matrix; - backface_matrix.Translate(50.0, 50.0); - backface_matrix.RotateAboutYAxis(180.0); - backface_matrix.Translate(-50.0, -50.0); - - root->SetBounds(gfx::Size(100, 100)); - front_facing_child->SetBounds(gfx::Size(100, 100)); - back_facing_child->SetBounds(gfx::Size(100, 100)); - front_facing_surface->SetBounds(gfx::Size(100, 100)); - back_facing_surface->SetBounds(gfx::Size(100, 100)); - front_facing_child_of_front_facing_surface->SetBounds(gfx::Size(100, 100)); - back_facing_child_of_front_facing_surface->SetBounds(gfx::Size(100, 100)); - front_facing_child_of_back_facing_surface->SetBounds(gfx::Size(100, 100)); - back_facing_child_of_back_facing_surface->SetBounds(gfx::Size(100, 100)); - - front_facing_surface->SetForceRenderSurfaceForTesting(true); - back_facing_surface->SetForceRenderSurfaceForTesting(true); - - back_facing_child->SetTransform(backface_matrix); - back_facing_surface->SetTransform(backface_matrix); - back_facing_child_of_front_facing_surface->SetTransform(backface_matrix); - back_facing_child_of_back_facing_surface->SetTransform(backface_matrix); - - // Note: No layers preserve 3d. According to current W3C CSS gfx::Transforms - // spec, these layers should blindly use their own local transforms to - // determine back-face culling. - CommitAndActivate(); - - // Verify which render surfaces were created. - EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child), - GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child), - GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(front_facing_surface), - GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), - GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), - GetRenderSurfaceImpl(front_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child_of_front_facing_surface), - GetRenderSurfaceImpl(front_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child_of_front_facing_surface), - GetRenderSurfaceImpl(front_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child_of_back_facing_surface), - GetRenderSurfaceImpl(back_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child_of_back_facing_surface), - GetRenderSurfaceImpl(back_facing_surface)); - - EXPECT_EQ(3u, update_layer_impl_list().size()); - EXPECT_TRUE(UpdateLayerImplListContains(front_facing_child->id())); - EXPECT_TRUE(UpdateLayerImplListContains(front_facing_surface->id())); - EXPECT_TRUE(UpdateLayerImplListContains( - front_facing_child_of_front_facing_surface->id())); -} - -// Verify the behavior of back-face culling when preserves-3d transform style -// is used. -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, BackFaceCullingWithPreserves3d) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto front_facing_child = Layer::Create(); - root->AddChild(front_facing_child); - auto back_facing_child = Layer::Create(); - root->AddChild(back_facing_child); - auto front_facing_surface = Layer::Create(); - root->AddChild(front_facing_surface); - auto back_facing_surface = Layer::Create(); - root->AddChild(back_facing_surface); - auto front_facing_child_of_front_facing_surface = Layer::Create(); - front_facing_surface->AddChild(front_facing_child_of_front_facing_surface); - auto back_facing_child_of_front_facing_surface = Layer::Create(); - front_facing_surface->AddChild(back_facing_child_of_front_facing_surface); - auto front_facing_child_of_back_facing_surface = Layer::Create(); - back_facing_surface->AddChild(front_facing_child_of_back_facing_surface); - auto back_facing_child_of_back_facing_surface = Layer::Create(); - back_facing_surface->AddChild(back_facing_child_of_back_facing_surface); - // Opacity will not force creation of render surfaces in this case because of - // the preserve-3d transform style. Instead, an example of when a surface - // would be created with preserve-3d is when there is a mask layer. - FakeContentLayerClient client; - auto front_facing_mask = PictureLayer::Create(&client); - front_facing_surface->SetMaskLayer(front_facing_mask); - auto back_facing_mask = PictureLayer::Create(&client); - back_facing_surface->SetMaskLayer(back_facing_mask); - - // Nothing is double-sided - front_facing_child->SetDoubleSided(false); - back_facing_child->SetDoubleSided(false); - front_facing_surface->SetDoubleSided(false); - back_facing_surface->SetDoubleSided(false); - front_facing_child_of_front_facing_surface->SetDoubleSided(false); - back_facing_child_of_front_facing_surface->SetDoubleSided(false); - front_facing_child_of_back_facing_surface->SetDoubleSided(false); - back_facing_child_of_back_facing_surface->SetDoubleSided(false); - - // Everything draws content. - front_facing_child->SetIsDrawable(true); - back_facing_child->SetIsDrawable(true); - front_facing_surface->SetIsDrawable(true); - back_facing_surface->SetIsDrawable(true); - front_facing_child_of_front_facing_surface->SetIsDrawable(true); - back_facing_child_of_front_facing_surface->SetIsDrawable(true); - front_facing_child_of_back_facing_surface->SetIsDrawable(true); - back_facing_child_of_back_facing_surface->SetIsDrawable(true); - front_facing_mask->SetIsDrawable(true); - back_facing_mask->SetIsDrawable(true); - - gfx::Transform backface_matrix; - backface_matrix.Translate(50.0, 50.0); - backface_matrix.RotateAboutYAxis(180.0); - backface_matrix.Translate(-50.0, -50.0); - - root->SetBounds(gfx::Size(100, 100)); - front_facing_child->SetBounds(gfx::Size(100, 100)); - back_facing_child->SetBounds(gfx::Size(100, 100)); - front_facing_surface->SetBounds(gfx::Size(100, 100)); - back_facing_surface->SetBounds(gfx::Size(100, 100)); - front_facing_child_of_front_facing_surface->SetBounds(gfx::Size(100, 100)); - back_facing_child_of_front_facing_surface->SetBounds(gfx::Size(100, 100)); - front_facing_child_of_back_facing_surface->SetBounds(gfx::Size(100, 100)); - back_facing_child_of_back_facing_surface->SetBounds(gfx::Size(100, 100)); - front_facing_mask->SetBounds(gfx::Size(100, 100)); - back_facing_mask->SetBounds(gfx::Size(100, 100)); - - back_facing_child->SetTransform(backface_matrix); - back_facing_surface->SetTransform(backface_matrix); - back_facing_child_of_front_facing_surface->SetTransform(backface_matrix); - back_facing_child_of_back_facing_surface->SetTransform(backface_matrix); - - // Each surface creates its own new 3d rendering context (as defined by W3C - // spec). According to current W3C CSS gfx::Transforms spec, layers in a 3d - // rendering context should use the transform with respect to that context. - // This 3d rendering context occurs when (a) parent's transform style is flat - // and (b) the layer's transform style is preserve-3d. - front_facing_surface->SetShouldFlattenTransform(false); - front_facing_surface->Set3dSortingContextId(1); - back_facing_surface->SetShouldFlattenTransform(false); - back_facing_surface->Set3dSortingContextId(1); - front_facing_child_of_front_facing_surface->Set3dSortingContextId(1); - back_facing_child_of_front_facing_surface->Set3dSortingContextId(1); - front_facing_child_of_back_facing_surface->Set3dSortingContextId(1); - back_facing_child_of_back_facing_surface->Set3dSortingContextId(1); - - CommitAndActivate(); - - // Verify which render surfaces were created and used. - EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child), - GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child), - GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(front_facing_surface), - GetRenderSurfaceImpl(root)); - // We expect that a render surface was created but not used. - EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), - GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), - GetRenderSurfaceImpl(front_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child_of_front_facing_surface), - GetRenderSurfaceImpl(front_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child_of_front_facing_surface), - GetRenderSurfaceImpl(front_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child_of_back_facing_surface), - GetRenderSurfaceImpl(back_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child_of_back_facing_surface), - GetRenderSurfaceImpl(back_facing_surface)); - - EXPECT_EQ(4u, update_layer_impl_list().size()); - - EXPECT_TRUE(UpdateLayerImplListContains(front_facing_child->id())); - EXPECT_TRUE(UpdateLayerImplListContains(front_facing_surface->id())); - EXPECT_TRUE(UpdateLayerImplListContains(front_facing_mask->id())); - EXPECT_TRUE(UpdateLayerImplListContains( - front_facing_child_of_front_facing_surface->id())); -} - -// Verify that layers are appropriately culled when their back face is showing -// and they are not double sided, while animations are going on. -// Even layers that are animating get culled if their back face is showing and -// they are not double sided. -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - BackFaceCullingWithAnimatingTransforms) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto child = Layer::Create(); - root->AddChild(child); - auto animating_surface = Layer::Create(); - root->AddChild(animating_surface); - auto child_of_animating_surface = Layer::Create(); - animating_surface->AddChild(child_of_animating_surface); - auto animating_child = Layer::Create(); - root->AddChild(animating_child); - auto child2 = Layer::Create(); - root->AddChild(child2); - - // Nothing is double-sided - child->SetDoubleSided(false); - child2->SetDoubleSided(false); - animating_surface->SetDoubleSided(false); - child_of_animating_surface->SetDoubleSided(false); - animating_child->SetDoubleSided(false); - - // Everything draws content. - child->SetIsDrawable(true); - child2->SetIsDrawable(true); - animating_surface->SetIsDrawable(true); - child_of_animating_surface->SetIsDrawable(true); - animating_child->SetIsDrawable(true); - - gfx::Transform backface_matrix; - backface_matrix.Translate(50.0, 50.0); - backface_matrix.RotateAboutYAxis(180.0); - backface_matrix.Translate(-50.0, -50.0); - - host()->SetElementIdsForTesting(); - - // Animate the transform on the render surface. - AddAnimatedTransformToElementWithAnimation(animating_surface->element_id(), - timeline(), 10.0, 30, 0); - // This is just an animating layer, not a surface. - AddAnimatedTransformToElementWithAnimation(animating_child->element_id(), - timeline(), 10.0, 30, 0); - - root->SetBounds(gfx::Size(100, 100)); - child->SetBounds(gfx::Size(100, 100)); - child->SetTransform(backface_matrix); - animating_surface->SetBounds(gfx::Size(100, 100)); - animating_surface->SetTransform(backface_matrix); - animating_surface->SetForceRenderSurfaceForTesting(true); - child_of_animating_surface->SetBounds(gfx::Size(100, 100)); - child_of_animating_surface->SetTransform(backface_matrix); - animating_child->SetBounds(gfx::Size(100, 100)); - animating_child->SetTransform(backface_matrix); - child2->SetBounds(gfx::Size(100, 100)); - - CommitAndActivate(); - - EXPECT_EQ(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(root)); - EXPECT_TRUE(GetRenderSurfaceImpl(animating_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(child_of_animating_surface), - GetRenderSurfaceImpl(animating_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(animating_child), GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(child2), GetRenderSurfaceImpl(root)); - - EXPECT_EQ(1u, update_layer_impl_list().size()); - - // The back facing layers are culled from the layer list, and have an empty - // visible rect. - EXPECT_TRUE(UpdateLayerImplListContains(child2->id())); - EXPECT_TRUE(ImplOf(child)->visible_layer_rect().IsEmpty()); - EXPECT_TRUE(ImplOf(animating_surface)->visible_layer_rect().IsEmpty()); - EXPECT_TRUE( - ImplOf(child_of_animating_surface)->visible_layer_rect().IsEmpty()); - EXPECT_TRUE(ImplOf(animating_child)->visible_layer_rect().IsEmpty()); - - EXPECT_EQ(gfx::Rect(100, 100), ImplOf(child2)->visible_layer_rect()); -} - -// Verify the behavior of back-face culling for a render surface that is -// created when it flattens its subtree, and its parent has preserves-3d. -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - BackFaceCullingWithPreserves3dForFlatteningSurface) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto front_facing_surface = Layer::Create(); - root->AddChild(front_facing_surface); - auto back_facing_surface = Layer::Create(); - root->AddChild(back_facing_surface); - auto child1 = Layer::Create(); - front_facing_surface->AddChild(child1); - auto child2 = Layer::Create(); - back_facing_surface->AddChild(child2); - - // RenderSurfaces are not double-sided - front_facing_surface->SetDoubleSided(false); - back_facing_surface->SetDoubleSided(false); - - // Everything draws content. - front_facing_surface->SetIsDrawable(true); - back_facing_surface->SetIsDrawable(true); - child1->SetIsDrawable(true); - child2->SetIsDrawable(true); - - gfx::Transform backface_matrix; - backface_matrix.Translate(50.0, 50.0); - backface_matrix.RotateAboutYAxis(180.0); - backface_matrix.Translate(-50.0, -50.0); - - root->SetBounds(gfx::Size(100, 100)); - front_facing_surface->SetBounds(gfx::Size(100, 100)); - front_facing_surface->SetForceRenderSurfaceForTesting(true); - back_facing_surface->SetBounds(gfx::Size(100, 100)); - back_facing_surface->SetTransform(backface_matrix); - back_facing_surface->SetForceRenderSurfaceForTesting(true); - child1->SetBounds(gfx::Size(100, 100)); - child2->SetBounds(gfx::Size(100, 100)); - - front_facing_surface->Set3dSortingContextId(1); - back_facing_surface->Set3dSortingContextId(1); - - CommitAndActivate(); - - // Verify which render surfaces were created and used. - EXPECT_TRUE(GetRenderSurfaceImpl(front_facing_surface)); - - // We expect the render surface to have been created, but remain unused. - EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), - GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(child1), - GetRenderSurfaceImpl(front_facing_surface)); - EXPECT_EQ(GetRenderSurfaceImpl(child2), - GetRenderSurfaceImpl(back_facing_surface)); - - EXPECT_EQ(2u, update_layer_impl_list().size()); - EXPECT_TRUE(UpdateLayerImplListContains(front_facing_surface->id())); - EXPECT_TRUE(UpdateLayerImplListContains(child1->id())); -} - -using LayerTreeHostCommonScalingTest = LayerTreeHostCommonTest; +using DrawPropertiesScalingTest = DrawPropertiesTest; // Verify draw and screen space transforms of layers not in a surface. -TEST_F(LayerTreeHostCommonScalingTest, LayerTransformsInHighDPI) { +TEST_F(DrawPropertiesScalingTest, LayerTransformsInHighDPI) { LayerImpl* root = root_layer(); root->SetBounds(gfx::Size(100, 100)); root->SetDrawsContent(true); @@ -4061,13 +3126,13 @@ CopyProperties(root, child2); child2->SetOffsetToTransformParent(gfx::Vector2dF(2.f, 2.f)); - ExecuteCalculateDrawProperties(root, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_FLOAT_EQ(device_scale_factor, root->GetIdealContentsScale()); EXPECT_FLOAT_EQ(device_scale_factor, child->GetIdealContentsScale()); EXPECT_FLOAT_EQ(device_scale_factor, child2->GetIdealContentsScale()); - EXPECT_EQ(1u, render_surface_list_impl()->size()); + EXPECT_EQ(1u, GetRenderSurfaceList().size()); // Verify root transforms gfx::Transform expected_root_transform; @@ -4128,7 +3193,7 @@ } // Verify draw and screen space transforms of layers in a surface. -TEST_F(LayerTreeHostCommonScalingTest, SurfaceLayerTransformsInHighDPI) { +TEST_F(DrawPropertiesScalingTest, SurfaceLayerTransformsInHighDPI) { gfx::Transform perspective_matrix; perspective_matrix.ApplyPerspectiveDepth(2.0); gfx::Vector2dF perspective_surface_offset(2.f, 2.f); @@ -4174,15 +3239,14 @@ float device_scale_factor = 2.5f; float page_scale_factor = 3.f; - const gfx::Transform kDeviceTransform; - LayerTreeImpl::ViewportLayerIds viewport_ids; - viewport_ids.page_scale = page_scale->id(); - root->layer_tree_impl()->SetViewportLayersFromIds(viewport_ids); - root->layer_tree_impl()->SetPageScaleOnActiveTree(page_scale_factor); + LayerTreeHost::ViewportPropertyIds viewport_property_ids; + viewport_property_ids.page_scale_transform = + page_scale->transform_tree_index(); + host_impl()->active_tree()->set_viewport_property_ids(viewport_property_ids); + host_impl()->active_tree()->SetPageScaleOnActiveTree(page_scale_factor); - ExecuteCalculateDrawProperties(root, device_scale_factor, kDeviceTransform, - page_scale_factor, page_scale); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor, parent->GetIdealContentsScale()); @@ -4204,11 +3268,10 @@ gfx::Vector2dF target_space_transform_scales = MathUtil::ComputeTransform2dScaleComponents( scale_surface->draw_properties().target_space_transform, 0.f); - EXPECT_FLOAT_EQ(max_2d_scale, - std::max(target_space_transform_scales.x(), - target_space_transform_scales.y())); + EXPECT_FLOAT_EQ(max_2d_scale, std::max(target_space_transform_scales.x(), + target_space_transform_scales.y())); - EXPECT_EQ(3u, render_surface_list_impl()->size()); + EXPECT_EQ(3u, GetRenderSurfaceList().size()); gfx::Transform expected_parent_draw_transform; expected_parent_draw_transform.Scale(device_scale_factor * page_scale_factor, @@ -4238,7 +3301,7 @@ perspective_surface->DrawTransform()); } -TEST_F(LayerTreeHostCommonScalingTest, SmallIdealScale) { +TEST_F(DrawPropertiesScalingTest, SmallIdealScale) { gfx::Transform parent_scale_matrix; SkMScalar initial_parent_scale = 1.75; parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale); @@ -4263,7 +3326,6 @@ float device_scale_factor = 2.5f; float page_scale_factor = 0.01f; - const gfx::Transform kDeviceTransform; CopyProperties(root, page_scale); CreateTransformNode(page_scale).in_subtree_of_page_scale_layer = true; @@ -4272,8 +3334,13 @@ CopyProperties(parent, child_scale); CreateTransformNode(child_scale).local = child_scale_matrix; - ExecuteCalculateDrawProperties(root, device_scale_factor, kDeviceTransform, - page_scale_factor, page_scale); + LayerTreeHost::ViewportPropertyIds viewport_property_ids; + viewport_property_ids.page_scale_transform = + page_scale->transform_tree_index(); + host_impl()->active_tree()->set_viewport_property_ids(viewport_property_ids); + + host_impl()->active_tree()->SetPageScaleOnActiveTree(page_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); // The ideal scale is able to go below 1. float expected_ideal_scale = @@ -4287,7 +3354,7 @@ EXPECT_FLOAT_EQ(expected_ideal_scale, child_scale->GetIdealContentsScale()); } -TEST_F(LayerTreeHostCommonScalingTest, IdealScaleForAnimatingLayer) { +TEST_F(DrawPropertiesScalingTest, IdealScaleForAnimatingLayer) { gfx::Transform parent_scale_matrix; SkMScalar initial_parent_scale = 1.75; parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale); @@ -4312,7 +3379,7 @@ CopyProperties(parent, child_scale); CreateTransformNode(child_scale).local = child_scale_matrix; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_FLOAT_EQ(initial_parent_scale, parent->GetIdealContentsScale()); // Animating layers compute ideal scale in the same way as when @@ -4321,7 +3388,7 @@ child_scale->GetIdealContentsScale()); } -TEST_F(LayerTreeHostCommonTest, RenderSurfaceTransformsInHighDPI) { +TEST_F(DrawPropertiesTest, RenderSurfaceTransformsInHighDPI) { LayerImpl* parent = root_layer(); parent->SetBounds(gfx::Size(30, 30)); parent->SetDrawsContent(true); @@ -4346,11 +3413,11 @@ duplicate_child_non_owner->SetOffsetToTransformParent( child->offset_to_transform_parent()); - ExecuteCalculateDrawProperties(parent, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); // We should have two render surfaces. The root's render surface and child's // render surface (it needs one because of force_render_surface). - EXPECT_EQ(2u, render_surface_list_impl()->size()); + EXPECT_EQ(2u, GetRenderSurfaceList().size()); gfx::Transform expected_parent_transform; expected_parent_transform.Scale(device_scale_factor, device_scale_factor); @@ -4403,7 +3470,7 @@ GetRenderSurface(child)->screen_space_transform()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, RenderSurfaceTransformsInHighDPIAccurateScaleZeroPosition) { LayerImpl* parent = root_layer(); parent->SetBounds(gfx::Size(33, 31)); @@ -4418,11 +3485,11 @@ CopyProperties(parent, child); CreateEffectNode(child).render_surface_reason = RenderSurfaceReason::kTest; - ExecuteCalculateDrawProperties(parent, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); // We should have two render surfaces. The root's render surface and child's // render surface (it needs one because of force_render_surface). - EXPECT_EQ(2u, render_surface_list_impl()->size()); + EXPECT_EQ(2u, GetRenderSurfaceList().size()); EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), GetRenderSurface(child)->draw_transform()); @@ -4433,7 +3500,7 @@ } // Needs layer tree mode: mask layer. Not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, LayerSearch) { +TEST_F(DrawPropertiesTestWithLayerTree, LayerSearch) { scoped_refptr<Layer> root = Layer::Create(); scoped_refptr<Layer> child = Layer::Create(); scoped_refptr<Layer> grand_child = Layer::Create(); @@ -4454,7 +3521,7 @@ EXPECT_FALSE(host()->LayerById(nonexistent_id)); } -TEST_F(LayerTreeHostCommonTest, TransparentChildRenderSurfaceCreation) { +TEST_F(DrawPropertiesTest, TransparentChildRenderSurfaceCreation) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); LayerImpl* grand_child = AddLayer<LayerImpl>(); @@ -4468,11 +3535,11 @@ CreateEffectNode(child).opacity = 0.5f; CopyProperties(child, grand_child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(GetRenderSurface(child), GetRenderSurface(root)); } -TEST_F(LayerTreeHostCommonTest, OpacityAnimatingOnPendingTree) { +TEST_F(DrawPropertiesTest, OpacityAnimatingOnPendingTree) { host_impl()->CreatePendingTree(); LayerImpl* root = EnsureRootLayerInPendingTree(); root->SetBounds(gfx::Size(100, 100)); @@ -4490,17 +3557,17 @@ AddOpacityTransitionToElementWithAnimation( child->element_id(), timeline_impl(), 10.0, 0.0f, 1.0f, false); - ExecuteCalculateDrawProperties(root); + UpdatePendingTreeDrawProperties(); // We should have one render surface and two layers. The child // layer should be included even though it is transparent. - ASSERT_EQ(1u, render_surface_list_impl()->size()); + ASSERT_EQ(1u, host_impl()->pending_tree()->GetRenderSurfaceList().size()); ASSERT_EQ(2, GetRenderSurface(root)->num_contributors()); // If the root itself is hidden, the child should not be drawn even if it has // an animating opacity. SetOpacity(root, 0.0f); - ExecuteCalculateDrawProperties(root); + UpdatePendingTreeDrawProperties(); EXPECT_FALSE(GetEffectNode(child)->is_drawn); @@ -4508,7 +3575,7 @@ // it has animating opacity even if it has opacity 0. SetOpacity(root, 1.0f); SetOpacity(child, 0.0f); - ExecuteCalculateDrawProperties(root); + UpdatePendingTreeDrawProperties(); EXPECT_TRUE(GetEffectNode(child)->is_drawn); EXPECT_TRUE(GetPropertyTrees(root)->effect_tree.ContributesToDrawnSurface( @@ -4518,13 +3585,12 @@ // be drawn. host_impl()->ActivateSyncTree(); LayerTreeImpl* active_tree = host_impl()->active_tree(); - LayerImpl* active_root = active_tree->LayerById(root->id()); LayerImpl* active_child = active_tree->LayerById(child->id()); EffectTree& active_effect_tree = active_tree->property_trees()->effect_tree; EXPECT_TRUE(active_effect_tree.needs_update()); - ExecuteCalculateDrawProperties(active_root); + UpdateActiveTreeDrawProperties(); EXPECT_FALSE(GetEffectNode(active_child)->is_drawn); EXPECT_FALSE(active_effect_tree.ContributesToDrawnSurface( @@ -4532,10 +3598,10 @@ } using LCDTextTestParam = std::tuple<bool, bool>; -class LCDTextTest : public LayerTreeHostCommonTestBase, +class LCDTextTest : public DrawPropertiesTestBase, public testing::TestWithParam<LCDTextTestParam> { public: - LCDTextTest() : LayerTreeHostCommonTestBase(LCDTextTestLayerTreeSettings()) {} + LCDTextTest() : DrawPropertiesTestBase(LCDTextTestLayerTreeSettings()) {} protected: LayerTreeSettings LCDTextTestLayerTreeSettings() { @@ -4585,7 +3651,7 @@ bool expect_not_lcd_text = layers_always_allowed_lcd_text_; // Case 1: Identity transform. - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); @@ -4595,7 +3661,7 @@ integral_translation.Translate(1.0, 2.0); SetTransform(child_, integral_translation); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); @@ -4604,7 +3670,7 @@ gfx::Transform non_integral_translation; non_integral_translation.Translate(1.5, 2.5); SetTransform(child_, non_integral_translation); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, grand_child_->CanUseLCDText()); @@ -4613,7 +3679,7 @@ gfx::Transform rotation; rotation.Rotate(10.0); SetTransform(child_, rotation); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, grand_child_->CanUseLCDText()); @@ -4622,7 +3688,7 @@ gfx::Transform scale; scale.Scale(2.0, 2.0); SetTransform(child_, scale); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, grand_child_->CanUseLCDText()); @@ -4631,7 +3697,7 @@ gfx::Transform skew; skew.Skew(10.0, 0.0); SetTransform(child_, skew); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, grand_child_->CanUseLCDText()); @@ -4639,7 +3705,7 @@ // Case 7: Translucent. SetTransform(child_, gfx::Transform()); SetOpacity(child_, 0.5f); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, grand_child_->CanUseLCDText()); @@ -4647,28 +3713,28 @@ // Case 8: Sanity check: restore transform and opacity. SetTransform(child_, gfx::Transform()); SetOpacity(child_, 1.f); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); // Case 9: Non-opaque content. child_->SetContentsOpaque(false); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); // Case 10: Sanity check: restore content opaqueness. child_->SetContentsOpaque(true); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); // Case 11: will-change: transform child_->SetHasWillChangeTransformHint(true); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); @@ -4679,7 +3745,7 @@ bool expect_not_lcd_text = layers_always_allowed_lcd_text_; // Sanity check: Make sure can_use_lcd_text_ is set on each node. - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); @@ -4688,7 +3754,7 @@ SetOpacity(child_, 0.9f); AddOpacityTransitionToElementWithAnimation(child_->element_id(), timeline(), 10.0, 0.9f, 0.1f, false); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); // Text LCD should be adjusted while animation is active. EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); @@ -4700,7 +3766,7 @@ bool expect_not_lcd_text = layers_always_allowed_lcd_text_; // Sanity check: Make sure can_use_lcd_text_ is set on each node. - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); @@ -4709,19 +3775,19 @@ child_->SetContentsOpaque(false); AddOpacityTransitionToElementWithAnimation(child_->element_id(), timeline(), 10.0, 0.9f, 0.1f, false); - ExecuteCalculateDrawProperties(root_); + UpdateActiveTreeDrawProperties(); // LCD text should be disabled for non-opaque layers even during animations. EXPECT_EQ(expect_lcd_text, root_->CanUseLCDText()); EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); } -INSTANTIATE_TEST_SUITE_P(LayerTreeHostCommonTest, +INSTANTIATE_TEST_SUITE_P(DrawPropertiesTest, LCDTextTest, testing::Combine(testing::Bool(), testing::Bool())); // Needs layer tree mode: hide_layer_and_subtree. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SubtreeHidden_SingleLayerImpl) { +TEST_F(DrawPropertiesTestWithLayerTree, SubtreeHidden_SingleLayerImpl) { auto root = Layer::Create(); root->SetBounds(gfx::Size(50, 50)); root->SetIsDrawable(true); @@ -4745,7 +3811,7 @@ // We should have one render surface and two layers. The grand child has // hidden itself. - ASSERT_EQ(1u, render_surface_list_impl()->size()); + ASSERT_EQ(1u, GetRenderSurfaceList().size()); ASSERT_EQ(2, GetRenderSurfaceImpl(root)->num_contributors()); EXPECT_TRUE(ImplOf(root)->contributes_to_drawn_render_surface()); EXPECT_TRUE(ImplOf(child)->contributes_to_drawn_render_surface()); @@ -4753,7 +3819,7 @@ } // Needs layer tree mode: hide_layer_and_subtree. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SubtreeHidden_TwoLayersImpl) { +TEST_F(DrawPropertiesTestWithLayerTree, SubtreeHidden_TwoLayersImpl) { auto root = Layer::Create(); root->SetBounds(gfx::Size(50, 50)); root->SetIsDrawable(true); @@ -4775,7 +3841,7 @@ // We should have one render surface and one layer. The child has // hidden itself and the grand child. - ASSERT_EQ(1u, render_surface_list_impl()->size()); + ASSERT_EQ(1u, GetRenderSurfaceList().size()); ASSERT_EQ(1, GetRenderSurfaceImpl(root)->num_contributors()); EXPECT_TRUE(ImplOf(root)->contributes_to_drawn_render_surface()); EXPECT_FALSE(ImplOf(child)->contributes_to_drawn_render_surface()); @@ -4783,7 +3849,7 @@ } // Needs layer tree mode: mask layer, hide_layer_and_subtree and copy request. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SubtreeHiddenWithCopyRequest) { +TEST_F(DrawPropertiesTestWithLayerTree, SubtreeHiddenWithCopyRequest) { auto root = Layer::Create(); root->SetBounds(gfx::Size(50, 50)); root->SetIsDrawable(true); @@ -4849,15 +3915,15 @@ // We should have four render surfaces, one for the root, one for the grand // parent since it has opacity and two drawing descendants, one for the parent // since it owns a surface, and one for the copy_layer. - ASSERT_EQ(4u, render_surface_list_impl()->size()); + ASSERT_EQ(4u, GetRenderSurfaceList().size()); EXPECT_EQ(static_cast<uint64_t>(root->id()), - render_surface_list_impl()->at(0)->id()); + GetRenderSurfaceList().at(0)->id()); EXPECT_EQ(static_cast<uint64_t>(copy_grand_parent->id()), - render_surface_list_impl()->at(1)->id()); + GetRenderSurfaceList().at(1)->id()); EXPECT_EQ(static_cast<uint64_t>(copy_parent->id()), - render_surface_list_impl()->at(2)->id()); + GetRenderSurfaceList().at(2)->id()); EXPECT_EQ(static_cast<uint64_t>(copy_layer->id()), - render_surface_list_impl()->at(3)->id()); + GetRenderSurfaceList().at(3)->id()); // The root render surface should have 2 contributing layers. EXPECT_EQ(2, GetRenderSurfaceImpl(root)->num_contributors()); @@ -4897,7 +3963,7 @@ } // Needs layer tree mode: copy request. -TEST_F(LayerTreeHostCommonTestWithLayerTree, ClippedOutCopyRequest) { +TEST_F(DrawPropertiesTestWithLayerTree, ClippedOutCopyRequest) { auto root = Layer::Create(); root->SetBounds(gfx::Size(50, 50)); root->SetIsDrawable(true); @@ -4927,9 +3993,9 @@ CommitAndActivate(); // We should have two render surface, as the others are clipped out. - ASSERT_EQ(2u, render_surface_list_impl()->size()); + ASSERT_EQ(2u, GetRenderSurfaceList().size()); EXPECT_EQ(static_cast<uint64_t>(root->id()), - render_surface_list_impl()->at(0)->id()); + GetRenderSurfaceList().at(0)->id()); // The root render surface should have only 2 contributing layer, since the // other layers are clipped away. @@ -4938,7 +4004,7 @@ } // Needs layer tree mode: copy request. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SingularTransformAndCopyRequests) { +TEST_F(DrawPropertiesTestWithLayerTree, SingularTransformAndCopyRequests) { auto root = Layer::Create(); host()->SetRootLayer(root); root->SetBounds(gfx::Size(50, 50)); @@ -4989,7 +4055,7 @@ } // Needs layer tree mode: copy request. -TEST_F(LayerTreeHostCommonTestWithLayerTree, VisibleRectInNonRootCopyRequest) { +TEST_F(DrawPropertiesTestWithLayerTree, VisibleRectInNonRootCopyRequest) { auto root = Layer::Create(); host()->SetRootLayer(root); root->SetBounds(gfx::Size(50, 50)); @@ -5054,12 +4120,12 @@ EXPECT_EQ(gfx::Rect(5, 5), ImplOf(copy_surface)->visible_layer_rect()); // Case 3: When there is device scale factor. - float device_scale_factor = 2.f; + SetDeviceScaleAndUpdateViewportRect(host(), 2.f); copy_layer->RequestCopyOfOutput( viz::CopyOutputRequest::CreateStubForTesting()); ASSERT_TRUE(copy_layer->HasCopyRequest()); - CommitAndActivate(device_scale_factor); + CommitAndActivate(); ASSERT_FALSE(copy_layer->HasCopyRequest()); EXPECT_EQ(gfx::Rect(50, 50), ImplOf(copy_layer)->visible_layer_rect()); @@ -5069,7 +4135,7 @@ EXPECT_EQ(gfx::Rect(5, 5), ImplOf(copy_surface)->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, TransformedClipParent) { +TEST_F(DrawPropertiesTest, TransformedClipParent) { // Ensure that a transform between the layer and its render surface is not a // problem. Constructs the following layer tree. // @@ -5114,7 +4180,7 @@ CopyProperties(intervening, clip_child); clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_TRUE(GetRenderSurface(root)); ASSERT_TRUE(GetRenderSurface(render_surface)); @@ -5138,7 +4204,7 @@ GetRenderSurface(render_surface)->content_rect())); } -TEST_F(LayerTreeHostCommonTest, ClipParentWithInterveningRenderSurface) { +TEST_F(DrawPropertiesTest, ClipParentWithInterveningRenderSurface) { // Ensure that intervening render surfaces are not a problem in the basic // case. In the following tree, both render surfaces should be resized to // accomodate for the clip child, despite an intervening clip. @@ -5190,7 +4256,7 @@ CopyProperties(render_surface2, clip_child); clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(GetRenderSurface(root)); EXPECT_TRUE(GetRenderSurface(render_surface1)); @@ -5232,7 +4298,7 @@ EXPECT_FALSE(clip_child->is_clipped()); } -TEST_F(LayerTreeHostCommonTest, ClipParentScrolledInterveningLayer) { +TEST_F(DrawPropertiesTest, ClipParentScrolledInterveningLayer) { // Ensure that intervening render surfaces are not a problem, even if there // is a scroll involved. Note, we do _not_ have to consider any other sort // of transform. @@ -5289,7 +4355,7 @@ clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); SetScrollOffset(intervening, gfx::ScrollOffset(3, 3)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(GetRenderSurface(root)); EXPECT_TRUE(GetRenderSurface(render_surface1)); @@ -5330,7 +4396,7 @@ EXPECT_FALSE(clip_child->is_clipped()); } -TEST_F(LayerTreeHostCommonTest, DescendantsOfClipChildren) { +TEST_F(DrawPropertiesTest, DescendantsOfClipChildren) { // Ensures that descendants of the clip child inherit the correct clip. // // Virtual layer tree: @@ -5365,7 +4431,7 @@ child->SetBounds(gfx::Size(60, 60)); CopyProperties(clip_child, child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(GetRenderSurface(root)); @@ -5377,7 +4443,7 @@ EXPECT_TRUE(child->is_clipped()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, SurfacesShouldBeUnaffectedByNonDescendantClipChildren) { // Ensures that non-descendant clip children in the tree do not affect // render surfaces. @@ -5428,7 +4494,7 @@ clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); CopyProperties(render_surface2, non_clip_child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(GetRenderSurface(root)); EXPECT_TRUE(GetRenderSurface(render_surface1)); @@ -5459,170 +4525,7 @@ GetRenderSurface(render_surface2)->content_rect()); } -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - CreateRenderSurfaceWhenFlattenInsideRenderingContext) { - // Verifies that Render Surfaces are created at the edge of rendering context. - - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto child1 = Layer::Create(); - root->AddChild(child1); - auto child2 = Layer::Create(); - child1->AddChild(child2); - auto child3 = Layer::Create(); - child2->AddChild(child3); - root->SetIsDrawable(true); - - gfx::Size bounds(100, 100); - - root->SetBounds(bounds); - child1->SetBounds(bounds); - child1->SetIsDrawable(true); - child1->SetShouldFlattenTransform(false); - child1->Set3dSortingContextId(1); - child2->SetBounds(bounds); - child2->SetIsDrawable(true); - child2->Set3dSortingContextId(1); - child3->SetBounds(bounds); - child3->SetIsDrawable(true); - child3->Set3dSortingContextId(1); - - CommitAndActivate(); - - // Verify which render surfaces were created. - EXPECT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(child1), GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(child2), GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(child3), GetRenderSurfaceImpl(child2)); -} - -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - DoNotIncludeBackfaceInvisibleSurfaces) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto back_facing = Layer::Create(); - root->AddChild(back_facing); - - auto render_surface1 = Layer::Create(); - back_facing->AddChild(render_surface1); - auto child1 = Layer::Create(); - render_surface1->AddChild(child1); - - auto flattener = Layer::Create(); - back_facing->AddChild(flattener); - auto render_surface2 = Layer::Create(); - flattener->AddChild(render_surface2); - auto child2 = Layer::Create(); - render_surface2->AddChild(child2); - - child1->SetIsDrawable(true); - child2->SetIsDrawable(true); - - root->SetBounds(gfx::Size(50, 50)); - back_facing->SetBounds(gfx::Size(50, 50)); - back_facing->SetShouldFlattenTransform(false); - - render_surface1->SetBounds(gfx::Size(30, 30)); - render_surface1->SetShouldFlattenTransform(false); - render_surface1->SetForceRenderSurfaceForTesting(true); - render_surface1->SetDoubleSided(false); - child1->SetBounds(gfx::Size(20, 20)); - - flattener->SetBounds(gfx::Size(30, 30)); - render_surface2->SetBounds(gfx::Size(30, 30)); - render_surface2->SetShouldFlattenTransform(false); - render_surface2->SetForceRenderSurfaceForTesting(true); - render_surface2->SetDoubleSided(false); - child2->SetBounds(gfx::Size(20, 20)); - - CommitAndActivate(); - - EXPECT_EQ(3u, render_surface_list_impl()->size()); - EXPECT_EQ(2, render_surface_list_impl()->at(0)->num_contributors()); - EXPECT_EQ(1, render_surface_list_impl()->at(1)->num_contributors()); - - gfx::Transform rotation_transform; - rotation_transform.RotateAboutXAxis(180.0); - back_facing->SetTransform(rotation_transform); - - CommitAndActivate(); - - // render_surface1 is in the same 3d rendering context as back_facing and is - // not double sided, so it should not be in RSLL. render_surface2 is also not - // double-sided, but will still be in RSLL as it's in a different 3d rendering - // context. - EXPECT_EQ(2u, render_surface_list_impl()->size()); - EXPECT_EQ(1, render_surface_list_impl()->at(0)->num_contributors()); -} - -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - DoNotIncludeBackfaceInvisibleLayers) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto child = Layer::Create(); - root->AddChild(child); - auto grand_child = Layer::Create(); - child->AddChild(grand_child); - - root->SetBounds(gfx::Size(50, 50)); - root->SetShouldFlattenTransform(false); - child->SetBounds(gfx::Size(30, 30)); - child->SetDoubleSided(false); - child->SetShouldFlattenTransform(false); - grand_child->SetBounds(gfx::Size(20, 20)); - grand_child->SetIsDrawable(true); - grand_child->SetUseParentBackfaceVisibility(true); - grand_child->SetShouldFlattenTransform(false); - - CommitAndActivate(); - - EXPECT_EQ(1u, render_surface_list_impl()->size()); - EXPECT_TRUE(ImplOf(grand_child)->contributes_to_drawn_render_surface()); - - // A ll layers with invisible backfgaces should be checked. - EXPECT_FALSE(ImplOf(root)->should_check_backface_visibility()); - EXPECT_TRUE(ImplOf(child)->should_check_backface_visibility()); - EXPECT_TRUE(ImplOf(grand_child)->should_check_backface_visibility()); - - gfx::Transform rotation_transform; - rotation_transform.RotateAboutXAxis(180.0); - - child->SetTransform(rotation_transform); - child->Set3dSortingContextId(1); - grand_child->Set3dSortingContextId(1); - - CommitAndActivate(); - - EXPECT_EQ(1u, render_surface_list_impl()->size()); - EXPECT_EQ(0, render_surface_list_impl()->at(0)->num_contributors()); - - // We should check for backface visibilty of child as it has a rotation - // transform. We should also check for grand_child as it uses the backface - // visibility of its parent. - EXPECT_FALSE(ImplOf(root)->should_check_backface_visibility()); - EXPECT_TRUE(ImplOf(child)->should_check_backface_visibility()); - EXPECT_TRUE(ImplOf(grand_child)->should_check_backface_visibility()); - - grand_child->SetUseParentBackfaceVisibility(false); - grand_child->SetDoubleSided(false); - - CommitAndActivate(); - - EXPECT_EQ(1u, render_surface_list_impl()->size()); - EXPECT_EQ(0, render_surface_list_impl()->at(0)->num_contributors()); - - // We should check the backface visibility of child as it has a rotation - // transform and for grand_child as it is in a 3d rendering context and not - // the root of it. - EXPECT_FALSE(ImplOf(root)->should_check_backface_visibility()); - EXPECT_TRUE(ImplOf(child)->should_check_backface_visibility()); - EXPECT_TRUE(ImplOf(grand_child)->should_check_backface_visibility()); -} - -TEST_F(LayerTreeHostCommonTest, TransformAnimationUpdatesBackfaceVisibility) { +TEST_F(DrawPropertiesTest, TransformAnimationUpdatesBackfaceVisibility) { LayerImpl* root = root_layer(); LayerImpl* back_facing = AddLayer<LayerImpl>(); LayerImpl* render_surface1 = AddLayer<LayerImpl>(); @@ -5659,7 +4562,7 @@ RenderSurfaceReason::kTest; render_surface2_effect_node.double_sided = false; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(GetEffectNode(render_surface1)->hidden_by_backface_visibility); EXPECT_TRUE(GetEffectNode(render_surface2)->hidden_by_backface_visibility); @@ -5668,18 +4571,18 @@ gfx::Transform()); root->layer_tree_impl()->SetTransformMutated(render_surface2->element_id(), rotate_about_y); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_FALSE(GetEffectNode(render_surface1)->hidden_by_backface_visibility); EXPECT_TRUE(GetEffectNode(render_surface2)->hidden_by_backface_visibility); root->layer_tree_impl()->SetTransformMutated(render_surface1->element_id(), rotate_about_y); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(GetEffectNode(render_surface1)->hidden_by_backface_visibility); EXPECT_TRUE(GetEffectNode(render_surface2)->hidden_by_backface_visibility); } -TEST_F(LayerTreeHostCommonTest, ScrollChildAndScrollParentDifferentTargets) { +TEST_F(DrawPropertiesTest, ScrollChildAndScrollParentDifferentTargets) { // Tests the computation of draw transform for the scroll child when its // render surface is different from its scroll parent's render surface. LayerImpl* root = root_layer(); @@ -5714,18 +4617,17 @@ scroll_child->SetOffsetToTransformParent(gfx::Vector2dF(-10, -10)); float device_scale_factor = 1.5f; - ExecuteCalculateDrawProperties(root, device_scale_factor); - + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_EQ(scroll_child->effect_tree_index(), scroll_child_target->effect_tree_index()); EXPECT_EQ(scroll_child->visible_layer_rect(), gfx::Rect(10, 10, 40, 40)); EXPECT_EQ(scroll_child->clip_rect(), gfx::Rect(15, 15, 75, 75)); gfx::Transform scale; - scale.Scale(1.5f, 1.5f); + scale.Scale(device_scale_factor, device_scale_factor); EXPECT_TRANSFORMATION_MATRIX_EQ(scroll_child->DrawTransform(), scale); } -TEST_F(LayerTreeHostCommonTest, SingularTransformSubtreesDoNotDraw) { +TEST_F(DrawPropertiesTest, SingularTransformSubtreesDoNotDraw) { LayerImpl* root = root_layer(); LayerImpl* parent = AddLayer<LayerImpl>(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -5744,29 +4646,29 @@ CreateTransformNode(child).sorting_context_id = 1; CreateEffectNode(child).render_surface_reason = RenderSurfaceReason::kTest; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); - EXPECT_EQ(3u, render_surface_list_impl()->size()); + EXPECT_EQ(3u, GetRenderSurfaceList().size()); gfx::Transform singular_transform; - singular_transform.Scale3d( - SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0)); + singular_transform.Scale3d(SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), + SkDoubleToMScalar(0.0)); SetTransform(child, singular_transform); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); - EXPECT_EQ(2u, render_surface_list_impl()->size()); + EXPECT_EQ(2u, GetRenderSurfaceList().size()); // Ensure that the entire subtree under a layer with singular transform does // not get rendered. SetTransform(parent, singular_transform); SetTransform(child, gfx::Transform()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); - EXPECT_EQ(1u, render_surface_list_impl()->size()); + EXPECT_EQ(1u, GetRenderSurfaceList().size()); } -TEST_F(LayerTreeHostCommonTest, ScrollSnapping) { +TEST_F(DrawPropertiesTest, ScrollSnapping) { // This test verifies that a scrolling layer gets scroll offset snapped to // integer coordinates. // @@ -5799,7 +4701,7 @@ { gfx::Vector2dF scroll_delta(3.0, 5.0); SetScrollOffsetDelta(scroller, scroll_delta); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR_EQ( scroller->draw_properties().screen_space_transform.To2dTranslation(), @@ -5810,7 +4712,7 @@ { gfx::Vector2dF scroll_delta(4.1f, 8.1f); SetScrollOffsetDelta(scroller, scroll_delta); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); gfx::Vector2dF rounded_scroll_delta(4.f, 8.f); EXPECT_VECTOR_EQ( @@ -5819,8 +4721,7 @@ } } -TEST_F(LayerTreeHostCommonTest, - ScrollSnappingWithAnimatedScreenSpaceTransform) { +TEST_F(DrawPropertiesTest, ScrollSnappingWithAnimatedScreenSpaceTransform) { // This test verifies that a scrolling layer whose screen space transform is // animating doesn't get snapped to integer coordinates. // @@ -5875,14 +4776,14 @@ gfx::Vector2dF scroll_delta(5.f, 9.f); SetScrollOffsetDelta(scroller, scroll_delta); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); gfx::Vector2dF expected_draw_transform_translation(-7.5f, -13.5f); EXPECT_VECTOR2DF_EQ(expected_draw_transform_translation, scroller->DrawTransform().To2dTranslation()); } -TEST_F(LayerTreeHostCommonTest, ScrollSnappingWithScrollChild) { +TEST_F(DrawPropertiesTest, ScrollSnappingWithScrollChild) { // This test verifies that a scrolling child of a scrolling layer doesn't get // snapped to integer coordinates. // @@ -5919,7 +4820,7 @@ gfx::Vector2dF scroll_delta(5.f, 9.f); SetScrollOffsetDelta(scroller, scroll_delta); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); gfx::Vector2dF expected_scroller_screen_space_transform_translation(5.f, 1.f); EXPECT_VECTOR2DF_EQ(expected_scroller_screen_space_transform_translation, @@ -5932,7 +4833,7 @@ scroll_child->ScreenSpaceTransform()); } -class LayerTreeHostCommonStickyPositionTest : public LayerTreeHostCommonTest { +class DrawPropertiesStickyPositionTest : public DrawPropertiesTest { protected: // Setup layers and property trees. // Virtual layer hierarchy: @@ -5979,11 +4880,11 @@ } void CommitAndUpdateImplPointers() { - ExecuteCalculateDrawProperties(root_.get()); - host()->host_impl()->CreatePendingTree(); + UpdateMainDrawProperties(); + host_impl()->CreatePendingTree(); host()->CommitAndCreatePendingTree(); - host()->host_impl()->ActivateSyncTree(); - LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); + host_impl()->ActivateSyncTree(); + LayerTreeImpl* layer_tree_impl = host_impl()->active_tree(); root_impl_ = layer_tree_impl->LayerById(root_->id()); scroller_impl_ = layer_tree_impl->LayerById(scroller_->id()); sticky_pos_impl_ = layer_tree_impl->LayerById(sticky_pos_->id()); @@ -6003,7 +4904,7 @@ LayerImpl* sticky_pos_impl_; }; -TEST_F(LayerTreeHostCommonStickyPositionTest, StickyPositionTop) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionTop) { CreateTree(); SetPostTranslation(sticky_pos_.get(), gfx::Vector2dF(10, 20)); @@ -6025,19 +4926,19 @@ // we haven't gotten to the initial sticky item location yet. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(5.f, 5.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(5.f, 15.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // Scroll past the sticking point, the Y coordinate should now be clamped. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(15.f, 15.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(-5.f, 10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(15.f, 25.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(-5.f, 10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6045,13 +4946,13 @@ // Scroll past the end of the sticky container (note: this element does not // have its own layer as it does not need to be composited). SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(15.f, 50.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(-5.f, -10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); } -TEST_F(LayerTreeHostCommonStickyPositionTest, StickyPositionSubpixelScroll) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionSubpixelScroll) { CreateTree(); SetPostTranslation(sticky_pos_.get(), gfx::Vector2dF(0, 200)); @@ -6068,13 +4969,13 @@ SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 0.8f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 80.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); } -TEST_F(LayerTreeHostCommonStickyPositionTest, StickyPositionBottom) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionBottom) { CreateTree(); SetPostTranslation(sticky_pos_.get(), gfx::Vector2dF(0, 150)); @@ -6095,7 +4996,7 @@ sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 5.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 95.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6103,25 +5004,25 @@ // Once we get past the top of the container it moves to be aligned 10px // up from the the bottom of the scroller. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 25.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 80.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 30.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 80.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // Once we scroll past its initial location, it sticks there. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 150.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); } -TEST_F(LayerTreeHostCommonStickyPositionTest, +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionBottomOuterViewportDelta) { CreateTree(); @@ -6152,7 +5053,7 @@ GetPropertyTrees(scroller_impl_) ->SetOuterViewportContainerBoundsDelta(gfx::Vector2dF(0.f, -10.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 70.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6160,7 +5061,7 @@ // On hiding more of the toolbar the sticky element starts to stick. GetPropertyTrees(scroller_impl_) ->SetOuterViewportContainerBoundsDelta(gfx::Vector2dF(0.f, -20.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); // On hiding more the sticky element stops moving as it has reached its // limit. @@ -6170,14 +5071,14 @@ GetPropertyTrees(scroller_impl_) ->SetOuterViewportContainerBoundsDelta(gfx::Vector2dF(0.f, -30.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 60.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); } -TEST_F(LayerTreeHostCommonStickyPositionTest, StickyPositionLeftRight) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionLeftRight) { CreateTree(); SetPostTranslation(sticky_pos_.get(), gfx::Vector2dF(145, 0)); @@ -6196,12 +5097,12 @@ // Initially the sticky element is moved the leftmost side of the container. - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(100.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(5.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(95.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6209,12 +5110,12 @@ // Once we get past the left side of the container it moves to be aligned 10px // up from the the right of the scroller. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(25.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(80.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(30.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(80.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6222,36 +5123,36 @@ // When we get to the sticky element's original position we stop sticking // to the right. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(95.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(50.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(105.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(40.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // The element starts sticking to the left once we scroll far enough. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(150.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(10.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(155.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(10.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // Finally it stops sticking when it hits the right side of the container. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(190.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(195.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(-5.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6260,7 +5161,7 @@ // This test ensures that the compositor sticky position code correctly accounts // for the element having been given a position from the main thread sticky // position code. -TEST_F(LayerTreeHostCommonStickyPositionTest, StickyPositionMainThreadUpdates) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionMainThreadUpdates) { CreateTree(); SetPostTranslation(sticky_pos_.get(), gfx::Vector2dF(10, 20)); @@ -6282,14 +5183,14 @@ // we haven't gotten to the initial sticky item location yet. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(5.f, 5.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(5.f, 15.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // Scroll past the sticking point, the Y coordinate should now be clamped. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(15.f, 15.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(-5.f, 10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6307,14 +5208,14 @@ // (0, 0) because we have synced a scroll offset of (15, 15) from the main // thread. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(-5.f, 10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // And if we scroll a little further it remains there. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 10.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(-5.f, 10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6323,8 +5224,7 @@ // This tests the main thread updates with a composited sticky container. In // this case the position received from main is relative to the container but // the constraint rects are relative to the ancestor scroller. -TEST_F(LayerTreeHostCommonStickyPositionTest, - StickyPositionCompositedContainer) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionCompositedContainer) { CreateRootAndScroller(); scoped_refptr<Layer> sticky_container = Layer::Create(); @@ -6354,14 +5254,14 @@ // Scroll less than sticking point, sticky element should move with scroll as // we haven't gotten to the initial sticky item location yet. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 5.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(20.f, 25.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // Scroll past the sticking point, the Y coordinate should now be clamped. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 25.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(20.f, 10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6378,28 +5278,28 @@ // (0, 0) because we have synced a scroll offset of (0, 25) from the main // thread. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 0.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(20.f, 10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // And if we scroll a little further it remains there. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 5.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(20.f, 10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // And hits the bottom of the container. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 10.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(20.f, 5.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); } // A transform on a sticky element should not affect its sticky position. -TEST_F(LayerTreeHostCommonStickyPositionTest, StickyPositionScaledStickyBox) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionScaledStickyBox) { CreateTree(); SetPostTranslation(sticky_pos_.get(), gfx::Vector2dF(0, 20)); @@ -6425,7 +5325,7 @@ // we haven't gotten to the initial sticky item location yet. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 15.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 5.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6433,19 +5333,19 @@ // Scroll past the sticking point, the box is positioned at the scroller // edge. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 25.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 30.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 0.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // Scroll past the end of the sticky container. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 50.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, -10.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6453,7 +5353,7 @@ // Tests that a transform does not affect the sticking points. The sticky // element will however move relative to the viewport due to its transform. -TEST_F(LayerTreeHostCommonStickyPositionTest, StickyPositionScaledContainer) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionScaledContainer) { CreateRootAndScroller(); scoped_refptr<Layer> sticky_container = Layer::Create(); @@ -6481,7 +5381,7 @@ // Scroll less than sticking point, sticky element should move with scroll as // we haven't gotten to the initial sticky item location yet. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 15.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 25.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); @@ -6489,25 +5389,25 @@ // Scroll past the sticking point, the box is positioned at the scroller // edge but is also scaled by its container so it begins to move down. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 25.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 25.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 30.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 30.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); // Scroll past the end of the sticky container. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 50.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 30.f), sticky_pos_impl_->ScreenSpaceTransform().To2dTranslation()); } -TEST_F(LayerTreeHostCommonStickyPositionTest, StickyPositionNested) { +TEST_F(DrawPropertiesStickyPositionTest, StickyPositionNested) { CreateTree(); SetPostTranslation(sticky_pos_.get(), gfx::Vector2dF(0, 50)); @@ -6547,7 +5447,7 @@ // Scroll less than the sticking point. Both sticky elements should move with // scroll as we haven't gotten to the sticky item locations yet. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 5.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 45.f), outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); @@ -6558,7 +5458,7 @@ // Scroll such that the inner sticky should stick, but the outer one should // keep going as it hasn't reached its position yet. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 30.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 20.f), outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); @@ -6568,7 +5468,7 @@ // Keep going, both should stick. SetScrollOffsetDelta(scroller_impl_, gfx::Vector2dF(0.f, 100.f)); - ExecuteCalculateDrawProperties(root_impl_); + UpdateActiveTreeDrawProperties(); EXPECT_VECTOR2DF_EQ( gfx::Vector2dF(0.f, 10.f), outer_sticky_impl->ScreenSpaceTransform().To2dTranslation()); @@ -6596,7 +5496,7 @@ } }; -TEST_F(LayerTreeHostCommonTest, MaximumAnimationScaleFactor) { +TEST_F(DrawPropertiesTest, MaximumAnimationScaleFactor) { LayerImpl* root = root_layer(); auto* grand_parent = AddLayer<AnimationScaleFactorTrackingLayerImpl>(); auto* parent = AddLayer<AnimationScaleFactorTrackingLayerImpl>(); @@ -6619,7 +5519,7 @@ CopyProperties(child, grand_child); CreateTransformNode(grand_child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // No layers have animations. EXPECT_EQ(kNotScaled, GetMaximumAnimationScale(grand_parent)); @@ -6678,7 +5578,7 @@ AddAnimatedTransformToAnimation(child_animation.get(), 1.0, TransformOperations(), scale); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // Only |child| has a scale-affecting animation. EXPECT_EQ(kNotScaled, GetMaximumAnimationScale(grand_parent)); @@ -6693,7 +5593,7 @@ AddAnimatedTransformToAnimation(grand_parent_animation.get(), 1.0, TransformOperations(), scale); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // |grand_parent| and |child| have scale-affecting animations. EXPECT_EQ(5.f, GetMaximumAnimationScale(grand_parent)); @@ -6710,7 +5610,7 @@ AddAnimatedTransformToAnimation(parent_animation.get(), 1.0, TransformOperations(), scale); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // |grand_parent|, |parent|, and |child| have scale-affecting animations. EXPECT_EQ(5.f, GetMaximumAnimationScale(grand_parent)); @@ -6735,7 +5635,7 @@ AddAnimatedTransformToAnimation(child_animation.get(), 1.0, TransformOperations(), perspective); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // |child| has a scale-affecting animation but computing the maximum of this // animation is not supported. @@ -6759,7 +5659,7 @@ AddAnimatedTransformToAnimation(parent_animation.get(), 1.0, TransformOperations(), scale); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // |grand_parent| and |parent| each have scale 2.f. |parent| has a scale // animation with maximum scale 5.f. @@ -6776,7 +5676,7 @@ gfx::Transform perspective_matrix; perspective_matrix.ApplyPerspectiveDepth(2.f); SetTransform(child, perspective_matrix); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // |child| has a transform that's neither a translation nor a scale. EXPECT_EQ(kNotScaled, GetMaximumAnimationScale(grand_parent)); @@ -6790,7 +5690,7 @@ EXPECT_EQ(kNotScaled, GetStartingAnimationScale(grand_child)); SetTransform(parent, perspective_matrix); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // |parent| and |child| have transforms that are neither translations nor // scales. @@ -6808,7 +5708,7 @@ SetTransform(child, gfx::Transform()); SetTransform(grand_parent, perspective_matrix); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // |grand_parent| has a transform that's neither a translation nor a scale. EXPECT_EQ(kNotScaled, GetMaximumAnimationScale(grand_parent)); @@ -6835,7 +5735,7 @@ } // Needs layer tree mode: mask layer. -TEST_F(LayerTreeHostCommonTestWithLayerTree, RenderSurfaceLayerListMembership) { +TEST_F(DrawPropertiesTestWithLayerTree, RenderSurfaceLayerListMembership) { auto root = Layer::Create(); auto grand_parent = Layer::Create(); auto parent = Layer::Create(); @@ -7038,7 +5938,7 @@ } // Needs layer tree mode: mask layer. -TEST_F(LayerTreeHostCommonTestWithLayerTree, DrawPropertyDeviceScale) { +TEST_F(DrawPropertiesTestWithLayerTree, DrawPropertyDeviceScale) { auto root = Layer::Create(); auto child1 = Layer::Create(); auto child2 = Layer::Create(); @@ -7099,7 +5999,7 @@ EXPECT_FLOAT_EQ(32.f, GetMaximumAnimationScale(ImplOf(child2))); } -TEST_F(LayerTreeHostCommonTest, DrawPropertyScales) { +TEST_F(DrawPropertiesTest, DrawPropertyScales) { auto root = Layer::Create(); auto page_scale = Layer::Create(); auto child1 = Layer::Create(); @@ -7130,6 +6030,11 @@ CopyProperties(page_scale.get(), child2.get()); CreateTransformNode(child2.get()).local = scale_transform_child2; + LayerTreeHost::ViewportPropertyIds viewport_property_ids; + viewport_property_ids.page_scale_transform = + page_scale->transform_tree_index(); + host()->RegisterViewportPropertyIds(viewport_property_ids); + TransformOperations scale; scale.AppendScale(5.f, 8.f, 3.f); @@ -7152,8 +6057,8 @@ // maximum_animation_contents_scale. float device_scale_factor = 1.0f; - float page_scale_factor = 3.f; - CommitAndActivate(device_scale_factor, page_scale_factor, page_scale.get()); + host()->SetPageScaleFactorAndLimits(3.f, 3.f, 3.f); + CommitAndActivate(); EXPECT_FLOAT_EQ(1.f, ImplOf(root)->GetIdealContentsScale()); EXPECT_FLOAT_EQ(3.f, ImplOf(page_scale)->GetIdealContentsScale()); @@ -7169,7 +6074,7 @@ // maximum_animation_contents_scale. device_scale_factor = 4.0f; - CommitAndActivate(device_scale_factor, page_scale_factor, page_scale.get()); + CommitAndActivate(device_scale_factor); EXPECT_FLOAT_EQ(4.f, ImplOf(root)->GetIdealContentsScale()); EXPECT_FLOAT_EQ(12.f, ImplOf(page_scale)->GetIdealContentsScale()); @@ -7182,7 +6087,7 @@ EXPECT_FLOAT_EQ(96.f, GetMaximumAnimationScale(ImplOf(child2))); } -TEST_F(LayerTreeHostCommonTest, AnimationScales) { +TEST_F(DrawPropertiesTest, AnimationScales) { LayerImpl* root = root_layer(); auto* child1 = AddLayer<LayerImpl>(); auto* child2 = AddLayer<LayerImpl>(); @@ -7206,7 +6111,7 @@ AddAnimatedTransformToElementWithAnimation( child2->element_id(), timeline_impl(), 1.0, TransformOperations(), scale); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(root)); EXPECT_FLOAT_EQ(kNotScaled, GetMaximumAnimationScale(child1)); @@ -7220,7 +6125,7 @@ SetTransform(child1, gfx::Transform()); root->layer_tree_impl()->SetTransformMutated(child1->element_id(), gfx::Transform()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_FLOAT_EQ(8.f, GetMaximumAnimationScale(child2)); EXPECT_FLOAT_EQ(1.f, GetStartingAnimationScale(child2)); @@ -7231,7 +6136,7 @@ EXPECT_FLOAT_EQ(100.f, GetStartingAnimationScale(child2)); } -TEST_F(LayerTreeHostCommonTest, VisibleContentRectInChildRenderSurface) { +TEST_F(DrawPropertiesTest, VisibleContentRectInChildRenderSurface) { LayerImpl* root = root_layer(); LayerImpl* clip = AddLayer<LayerImpl>(); LayerImpl* content = AddLayer<LayerImpl>(); @@ -7248,25 +6153,25 @@ CopyProperties(clip, content); CreateEffectNode(content).render_surface_reason = RenderSurfaceReason::kTest; - gfx::Rect device_viewport_rect(768, 582); - RenderSurfaceList render_surface_list_impl; - LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( - root, device_viewport_rect, gfx::Transform(), &render_surface_list_impl); - inputs.device_scale_factor = 2.f; - inputs.page_scale_factor = 1.f; - inputs.page_scale_layer = nullptr; - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + // Not calling UpdateActiveTreeDrawProperties() because we want to set a + // special device viewport rect. + host_impl()->active_tree()->SetDeviceViewportRect(gfx::Rect(768, 582)); + float device_scale_factor = 2.f; + host_impl()->active_tree()->SetDeviceScaleFactor(device_scale_factor); + UpdateDrawProperties(host_impl()->active_tree()); // Layers in the root render surface have their visible content rect clipped // by the viewport. - EXPECT_EQ(gfx::Rect(768 / 2, 582 / 2), root->visible_layer_rect()); + EXPECT_EQ(gfx::Rect(768 / device_scale_factor, 582 / device_scale_factor), + root->visible_layer_rect()); // Layers drawing to a child render surface should still have their visible // content rect clipped by the viewport. - EXPECT_EQ(gfx::Rect(768 / 2, 582 / 2), content->visible_layer_rect()); + EXPECT_EQ(gfx::Rect(768 / device_scale_factor, 582 / device_scale_factor), + content->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, ViewportBoundsDeltaAffectVisibleContentRect) { +TEST_F(DrawPropertiesTest, ViewportBoundsDeltaAffectVisibleContentRect) { // Set two layers: the root layer clips it's child, // the child draws its content. @@ -7297,18 +6202,17 @@ CreateClipNode(root); CopyProperties(root, sublayer); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(root_size), sublayer->visible_layer_rect()); root->SetViewportBoundsDelta(gfx::Vector2dF(0.0, 50.0)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); - gfx::Rect affected_by_delta(0, 0, root_size.width(), - root_size.height() + 50); + gfx::Rect affected_by_delta(0, 0, root_size.width(), root_size.height() + 50); EXPECT_EQ(affected_by_delta, sublayer->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, VisibleContentRectForAnimatedLayer) { +TEST_F(DrawPropertiesTest, VisibleContentRectForAnimatedLayer) { host_impl()->CreatePendingTree(); LayerImpl* root = EnsureRootLayerInPendingTree(); LayerImpl* animated = AddLayerInPendingTree<LayerImpl>(); @@ -7324,12 +6228,12 @@ AddOpacityTransitionToElementWithAnimation( animated->element_id(), timeline_impl(), 10.0, 0.f, 1.f, false); - ExecuteCalculateDrawProperties(root); + UpdatePendingTreeDrawProperties(); EXPECT_FALSE(animated->visible_layer_rect().IsEmpty()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, VisibleContentRectForAnimatedLayerWithSingularTransform) { host_impl()->CreatePendingTree(); LayerImpl* root = EnsureRootLayerInPendingTree(); @@ -7370,7 +6274,7 @@ AddAnimatedTransformToElementWithAnimation( animated->element_id(), timeline_impl(), 10.0, start_transform_operations, end_transform_operations); - ExecuteCalculateDrawProperties(root); + UpdatePendingTreeDrawProperties(); // Since animated has singular transform, it is not be part of render // surface layer list but should be rastered. EXPECT_FALSE(animated->contributes_to_drawn_render_surface()); @@ -7390,7 +6294,7 @@ zero_matrix.Scale3d(0.f, 0.f, 0.f); root->layer_tree_impl()->SetTransformMutated(animated->element_id(), zero_matrix); - ExecuteCalculateDrawProperties(root); + UpdatePendingTreeDrawProperties(); // The animated layer will be treated as fully visible when we combine clips // in screen space. @@ -7405,7 +6309,7 @@ host_impl()->ActivateSyncTree(); LayerImpl* active_root = host_impl()->active_tree()->LayerById(root->id()); - ExecuteCalculateDrawProperties(active_root); + UpdateActiveTreeDrawProperties(); // Since the animated has singular transform, it is not be part of render // surface layer list. @@ -7420,158 +6324,7 @@ EXPECT_EQ(gfx::Rect(120, 120), active_animated->visible_layer_rect()); } -// Verify that having animated opacity but current opacity 1 still creates -// a render surface. -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - AnimatedOpacityCreatesRenderSurface) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto child = Layer::Create(); - root->AddChild(child); - auto grandchild = Layer::Create(); - child->AddChild(grandchild); - - root->SetBounds(gfx::Size(50, 50)); - child->SetBounds(gfx::Size(50, 50)); - child->SetIsDrawable(true); - grandchild->SetBounds(gfx::Size(50, 50)); - grandchild->SetIsDrawable(true); - - host()->SetElementIdsForTesting(); - AddOpacityTransitionToElementWithAnimation(child->element_id(), timeline(), - 10.0, 1.f, 0.2f, false); - CommitAndActivate(); - - EXPECT_EQ(1.f, ImplOf(child)->Opacity()); - EXPECT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(grandchild), GetRenderSurfaceImpl(child)); -} - -static bool FilterIsAnimating(LayerImpl* layer) { - MutatorHost* host = layer->layer_tree_impl()->mutator_host(); - return host->IsAnimatingFilterProperty(layer->element_id(), - layer->GetElementTypeForAnimation()); -} - -// Verify that having an animated filter (but no current filter, as these -// are mutually exclusive) correctly creates a render surface. -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - AnimatedFilterCreatesRenderSurface) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto child = Layer::Create(); - root->AddChild(child); - auto grandchild = Layer::Create(); - child->AddChild(grandchild); - - root->SetBounds(gfx::Size(50, 50)); - child->SetBounds(gfx::Size(50, 50)); - grandchild->SetBounds(gfx::Size(50, 50)); - - host()->SetElementIdsForTesting(); - AddAnimatedFilterToElementWithAnimation(child->element_id(), timeline(), 10.0, - 0.1f, 0.2f); - CommitAndActivate(); - - EXPECT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(grandchild), GetRenderSurfaceImpl(child)); - - EXPECT_TRUE(GetRenderSurfaceImpl(root)->Filters().IsEmpty()); - EXPECT_TRUE(GetRenderSurfaceImpl(child)->Filters().IsEmpty()); - - EXPECT_FALSE(FilterIsAnimating(ImplOf(root))); - EXPECT_TRUE(FilterIsAnimating(ImplOf(child))); - EXPECT_FALSE(FilterIsAnimating(ImplOf(grandchild))); -} - -bool HasPotentiallyRunningFilterAnimation(const LayerImpl& layer) { - MutatorHost* host = layer.layer_tree_impl()->mutator_host(); - return host->HasPotentiallyRunningFilterAnimation( - layer.element_id(), layer.GetElementTypeForAnimation()); -} - -// Verify that having a filter animation with a delayed start time creates a -// render surface. -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - DelayedFilterAnimationCreatesRenderSurface) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto child = Layer::Create(); - root->AddChild(child); - auto grandchild = Layer::Create(); - child->AddChild(grandchild); - - root->SetBounds(gfx::Size(50, 50)); - child->SetBounds(gfx::Size(50, 50)); - grandchild->SetBounds(gfx::Size(50, 50)); - - host()->SetElementIdsForTesting(); - - std::unique_ptr<KeyframedFilterAnimationCurve> curve( - KeyframedFilterAnimationCurve::Create()); - FilterOperations start_filters; - start_filters.Append(FilterOperation::CreateBrightnessFilter(0.1f)); - FilterOperations end_filters; - end_filters.Append(FilterOperation::CreateBrightnessFilter(0.3f)); - curve->AddKeyframe( - FilterKeyframe::Create(base::TimeDelta(), start_filters, nullptr)); - curve->AddKeyframe(FilterKeyframe::Create( - base::TimeDelta::FromMilliseconds(100), end_filters, nullptr)); - std::unique_ptr<KeyframeModel> keyframe_model = - KeyframeModel::Create(std::move(curve), 0, 1, TargetProperty::FILTER); - keyframe_model->set_fill_mode(KeyframeModel::FillMode::NONE); - keyframe_model->set_time_offset(base::TimeDelta::FromMilliseconds(-1000)); - - AddKeyframeModelToElementWithAnimation(child->element_id(), timeline(), - std::move(keyframe_model)); - CommitAndActivate(); - - EXPECT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_NE(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(grandchild), GetRenderSurfaceImpl(child)); - - EXPECT_TRUE(GetRenderSurfaceImpl(root)->Filters().IsEmpty()); - EXPECT_TRUE(GetRenderSurfaceImpl(child)->Filters().IsEmpty()); - - EXPECT_FALSE(FilterIsAnimating(ImplOf(root))); - EXPECT_FALSE(HasPotentiallyRunningFilterAnimation(*ImplOf(root))); - EXPECT_FALSE(FilterIsAnimating(ImplOf(child))); - EXPECT_TRUE(HasPotentiallyRunningFilterAnimation(*ImplOf(child))); - EXPECT_FALSE(FilterIsAnimating(ImplOf(grandchild))); - EXPECT_FALSE(HasPotentiallyRunningFilterAnimation(*ImplOf(grandchild))); -} - -// Needs layer tree mode: needs_rebuild flag. Not using impl-side -// PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - ChangingAxisAlignmentTriggersRebuild) { - gfx::Transform translate; - gfx::Transform rotate; - - translate.Translate(10, 10); - rotate.Rotate(45); - - scoped_refptr<Layer> root = Layer::Create(); - root->SetBounds(gfx::Size(800, 800)); - - host()->SetRootLayer(root); - - ExecuteCalculateDrawProperties(root.get()); - EXPECT_FALSE(host()->property_trees()->needs_rebuild); - - root->SetTransform(translate); - EXPECT_FALSE(host()->property_trees()->needs_rebuild); - - root->SetTransform(rotate); - EXPECT_TRUE(host()->property_trees()->needs_rebuild); -} - -TEST_F(LayerTreeHostCommonTest, ChangeTransformOrigin) { +TEST_F(DrawPropertiesTest, ChangeTransformOrigin) { LayerImpl* root = root_layer(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -7586,16 +6339,16 @@ CopyProperties(root, child); CreateTransformNode(child).local = scale_matrix; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); SetTransformOrigin(child, gfx::Point3F(10.f, 10.f, 10.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(5, 5, 5, 5), child->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, UpdateScrollChildPosition) { +TEST_F(DrawPropertiesTest, UpdateScrollChildPosition) { LayerImpl* root = root_layer(); LayerImpl* scroll_parent = AddLayer<LayerImpl>(); LayerImpl* scroll_child = AddLayer<LayerImpl>(); @@ -7617,20 +6370,20 @@ CopyProperties(scroll_parent, scroll_child); CreateTransformNode(scroll_child).local.Scale(2.f, 2.f); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(25, 25), scroll_child->visible_layer_rect()); SetScrollOffset(scroll_parent, gfx::ScrollOffset(0.f, 10.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(0, 5, 25, 25), scroll_child->visible_layer_rect()); SetPostTranslation(scroll_child, gfx::Vector2dF(0, -10.f)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(0, 10, 25, 25), scroll_child->visible_layer_rect()); } // Needs layer tree mode: copy request. Not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, HasCopyRequestsInTargetSubtree) { +TEST_F(DrawPropertiesTestWithLayerTree, HasCopyRequestsInTargetSubtree) { scoped_refptr<Layer> root = Layer::Create(); scoped_refptr<Layer> child1 = Layer::Create(); scoped_refptr<Layer> child2 = Layer::Create(); @@ -7648,7 +6401,7 @@ greatgrandchild->RequestCopyOfOutput( viz::CopyOutputRequest::CreateStubForTesting()); child2->SetOpacity(0.f); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EXPECT_TRUE(LayerSubtreeHasCopyRequest(root.get())); EXPECT_TRUE(LayerSubtreeHasCopyRequest(child1.get())); @@ -7659,7 +6412,7 @@ // Needs layer tree mode: hide_layer_and_subtree, etc. // Not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SkippingSubtreeMain) { +TEST_F(DrawPropertiesTestWithLayerTree, SkippingSubtreeMain) { FakeContentLayerClient client; scoped_refptr<Layer> root = Layer::Create(); @@ -7683,7 +6436,7 @@ host()->SetElementIdsForTesting(); // Check the non-skipped case. - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EXPECT_TRUE(UpdateLayerListContains(grandchild->id())); // Now we will reset the visible rect from property trees for the grandchild, @@ -7694,12 +6447,12 @@ singular.matrix().set(0, 0, 0); child->SetTransform(singular); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EXPECT_FALSE(UpdateLayerListContains(grandchild->id())); child->SetTransform(gfx::Transform()); child->SetHideLayerAndSubtree(true); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EXPECT_FALSE(UpdateLayerListContains(grandchild->id())); child->SetHideLayerAndSubtree(false); @@ -7717,14 +6470,14 @@ keyframe_model->set_time_offset(base::TimeDelta::FromMilliseconds(-1000)); AddKeyframeModelToElementWithAnimation(child->element_id(), timeline(), std::move(keyframe_model)); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EXPECT_TRUE(UpdateLayerListContains(grandchild->id())); RemoveKeyframeModelFromElementWithExistingKeyframeEffect( child->element_id(), timeline(), keyframe_model_id); child->SetTransform(gfx::Transform()); child->SetOpacity(0.f); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EXPECT_FALSE(UpdateLayerListContains(grandchild->id())); // Now, even though child has zero opacity, we will configure |grandchild| and @@ -7732,7 +6485,7 @@ // processed anyhow. grandchild->RequestCopyOfOutput( viz::CopyOutputRequest::CreateStubForTesting()); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EXPECT_TRUE(UpdateLayerListContains(grandchild->id())); // Add an opacity animation with a start delay. @@ -7744,12 +6497,12 @@ keyframe_model->set_time_offset(base::TimeDelta::FromMilliseconds(-1000)); AddKeyframeModelToElementWithExistingKeyframeEffect( child->element_id(), timeline(), std::move(keyframe_model)); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EXPECT_TRUE(UpdateLayerListContains(grandchild->id())); } // Needs layer tree mode: hide_layer_and_subtree, etc. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SkippingLayerImpl) { +TEST_F(DrawPropertiesTestWithLayerTree, SkippingLayerImpl) { auto root = Layer::Create(); host()->SetRootLayer(root); auto parent = Layer::Create(); @@ -7878,7 +6631,7 @@ // we can ignore the size of all its children. We need to make sure that // we don't do this if an animation can replace this transform in the // compositor without recomputing the trees. -TEST_F(LayerTreeHostCommonTest, LayerSkippingInSubtreeOfSingularTransform) { +TEST_F(DrawPropertiesTest, LayerSkippingInSubtreeOfSingularTransform) { // Set up a transform animation std::unique_ptr<KeyframedTransformAnimationCurve> curve( KeyframedTransformAnimationCurve::Create()); @@ -7929,7 +6682,7 @@ CreateTransformNode(child); CopyProperties(child, grand_child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_EQ(gfx::Rect(10, 10), grand_child->visible_layer_rect()); ASSERT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); @@ -7937,7 +6690,7 @@ SetTransform(child, singular); grand_child->set_visible_layer_rect(gfx::Rect()); child->set_visible_layer_rect(gfx::Rect()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(), grand_child->visible_layer_rect()); EXPECT_EQ(gfx::Rect(), child->visible_layer_rect()); @@ -7946,7 +6699,7 @@ grand_child->set_visible_layer_rect(gfx::Rect()); child->set_visible_layer_rect(gfx::Rect()); root->layer_tree_impl()->property_trees()->needs_rebuild = true; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); ASSERT_EQ(gfx::Rect(10, 10), grand_child->visible_layer_rect()); ASSERT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); @@ -7958,14 +6711,14 @@ SetTransform(child, singular); grand_child->set_visible_layer_rect(gfx::Rect(1, 1)); child->set_visible_layer_rect(gfx::Rect(1, 1)); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(10, 10), grand_child->visible_layer_rect()); EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); } // This tests that we skip computing the visible areas for the subtree // rooted at nodes with constant zero opacity. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SkippingPendingLayerImpl) { +TEST_F(DrawPropertiesTestWithLayerTree, SkippingPendingLayerImpl) { auto root = Layer::Create(); auto child = Layer::Create(); auto grandchild = Layer::Create(); @@ -8020,7 +6773,7 @@ } // Needs layer tree mode: hide_layer_and_subtree. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SkippingLayer) { +TEST_F(DrawPropertiesTestWithLayerTree, SkippingLayer) { auto root = Layer::Create(); host()->SetRootLayer(root); auto child = Layer::Create(); @@ -8059,82 +6812,7 @@ EXPECT_EQ(gfx::Rect(0, 0), ImplOf(child)->visible_layer_rect()); } -// Needs layer tree mode: testing PropertyTreeBuilder. -// Not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, ResetPropertyTreeIndices) { - scoped_refptr<Layer> root = Layer::Create(); - root->SetBounds(gfx::Size(800, 800)); - - gfx::Transform translate_z; - translate_z.Translate3d(0, 0, 10); - - scoped_refptr<Layer> child = Layer::Create(); - child->SetTransform(translate_z); - child->SetBounds(gfx::Size(100, 100)); - - root->AddChild(child); - - host()->SetRootLayer(root); - - ExecuteCalculateDrawProperties(root.get()); - EXPECT_NE(-1, child->transform_tree_index()); - - child->RemoveFromParent(); - - ExecuteCalculateDrawProperties(root.get()); - EXPECT_EQ(-1, child->transform_tree_index()); -} - -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, RenderSurfaceClipsSubtree) { - // Ensure that a Clip Node is added when a render surface applies clip. - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto significant_transform = Layer::Create(); - root->AddChild(significant_transform); - auto layer_clips_subtree = Layer::Create(); - significant_transform->AddChild(layer_clips_subtree); - auto render_surface = Layer::Create(); - layer_clips_subtree->AddChild(render_surface); - auto test_layer = Layer::Create(); - render_surface->AddChild(test_layer); - - // This transform should be a significant one so that a transform node is - // formed for it. - gfx::Transform transform1; - transform1.RotateAboutYAxis(45); - transform1.RotateAboutXAxis(30); - // This transform should be a 3d transform as we want the render surface - // to flatten the transform - gfx::Transform transform2; - transform2.Translate3d(10, 10, 10); - - root->SetBounds(gfx::Size(30, 30)); - significant_transform->SetTransform(transform1); - significant_transform->SetBounds(gfx::Size(30, 30)); - layer_clips_subtree->SetBounds(gfx::Size(30, 30)); - layer_clips_subtree->SetMasksToBounds(true); - layer_clips_subtree->SetForceRenderSurfaceForTesting(true); - render_surface->SetTransform(transform2); - render_surface->SetBounds(gfx::Size(30, 30)); - render_surface->SetForceRenderSurfaceForTesting(true); - test_layer->SetBounds(gfx::Size(30, 30)); - test_layer->SetIsDrawable(true); - - CommitAndActivate(); - - EXPECT_TRUE(GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(significant_transform), - GetRenderSurfaceImpl(root)); - EXPECT_TRUE(GetRenderSurfaceImpl(layer_clips_subtree)); - EXPECT_NE(GetRenderSurfaceImpl(render_surface), GetRenderSurfaceImpl(root)); - EXPECT_EQ(GetRenderSurfaceImpl(test_layer), - GetRenderSurfaceImpl(render_surface)); - - EXPECT_EQ(gfx::Rect(30, 20), ImplOf(test_layer)->visible_layer_rect()); -} - -TEST_F(LayerTreeHostCommonTest, TransformOfParentClipNodeAncestorOfTarget) { +TEST_F(DrawPropertiesTest, TransformOfParentClipNodeAncestorOfTarget) { // Ensure that when parent clip node's transform is an ancestor of current // clip node's target, clip is 'projected' from parent space to current // target space and visible rects are calculated correctly. @@ -8162,13 +6840,12 @@ CreateClipNode(target_layer); CopyProperties(target_layer, test_layer); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(30, 30), test_layer->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, - RenderSurfaceWithUnclippedDescendantsClipsSubtree) { +TEST_F(DrawPropertiesTest, RenderSurfaceWithUnclippedDescendantsClipsSubtree) { // Ensure clip rect is calculated correctly when render surface has unclipped // descendants. LayerImpl* root = root_layer(); @@ -8197,7 +6874,7 @@ CopyProperties(render_surface, test_layer); test_layer->SetClipTreeIndex(clip_parent->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRUE(test_layer->is_clipped()); EXPECT_FALSE(test_layer->render_target()->is_clipped()); @@ -8205,7 +6882,7 @@ EXPECT_EQ(gfx::Rect(28, 28), test_layer->drawable_content_rect()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, RenderSurfaceWithUnclippedDescendantsButDoesntApplyOwnClip) { // Ensure that the visible layer rect of a descendant of a surface with // unclipped descendants is computed correctly, when the surface doesn't apply @@ -8232,11 +6909,11 @@ clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); CopyProperties(clip_child, child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(30, 10), child->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, +TEST_F(DrawPropertiesTest, RenderSurfaceClipsSubtreeAndHasUnclippedDescendants) { LayerImpl* root = root_layer(); LayerImpl* clip_parent = AddLayer<LayerImpl>(); @@ -8267,14 +6944,14 @@ clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); CopyProperties(clip_child, test_layer2); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(30, 30), render_surface->visible_layer_rect()); EXPECT_EQ(gfx::Rect(30, 30), test_layer1->visible_layer_rect()); EXPECT_EQ(gfx::Rect(30, 30), clip_child->visible_layer_rect()); EXPECT_EQ(gfx::Rect(30, 30), test_layer2->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, UnclippedClipParent) { +TEST_F(DrawPropertiesTest, UnclippedClipParent) { LayerImpl* root = root_layer(); LayerImpl* clip_parent = AddLayer<LayerImpl>(); LayerImpl* render_surface = AddLayer<LayerImpl>(); @@ -8296,7 +6973,7 @@ CopyProperties(render_surface, clip_child); clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); // The clip child should inherit its clip parent's clipping state, not its // tree parent's clipping state. @@ -8305,7 +6982,7 @@ EXPECT_FALSE(clip_child->is_clipped()); } -TEST_F(LayerTreeHostCommonTest, RenderSurfaceContentRectWithMultipleSurfaces) { +TEST_F(DrawPropertiesTest, RenderSurfaceContentRectWithMultipleSurfaces) { // Tests the value of render surface content rect when we have multiple types // of surfaces : unclipped surfaces, surfaces with unclipped surfaces and // clipped surfaces. @@ -8352,7 +7029,7 @@ CreateEffectNode(clipped_surface).render_surface_reason = RenderSurfaceReason::kTest; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(50, 50), GetRenderSurface(unclipped_surface)->content_rect()); EXPECT_EQ(gfx::Rect(50, 50), @@ -8363,7 +7040,7 @@ GetRenderSurface(clipped_surface)->content_rect()); } -TEST_F(LayerTreeHostCommonTest, ClipBetweenClipChildTargetAndClipParentTarget) { +TEST_F(DrawPropertiesTest, ClipBetweenClipChildTargetAndClipParentTarget) { // Tests the value of render surface content rect when we have a layer that // clips between the clip parent's target and clip child's target. LayerImpl* root = root_layer(); @@ -8396,13 +7073,13 @@ CopyProperties(unclipped_desc_surface, clip_child); clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(10, 10), GetRenderSurface(unclipped_desc_surface)->content_rect()); } -TEST_F(LayerTreeHostCommonTest, VisibleRectForDescendantOfScaledSurface) { +TEST_F(DrawPropertiesTest, VisibleRectForDescendantOfScaledSurface) { LayerImpl* root = root_layer(); LayerImpl* surface = AddLayer<LayerImpl>(); LayerImpl* clip_layer = AddLayer<LayerImpl>(); @@ -8432,12 +7109,12 @@ CopyProperties(unclipped_desc_surface, clip_child); clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(20, 20), clip_child->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, LayerWithInputHandlerAndZeroOpacity) { +TEST_F(DrawPropertiesTest, LayerWithInputHandlerAndZeroOpacity) { LayerImpl* root = root_layer(); LayerImpl* render_surface = AddLayer<LayerImpl>(); LayerImpl* test_layer = AddLayer<LayerImpl>(); @@ -8463,12 +7140,12 @@ CreateTransformNode(test_layer).local = translation; CreateEffectNode(test_layer).opacity = 0.f; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_TRANSFORMATION_MATRIX_EQ(translation, test_layer->ScreenSpaceTransform()); } -TEST_F(LayerTreeHostCommonTest, ClipParentDrawsIntoScaledRootSurface) { +TEST_F(DrawPropertiesTest, ClipParentDrawsIntoScaledRootSurface) { LayerImpl* root = root_layer(); LayerImpl* clip_layer = AddLayer<LayerImpl>(); LayerImpl* clip_parent = AddLayer<LayerImpl>(); @@ -8498,17 +7175,17 @@ clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); float device_scale_factor = 1.f; - ExecuteCalculateDrawProperties(root, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_EQ(gfx::Rect(-10, -10, 20, 20), clip_child->clip_rect()); EXPECT_EQ(gfx::Rect(10, 10), clip_child->visible_layer_rect()); device_scale_factor = 2.f; - ExecuteCalculateDrawProperties(root, device_scale_factor); + UpdateActiveTreeDrawProperties(device_scale_factor); EXPECT_EQ(gfx::Rect(-20, -20, 40, 40), clip_child->clip_rect()); EXPECT_EQ(gfx::Rect(10, 10), clip_child->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, ClipChildVisibleRect) { +TEST_F(DrawPropertiesTest, ClipChildVisibleRect) { LayerImpl* root = root_layer(); LayerImpl* clip_parent = AddLayer<LayerImpl>(); LayerImpl* render_surface = AddLayer<LayerImpl>(); @@ -8530,12 +7207,11 @@ CopyProperties(render_surface, clip_child); clip_child->SetClipTreeIndex(clip_parent->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(30, 30), clip_child->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, - LayerClipRectLargerThanClippingRenderSurfaceRect) { +TEST_F(DrawPropertiesTest, LayerClipRectLargerThanClippingRenderSurfaceRect) { LayerImpl* root = root_layer(); LayerImpl* render_surface = AddLayer<LayerImpl>(); LayerImpl* test_layer = AddLayer<LayerImpl>(); @@ -8557,7 +7233,7 @@ CopyProperties(render_surface, test_layer); CreateClipNode(test_layer); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(30, 30), root->clip_rect()); EXPECT_EQ(gfx::Rect(50, 50), render_surface->clip_rect()); @@ -8565,7 +7241,7 @@ } // Needs layer tree mode: hide_layer_and_subtree. -TEST_F(LayerTreeHostCommonTestWithLayerTree, SubtreeIsHiddenTest) { +TEST_F(DrawPropertiesTestWithLayerTree, SubtreeIsHiddenTest) { // Tests that subtree is hidden is updated. auto root = Layer::Create(); host()->SetRootLayer(root); @@ -8594,7 +7270,7 @@ GetRenderSurfaceImpl(test)->OwningEffectNode()->screen_space_opacity); } -TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) { +TEST_F(DrawPropertiesTest, TwoUnclippedRenderSurfaces) { LayerImpl* root = root_layer(); LayerImpl* clip_layer = AddLayer<LayerImpl>(); LayerImpl* render_surface1 = AddLayer<LayerImpl>(); @@ -8624,13 +7300,13 @@ CopyProperties(render_surface2, clip_child); clip_child->SetClipTreeIndex(root->clip_tree_index()); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Rect(-10, -10, 30, 30), render_surface2->clip_rect()); } // Needs layer tree mode: mask layer. -TEST_F(LayerTreeHostCommonTestWithLayerTree, MaskLayerDrawProperties) { +TEST_F(DrawPropertiesTestWithLayerTree, MaskLayerDrawProperties) { // Tests that a mask layer's draw properties are computed correctly. auto root = Layer::Create(); host()->SetRootLayer(root); @@ -8690,8 +7366,7 @@ EXPECT_FALSE(ImplOf(mask)->contributes_to_drawn_render_surface()); } -TEST_F(LayerTreeHostCommonTest, - SublayerScaleWithTransformNodeBetweenTwoTargets) { +TEST_F(DrawPropertiesTest, SublayerScaleWithTransformNodeBetweenTwoTargets) { LayerImpl* root = root_layer(); LayerImpl* render_surface1 = AddLayer<LayerImpl>(); LayerImpl* between_targets = AddLayer<LayerImpl>(); @@ -8723,7 +7398,7 @@ RenderSurfaceReason::kTest; CopyProperties(render_surface2, test_layer); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::Vector2dF(2.f, 2.f), GetEffectNode(render_surface1)->surface_contents_scale); @@ -8735,7 +7410,7 @@ EXPECT_EQ(gfx::Rect(15, 15), test_layer->visible_layer_rect()); } -TEST_F(LayerTreeHostCommonTest, NoisyTransform) { +TEST_F(DrawPropertiesTest, NoisyTransform) { LayerImpl* root = root_layer(); LayerImpl* render_surface = AddLayer<LayerImpl>(); LayerImpl* parent = AddLayer<LayerImpl>(); @@ -8762,7 +7437,7 @@ CopyProperties(parent, child); CreateTransformNode(child).local = transform; - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); gfx::Transform expected; expected.matrix().setDouble(0, 0, 3.749395e-33); @@ -8772,7 +7447,7 @@ EXPECT_TRANSFORMATION_MATRIX_EQ(expected, child->ScreenSpaceTransform()); } -TEST_F(LayerTreeHostCommonTest, LargeTransformTest) { +TEST_F(DrawPropertiesTest, LargeTransformTest) { LayerImpl* root = root_layer(); LayerImpl* render_surface1 = AddLayer<LayerImpl>(); LayerImpl* child = AddLayer<LayerImpl>(); @@ -8803,7 +7478,7 @@ CreateTransformNode(child).local = large_transform; CreateClipNode(child); - ExecuteCalculateDrawProperties(root); + UpdateActiveTreeDrawProperties(); EXPECT_EQ(gfx::RectF(), GetRenderSurface(render_surface1)->DrawableContentRect()); @@ -8817,54 +7492,11 @@ EXPECT_TRUE(is_inf_or_nan); // The root layer should be in the RenderSurfaceList. - const auto* rsl = render_surface_list_impl(); - EXPECT_TRUE(base::Contains(*rsl, GetRenderSurface(root))); -} - -// Needs layer tree mode: testing needs_rebuild flag. -// Not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - PropertyTreesRebuildWithOpacityChanges) { - scoped_refptr<Layer> root = Layer::Create(); - scoped_refptr<Layer> child = Layer::Create(); - child->SetIsDrawable(true); - root->AddChild(child); - host()->SetRootLayer(root); - - root->SetBounds(gfx::Size(100, 100)); - child->SetBounds(gfx::Size(20, 20)); - ExecuteCalculateDrawProperties(root.get()); - - // Changing the opacity from 1 to non-1 value should trigger rebuild of - // property trees as a new effect node will be created. - child->SetOpacity(0.5f); - PropertyTrees* property_trees = host()->property_trees(); - EXPECT_TRUE(property_trees->needs_rebuild); - - ExecuteCalculateDrawProperties(root.get()); - EXPECT_NE(child->effect_tree_index(), root->effect_tree_index()); - - // child already has an effect node. Changing its opacity shouldn't trigger - // a property trees rebuild. - child->SetOpacity(0.8f); - property_trees = host()->property_trees(); - EXPECT_FALSE(property_trees->needs_rebuild); - - ExecuteCalculateDrawProperties(root.get()); - EXPECT_NE(child->effect_tree_index(), root->effect_tree_index()); - - // Changing the opacity from non-1 value to 1 should trigger a rebuild of - // property trees as the effect node may no longer be needed. - child->SetOpacity(1.f); - property_trees = host()->property_trees(); - EXPECT_TRUE(property_trees->needs_rebuild); - - ExecuteCalculateDrawProperties(root.get()); - EXPECT_EQ(child->effect_tree_index(), root->effect_tree_index()); + EXPECT_TRUE(base::Contains(GetRenderSurfaceList(), GetRenderSurface(root))); } // In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, OpacityAnimationsTrackingTest) { +TEST_F(DrawPropertiesTestWithLayerTree, OpacityAnimationsTrackingTest) { scoped_refptr<Layer> root = Layer::Create(); scoped_refptr<Layer> animated = Layer::Create(); animated->SetIsDrawable(true); @@ -8894,7 +7526,7 @@ AddKeyframeModelToElementWithExistingKeyframeEffect( animated->element_id(), timeline(), std::move(keyframe_model)); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); EffectNode* node = GetEffectNode(animated.get()); EXPECT_FALSE(node->is_currently_animating_opacity); @@ -8914,7 +7546,7 @@ } // In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, TransformAnimationsTrackingTest) { +TEST_F(DrawPropertiesTestWithLayerTree, TransformAnimationsTrackingTest) { scoped_refptr<Layer> root = Layer::Create(); scoped_refptr<Layer> animated = Layer::Create(); animated->SetIsDrawable(true); @@ -8952,7 +7584,7 @@ AddKeyframeModelToElementWithExistingKeyframeEffect( animated->element_id(), timeline(), std::move(keyframe_model)); - ExecuteCalculateDrawProperties(root.get()); + UpdateMainDrawProperties(); TransformNode* node = GetTransformNode(animated.get()); EXPECT_FALSE(node->is_currently_animating); @@ -8972,7 +7604,7 @@ } // Needs layer tree mode: copy request. -TEST_F(LayerTreeHostCommonTestWithLayerTree, CopyRequestScalingTest) { +TEST_F(DrawPropertiesTestWithLayerTree, CopyRequestScalingTest) { auto root = Layer::Create(); host()->SetRootLayer(root); auto scale_layer = Layer::Create(); @@ -9026,8 +7658,7 @@ } // Needs layer tree mode: hide_layer_and_subtree, etc. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - SubtreeHiddenWithCacheRenderSurface) { +TEST_F(DrawPropertiesTestWithLayerTree, SubtreeHiddenWithCacheRenderSurface) { auto root = Layer::Create(); host()->SetRootLayer(root); root->SetBounds(gfx::Size(50, 50)); @@ -9083,15 +7714,15 @@ // We should have four render surfaces, one for the root, one for the grand // parent since it has opacity and two drawing descendants, one for the parent // since it owns a surface, and one for the cache. - ASSERT_EQ(4u, render_surface_list_impl()->size()); + ASSERT_EQ(4u, GetRenderSurfaceList().size()); EXPECT_EQ(static_cast<uint64_t>(root->id()), - render_surface_list_impl()->at(0)->id()); + GetRenderSurfaceList().at(0)->id()); EXPECT_EQ(static_cast<uint64_t>(cache_grand_parent->id()), - render_surface_list_impl()->at(1)->id()); + GetRenderSurfaceList().at(1)->id()); EXPECT_EQ(static_cast<uint64_t>(cache_parent->id()), - render_surface_list_impl()->at(2)->id()); + GetRenderSurfaceList().at(2)->id()); EXPECT_EQ(static_cast<uint64_t>(cache_render_surface->id()), - render_surface_list_impl()->at(3)->id()); + GetRenderSurfaceList().at(3)->id()); // The root render surface should have 2 contributing layers. EXPECT_EQ(2, GetRenderSurfaceImpl(root)->num_contributors()); @@ -9134,7 +7765,7 @@ } // Needs layer tree mode: copy request. -TEST_F(LayerTreeHostCommonTestWithLayerTree, +TEST_F(DrawPropertiesTestWithLayerTree, VisibleRectInNonRootCacheRenderSurface) { auto root = Layer::Create(); host()->SetRootLayer(root); @@ -9242,1132 +7873,8 @@ EXPECT_EQ(gfx::Rect(20, 20), ImplOf(cache_surface)->visible_layer_rect()); } -// Needs layer tree mode: testing PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - RenderSurfaceListForTrilinearFiltering) { - auto root = Layer::Create(); - host()->SetRootLayer(root); - auto parent = Layer::Create(); - root->AddChild(parent); - auto child1 = Layer::Create(); - parent->AddChild(child1); - auto child2 = Layer::Create(); - parent->AddChild(child2); - - gfx::Transform scale_matrix; - scale_matrix.Scale(.25f, .25f); - - root->SetBounds(gfx::Size(200, 200)); - parent->SetTransform(scale_matrix); - parent->SetTrilinearFiltering(true); - child1->SetBounds(gfx::Size(50, 50)); - child1->SetIsDrawable(true); - child1->SetForceRenderSurfaceForTesting(true); - child2->SetPosition(gfx::PointF(50, 50)); - child2->SetBounds(gfx::Size(50, 50)); - child2->SetIsDrawable(true); - child2->SetForceRenderSurfaceForTesting(true); - - CommitAndActivate(); - - ASSERT_TRUE(GetRenderSurfaceImpl(parent)); - EXPECT_EQ(2, GetRenderSurfaceImpl(parent)->num_contributors()); - EXPECT_EQ(4U, render_surface_list_impl()->size()); - - // The rectangle enclosing child1 and child2 (0,0 100x100), scaled by the - // scale matrix to (0,0 25x25). - EXPECT_EQ(gfx::RectF(0, 0, 25, 25), - GetRenderSurfaceImpl(parent)->DrawableContentRect()); -} - // In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, RoundedCornerBounds) { - // Layer Tree: - // +root - // +--render surface - // +----rounded corner layer 1 [should trigger render surface] - // +----layer 1 - // +--rounded corner layer 2 [should trigger render surface] - // +----layer 2 - // +------rounded corner layer 3 [should trigger render surface] - // +--------rounded corner layer 4 [should trigger render surface] - - constexpr int kRoundedCorner1Radius = 2; - constexpr int kRoundedCorner2Radius = 5; - constexpr int kRoundedCorner3Radius = 1; - constexpr int kRoundedCorner4Radius = 1; - - constexpr gfx::RectF kRoundedCornerLayer1Bound(15.f, 15.f, 20.f, 20.f); - constexpr gfx::RectF kRoundedCornerLayer2Bound(40.f, 40.f, 60.f, 60.f); - constexpr gfx::RectF kRoundedCornerLayer3Bound(0.f, 15.f, 5.f, 5.f); - constexpr gfx::RectF kRoundedCornerLayer4Bound(1.f, 1.f, 3.f, 3.f); - - constexpr float kDeviceScale = 1.6f; - - scoped_refptr<Layer> root = Layer::Create(); - scoped_refptr<Layer> render_surface = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); - scoped_refptr<Layer> layer_1 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_2 = Layer::Create(); - scoped_refptr<Layer> layer_2 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_3 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_4 = Layer::Create(); - - // Set up layer tree - root->AddChild(render_surface); - root->AddChild(rounded_corner_layer_2); - - render_surface->AddChild(rounded_corner_layer_1); - render_surface->AddChild(layer_1); - - rounded_corner_layer_2->AddChild(layer_2); - - layer_2->AddChild(rounded_corner_layer_3); - - rounded_corner_layer_3->AddChild(rounded_corner_layer_4); - - // Set the root layer on host. - host()->SetRootLayer(root); - - // Set layer positions. - render_surface->SetPosition(gfx::PointF(0, 0)); - rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); - layer_1->SetPosition(gfx::PointF(10.f, 10.f)); - rounded_corner_layer_2->SetPosition(kRoundedCornerLayer2Bound.origin()); - layer_2->SetPosition(gfx::PointF(30.f, 30.f)); - rounded_corner_layer_3->SetPosition(kRoundedCornerLayer3Bound.origin()); - rounded_corner_layer_4->SetPosition(kRoundedCornerLayer4Bound.origin()); - - // Set up layer bounds. - root->SetBounds(gfx::Size(100, 100)); - render_surface->SetBounds(gfx::Size(50, 50)); - rounded_corner_layer_1->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); - layer_1->SetBounds(gfx::Size(10, 10)); - rounded_corner_layer_2->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); - layer_2->SetBounds(gfx::Size(25, 25)); - rounded_corner_layer_3->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer3Bound.size())); - rounded_corner_layer_4->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer4Bound.size())); - - // Add Layer transforms. - gfx::Transform layer_2_transform; - constexpr gfx::Vector2dF kLayer2Translation(10.f, 10.f); - layer_2_transform.Translate(kLayer2Translation); - layer_2->SetTransform(layer_2_transform); - - gfx::Transform rounded_corner_layer_3_transform; - constexpr float kRoundedCorner3Scale = 2.f; - rounded_corner_layer_3_transform.Scale(kRoundedCorner3Scale, - kRoundedCorner3Scale); - rounded_corner_layer_3->SetTransform(rounded_corner_layer_3_transform); - - // Set the layer properties - render_surface->SetForceRenderSurfaceForTesting(true); - - root->SetIsDrawable(true); - render_surface->SetIsDrawable(true); - rounded_corner_layer_1->SetIsDrawable(true); - layer_1->SetIsDrawable(true); - rounded_corner_layer_2->SetIsDrawable(true); - layer_2->SetIsDrawable(true); - rounded_corner_layer_3->SetIsDrawable(true); - rounded_corner_layer_4->SetIsDrawable(true); - - // Set Rounded corners - rounded_corner_layer_1->SetRoundedCorner( - {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, - kRoundedCorner1Radius}); - rounded_corner_layer_2->SetRoundedCorner( - {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, - kRoundedCorner2Radius}); - rounded_corner_layer_3->SetRoundedCorner( - {kRoundedCorner3Radius, kRoundedCorner3Radius, kRoundedCorner3Radius, - kRoundedCorner3Radius}); - rounded_corner_layer_4->SetRoundedCorner( - {kRoundedCorner4Radius, kRoundedCorner4Radius, kRoundedCorner4Radius, - kRoundedCorner4Radius}); - - ExecuteCalculateDrawProperties(root.get(), kDeviceScale); - - // Since this effect node has no descendants that draw and no descendant that - // has a rounded corner, it does not need a render surface. - const EffectNode* effect_node = GetEffectNode(rounded_corner_layer_1.get()); - gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), - kRoundedCorner1Radius); - EXPECT_EQ(rounded_corner_bounds_1.rect(), - gfx::RectF(kRoundedCornerLayer1Bound.size())); - - // Since this node has descendants with roudned corners, it needs a render - // surface. It also has 2 descendants that draw. - effect_node = GetEffectNode(rounded_corner_layer_2.get()); - gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; - EXPECT_TRUE(effect_node->HasRenderSurface()); - EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), - kRoundedCorner2Radius); - EXPECT_EQ(rounded_corner_bounds_2.rect(), - gfx::RectF(kRoundedCornerLayer2Bound.size())); - - // Since this node has a descendant that has a rounded corner, it will trigger - // the creation of a render surface. - effect_node = GetEffectNode(rounded_corner_layer_3.get()); - gfx::RRectF rounded_corner_bounds_3 = effect_node->rounded_corner_bounds; - EXPECT_TRUE(effect_node->HasRenderSurface()); - EXPECT_FLOAT_EQ(rounded_corner_bounds_3.GetSimpleRadius(), - kRoundedCorner3Radius); - EXPECT_EQ(rounded_corner_bounds_3.rect(), - gfx::RectF(kRoundedCornerLayer3Bound.size())); - - // Since this node has no descendants that draw nor any descendant that has a - // rounded corner, it does not need a render surface. - effect_node = GetEffectNode(rounded_corner_layer_4.get()); - gfx::RRectF rounded_corner_bounds_4 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_FLOAT_EQ(rounded_corner_bounds_4.GetSimpleRadius(), - kRoundedCorner4Radius); - EXPECT_EQ(rounded_corner_bounds_4.rect(), - gfx::RectF(kRoundedCornerLayer4Bound.size())); - - host()->host_impl()->CreatePendingTree(); - host()->CommitAndCreatePendingTree(); - // TODO(https://crbug.com/939968) This call should be handled by - // FakeLayerTreeHost instead of manually pushing the properties from the - // layer tree host to the pending tree. - root->layer_tree_host()->PushLayerTreePropertiesTo(host()->pending_tree()); - host()->host_impl()->ActivateSyncTree(); - LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); - - // Get the layer impl for each Layer. - LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); - LayerImpl* rounded_corner_layer_1_impl = - layer_tree_impl->LayerById(rounded_corner_layer_1->id()); - LayerImpl* rounded_corner_layer_2_impl = - layer_tree_impl->LayerById(rounded_corner_layer_2->id()); - LayerImpl* rounded_corner_layer_3_impl = - layer_tree_impl->LayerById(rounded_corner_layer_3->id()); - LayerImpl* rounded_corner_layer_4_impl = - layer_tree_impl->LayerById(rounded_corner_layer_4->id()); - - // Set the root layer on host. - ExecuteCalculateDrawProperties(root_impl, kDeviceScale); - - // Rounded corner layer 1 - // The render target for this layer is |render_surface|, hence its target - // bounds are relative to |render_surface|. - // The offset from the origin of the render target is [15, 15] and the device - // scale factor is 1.6 thus giving the target space origin of [24, 24]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_rrect_1 = - rounded_corner_layer_1_impl->draw_properties().rounded_corner_bounds; - gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_rrect_1.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_rrect_1.GetSimpleRadius(), - kRoundedCorner1Radius * kDeviceScale); - - // Rounded corner layer 2 - // The render target for this layer is |root|. - // The offset from the origin of the render target is [40, 40] and the device - // scale factor is 1.6 thus giving the target space origin of [64, 64]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_2 = - rounded_corner_layer_2_impl->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(actual_self_rrect_2.IsEmpty()); - - bounds_in_target_space = kRoundedCornerLayer2Bound; - bounds_in_target_space.Scale(kDeviceScale); - const gfx::RRectF actual_render_target_rrect_2 = - rounded_corner_layer_2_impl->render_target()->rounded_corner_bounds(); - EXPECT_EQ(actual_render_target_rrect_2.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_render_target_rrect_2.GetSimpleRadius(), - kRoundedCorner2Radius * kDeviceScale); - - // Rounded corner layer 3 - // The render target for this layer is |rounded_corner_2|. - // The net offset from the origin of the render target is [40, 55] and the - // device scale factor is 1.6 thus giving the target space origin of [64, 88]. - // The corner radius is also scaled by a factor of 1.6 * transform scale. - const gfx::RRectF actual_self_rrect_3 = - rounded_corner_layer_3_impl->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(actual_self_rrect_3.IsEmpty()); - - bounds_in_target_space = kRoundedCornerLayer3Bound; - bounds_in_target_space += - layer_2->position().OffsetFromOrigin() + kLayer2Translation; - bounds_in_target_space.Scale(kDeviceScale); - gfx::SizeF transformed_size = bounds_in_target_space.size(); - transformed_size.Scale(kRoundedCorner3Scale); - bounds_in_target_space.set_size(transformed_size); - - const gfx::RRectF actual_render_target_rrect_3 = - rounded_corner_layer_3_impl->render_target()->rounded_corner_bounds(); - EXPECT_EQ(actual_render_target_rrect_3.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_render_target_rrect_3.GetSimpleRadius(), - kRoundedCorner3Radius * kDeviceScale * kRoundedCorner3Scale); - - // Rounded corner layer 4 - // The render target for this layer is |rounded_corner_3|. - // The net offset from the origin of the render target is [1, 1] and the - // net scale is 1.6 * transform scale = 3.2 thus giving the target space o - // rigin of [3.2, 3.2]. - // The corner radius is also scaled by a factor of 3.2. - const gfx::RRectF actual_rrect_4 = - rounded_corner_layer_4_impl->draw_properties().rounded_corner_bounds; - bounds_in_target_space = kRoundedCornerLayer4Bound; - bounds_in_target_space.Scale(kDeviceScale * kRoundedCorner3Scale); - EXPECT_EQ(actual_rrect_4.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_rrect_4.GetSimpleRadius(), - kRoundedCorner4Radius * kDeviceScale * kRoundedCorner3Scale); -} - -// In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - RoundedCornerBoundsInterveningRenderTarget) { - // Layer Tree: - // +root - // +--rounded corner layer 1 [should not trigger render surface] - // +----render surface [Does not draw] - // +------rounded corner layer 2 [should not trigger render surface] - - constexpr int kRoundedCorner1Radius = 2; - constexpr int kRoundedCorner2Radius = 5; - - constexpr gfx::RectF kRoundedCornerLayer1Bound(60.f, 0.f, 40.f, 30.f); - constexpr gfx::RectF kRoundedCornerLayer2Bound(0.f, 0.f, 30.f, 20.f); - - constexpr float kDeviceScale = 1.6f; - - scoped_refptr<Layer> root = Layer::Create(); - scoped_refptr<Layer> render_surface = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_2 = Layer::Create(); - - // Set up layer tree - root->AddChild(rounded_corner_layer_1); - rounded_corner_layer_1->AddChild(render_surface); - render_surface->AddChild(rounded_corner_layer_2); - - // Set the root layer on host. - host()->SetRootLayer(root); - - // Set layer positions. - rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); - render_surface->SetPosition(gfx::PointF(0, 0)); - rounded_corner_layer_2->SetPosition(kRoundedCornerLayer2Bound.origin()); - - // Set up layer bounds. - root->SetBounds(gfx::Size(100, 100)); - rounded_corner_layer_1->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); - render_surface->SetBounds(gfx::Size(30, 30)); - rounded_corner_layer_2->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); - - // Set the layer properties - render_surface->SetForceRenderSurfaceForTesting(true); - - root->SetIsDrawable(true); - rounded_corner_layer_1->SetIsDrawable(true); - rounded_corner_layer_2->SetIsDrawable(true); - - // Set Rounded corners - rounded_corner_layer_1->SetRoundedCorner( - {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, - kRoundedCorner1Radius}); - rounded_corner_layer_2->SetRoundedCorner( - {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, - kRoundedCorner2Radius}); - - ExecuteCalculateDrawProperties(root.get(), kDeviceScale); - - // Since this effect node has only 1 descendant that draws and no descendant - // that has a rounded corner before the render surface, it does not need a - // render surface. - const EffectNode* effect_node = GetEffectNode(rounded_corner_layer_1.get()); - gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), - kRoundedCorner1Radius); - EXPECT_EQ(rounded_corner_bounds_1.rect(), - gfx::RectF(kRoundedCornerLayer1Bound.size())); - - // Since this effect node has no descendants that draw and no descendant that - // has a rounded corner, it does not need a render surface. - effect_node = GetEffectNode(rounded_corner_layer_2.get()); - gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), - kRoundedCorner2Radius); - EXPECT_EQ(rounded_corner_bounds_2.rect(), - gfx::RectF(kRoundedCornerLayer2Bound.size())); - - host()->host_impl()->CreatePendingTree(); - host()->CommitAndCreatePendingTree(); - // TODO(https://crbug.com/939968) This call should be handled by - // FakeLayerTreeHost instead of manually pushing the properties from the - // layer tree host to the pending tree. - root->layer_tree_host()->PushLayerTreePropertiesTo(host()->pending_tree()); - host()->host_impl()->ActivateSyncTree(); - LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); - - // Get the layer impl for each Layer. - LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); - LayerImpl* rounded_corner_layer_1_impl = - layer_tree_impl->LayerById(rounded_corner_layer_1->id()); - LayerImpl* rounded_corner_layer_2_impl = - layer_tree_impl->LayerById(rounded_corner_layer_2->id()); - - // Set the root layer on host. - ExecuteCalculateDrawProperties(root_impl, kDeviceScale); - - // Rounded corner layer 1 - // The render target for this layer is |root|, hence its target - // bounds are relative to |root|. - // The offset from the origin of the render target is [60, 0] and the device - // scale factor is 1.6 thus giving the target space origin of [96, 0]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_rrect_1 = - rounded_corner_layer_1_impl->draw_properties().rounded_corner_bounds; - gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_rrect_1.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_rrect_1.GetSimpleRadius(), - kRoundedCorner1Radius * kDeviceScale); - - // Rounded corner layer 2 - // The render target for this layer is |render_surface|. - // The offset from the origin of the render target is [0, 0]. - const gfx::RRectF actual_rrect_2 = - rounded_corner_layer_2_impl->draw_properties().rounded_corner_bounds; - bounds_in_target_space = kRoundedCornerLayer2Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_rrect_2.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_rrect_2.GetSimpleRadius(), - kRoundedCorner2Radius * kDeviceScale); -} - -// In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - RoundedCornerBoundsSiblingRenderTarget) { - // Layer Tree: - // +root - // +--rounded corner layer 1 [should trigger render surface] - // +----render surface [Does not draw] - // +----rounded corner layer 2 [should not trigger render surface] - - constexpr int kRoundedCorner1Radius = 2; - constexpr int kRoundedCorner2Radius = 5; - - constexpr gfx::RectF kRoundedCornerLayer1Bound(0.f, 60.f, 30.f, 40.f); - constexpr gfx::RectF kRoundedCornerLayer2Bound(0.f, 0.f, 20.f, 30.f); - - constexpr float kDeviceScale = 1.6f; - - scoped_refptr<Layer> root = Layer::Create(); - scoped_refptr<Layer> render_surface = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_2 = Layer::Create(); - - // Set up layer tree - root->AddChild(rounded_corner_layer_1); - rounded_corner_layer_1->AddChild(render_surface); - rounded_corner_layer_1->AddChild(rounded_corner_layer_2); - - // Set the root layer on host. - host()->SetRootLayer(root); - - // Set layer positions. - rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); - render_surface->SetPosition(gfx::PointF(0, 0)); - rounded_corner_layer_2->SetPosition(kRoundedCornerLayer2Bound.origin()); - - // Set up layer bounds. - root->SetBounds(gfx::Size(100, 100)); - rounded_corner_layer_1->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); - render_surface->SetBounds(gfx::Size(30, 30)); - rounded_corner_layer_2->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); - - // Set the layer properties - render_surface->SetForceRenderSurfaceForTesting(true); - - root->SetIsDrawable(true); - rounded_corner_layer_1->SetIsDrawable(true); - rounded_corner_layer_2->SetIsDrawable(true); - - // Set Rounded corners - rounded_corner_layer_1->SetRoundedCorner( - {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, - kRoundedCorner1Radius}); - rounded_corner_layer_2->SetRoundedCorner( - {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, - kRoundedCorner2Radius}); - - ExecuteCalculateDrawProperties(root.get(), kDeviceScale); - - // Since this effect node has 1 descendant with a rounded corner without a - // render surface along the chain, it need a render surface. - const EffectNode* effect_node = GetEffectNode(rounded_corner_layer_1.get()); - gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; - EXPECT_TRUE(effect_node->HasRenderSurface()); - EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), - kRoundedCorner1Radius); - EXPECT_EQ(rounded_corner_bounds_1.rect(), - gfx::RectF(kRoundedCornerLayer1Bound.size())); - - // Since this effect node has no descendants that draw and no descendant that - // has a rounded corner, it does not need a render surface. - effect_node = GetEffectNode(rounded_corner_layer_2.get()); - gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), - kRoundedCorner2Radius); - EXPECT_EQ(rounded_corner_bounds_2.rect(), - gfx::RectF(kRoundedCornerLayer2Bound.size())); - - host()->host_impl()->CreatePendingTree(); - host()->CommitAndCreatePendingTree(); - // TODO(https://crbug.com/939968) This call should be handled by - // FakeLayerTreeHost instead of manually pushing the properties from the - // layer tree host to the pending tree. - root->layer_tree_host()->PushLayerTreePropertiesTo(host()->pending_tree()); - host()->host_impl()->ActivateSyncTree(); - LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); - - // Get the layer impl for each Layer. - LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); - LayerImpl* rounded_corner_layer_1_impl = - layer_tree_impl->LayerById(rounded_corner_layer_1->id()); - LayerImpl* rounded_corner_layer_2_impl = - layer_tree_impl->LayerById(rounded_corner_layer_2->id()); - - // Set the root layer on host. - ExecuteCalculateDrawProperties(root_impl, kDeviceScale); - - // Rounded corner layer 1 - // The render target for this layer is |root|, hence its target - // bounds are relative to |root|. - // The offset from the origin of the render target is [0, 60] and the device - // scale factor is 1.6 thus giving the target space origin of [0, 96]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_1 = - rounded_corner_layer_1_impl->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(actual_self_rrect_1.IsEmpty()); - - gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; - bounds_in_target_space.Scale(kDeviceScale); - const gfx::RRectF actual_render_target_rrect_1 = - rounded_corner_layer_1_impl->render_target()->rounded_corner_bounds(); - EXPECT_EQ(actual_render_target_rrect_1.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_render_target_rrect_1.GetSimpleRadius(), - kRoundedCorner1Radius * kDeviceScale); - - // Rounded corner layer 2 - // The render target for this layer is |render_surface|. - // The offset from the origin of the render target is [0, 0]. - const gfx::RRectF actual_rrect_2 = - rounded_corner_layer_2_impl->draw_properties().rounded_corner_bounds; - bounds_in_target_space = kRoundedCornerLayer2Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_rrect_2.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_rrect_2.GetSimpleRadius(), - kRoundedCorner2Radius * kDeviceScale); -} - -// In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - FastRoundedCornerDoesNotTriggerRenderSurface) { - // Layer Tree: - // +root - // +--fast rounded corner layer [should not trigger render surface] - // +----layer 1 - // +----layer 2 - // +--rounded corner layer [should trigger render surface] - // +----layer 3 - // +----layer 4 - - constexpr int kRoundedCorner1Radius = 2; - constexpr int kRoundedCorner2Radius = 5; - - constexpr gfx::RectF kRoundedCornerLayer1Bound(0.f, 0.f, 50.f, 50.f); - constexpr gfx::RectF kRoundedCornerLayer2Bound(40.f, 40.f, 60.f, 60.f); - - constexpr float kDeviceScale = 1.6f; - - scoped_refptr<Layer> root = Layer::Create(); - scoped_refptr<Layer> fast_rounded_corner_layer = Layer::Create(); - scoped_refptr<Layer> layer_1 = Layer::Create(); - scoped_refptr<Layer> layer_2 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer = Layer::Create(); - scoped_refptr<Layer> layer_3 = Layer::Create(); - scoped_refptr<Layer> layer_4 = Layer::Create(); - - // Set up layer tree - root->AddChild(fast_rounded_corner_layer); - root->AddChild(rounded_corner_layer); - - fast_rounded_corner_layer->AddChild(layer_1); - fast_rounded_corner_layer->AddChild(layer_2); - - rounded_corner_layer->AddChild(layer_3); - rounded_corner_layer->AddChild(layer_4); - - // Set the root layer on host. - host()->SetRootLayer(root); - - // Set layer positions. - fast_rounded_corner_layer->SetPosition(kRoundedCornerLayer1Bound.origin()); - layer_1->SetPosition(gfx::PointF(0.f, 0.f)); - layer_2->SetPosition(gfx::PointF(25.f, 0.f)); - rounded_corner_layer->SetPosition(kRoundedCornerLayer2Bound.origin()); - layer_3->SetPosition(gfx::PointF(0.f, 0.f)); - layer_4->SetPosition(gfx::PointF(30.f, 0.f)); - - // Set up layer bounds. - root->SetBounds(gfx::Size(100, 100)); - fast_rounded_corner_layer->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); - layer_1->SetBounds(gfx::Size(25, 25)); - layer_2->SetBounds(gfx::Size(25, 25)); - rounded_corner_layer->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); - layer_3->SetBounds(gfx::Size(30, 60)); - layer_4->SetBounds(gfx::Size(30, 60)); - - root->SetIsDrawable(true); - fast_rounded_corner_layer->SetIsDrawable(true); - layer_1->SetIsDrawable(true); - layer_2->SetIsDrawable(true); - rounded_corner_layer->SetIsDrawable(true); - layer_3->SetIsDrawable(true); - layer_4->SetIsDrawable(true); - - // Set Rounded corners - fast_rounded_corner_layer->SetRoundedCorner( - {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, - kRoundedCorner1Radius}); - rounded_corner_layer->SetRoundedCorner( - {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, - kRoundedCorner2Radius}); - - fast_rounded_corner_layer->SetIsFastRoundedCorner(true); - - ExecuteCalculateDrawProperties(root.get(), kDeviceScale); - - // Since this layer has a fast rounded corner, it should not have a render - // surface even though it has 2 layers in the subtree that draws content. - const EffectNode* effect_node = - GetEffectNode(fast_rounded_corner_layer.get()); - gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_TRUE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), - kRoundedCorner1Radius); - EXPECT_EQ(rounded_corner_bounds_1.rect(), - gfx::RectF(kRoundedCornerLayer1Bound.size())); - - // Since this node has 2 descendants that draw, it will have a rounded corner. - effect_node = GetEffectNode(rounded_corner_layer.get()); - gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; - EXPECT_TRUE(effect_node->HasRenderSurface()); - EXPECT_FALSE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), - kRoundedCorner2Radius); - EXPECT_EQ(rounded_corner_bounds_2.rect(), - gfx::RectF(kRoundedCornerLayer2Bound.size())); - - host()->host_impl()->CreatePendingTree(); - host()->CommitAndCreatePendingTree(); - // TODO(https://crbug.com/939968) This call should be handled by - // FakeLayerTreeHost instead of manually pushing the properties from the - // layer tree host to the pending tree. - root->layer_tree_host()->PushLayerTreePropertiesTo(host()->pending_tree()); - host()->host_impl()->ActivateSyncTree(); - LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); - - // Get the layer impl for each Layer. - LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); - LayerImpl* fast_rounded_corner_layer_impl = - layer_tree_impl->LayerById(fast_rounded_corner_layer->id()); - LayerImpl* layer_1_impl = layer_tree_impl->LayerById(layer_1->id()); - LayerImpl* layer_2_impl = layer_tree_impl->LayerById(layer_2->id()); - LayerImpl* rounded_corner_layer_impl = - layer_tree_impl->LayerById(rounded_corner_layer->id()); - LayerImpl* layer_3_impl = layer_tree_impl->LayerById(layer_3->id()); - LayerImpl* layer_4_impl = layer_tree_impl->LayerById(layer_4->id()); - - // Set the root layer on host. - ExecuteCalculateDrawProperties(root_impl, kDeviceScale); - - // Fast rounded corner layer. - // The render target for this layer is |root|, hence its target bounds are - // relative to |root|. - // The offset from the origin of the render target is [0, 0] and the device - // scale factor is 1.6. - const gfx::RRectF actual_rrect_1 = - fast_rounded_corner_layer_impl->draw_properties().rounded_corner_bounds; - gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_rrect_1.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_rrect_1.GetSimpleRadius(), - kRoundedCorner1Radius * kDeviceScale); - - // Layer 1 and layer 2 rounded corner bounds - // This should have the same rounded corner boudns as fast rounded corner - // layer. - const gfx::RRectF layer_1_rrect = - layer_1_impl->draw_properties().rounded_corner_bounds; - const gfx::RRectF layer_2_rrect = - layer_2_impl->draw_properties().rounded_corner_bounds; - EXPECT_EQ(actual_rrect_1, layer_1_rrect); - EXPECT_EQ(actual_rrect_1, layer_2_rrect); - - // Rounded corner layer - // The render target for this layer is |root|. - // The offset from the origin of the render target is [40, 40] and the device - // scale factor is 1.6 thus giving the target space origin of [64, 64]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_2 = - rounded_corner_layer_impl->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(actual_self_rrect_2.IsEmpty()); - - bounds_in_target_space = kRoundedCornerLayer2Bound; - bounds_in_target_space.Scale(kDeviceScale); - const gfx::RRectF actual_render_target_rrect_2 = - rounded_corner_layer_impl->render_target()->rounded_corner_bounds(); - EXPECT_EQ(actual_render_target_rrect_2.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_render_target_rrect_2.GetSimpleRadius(), - kRoundedCorner2Radius * kDeviceScale); - - // Layer 3 and layer 4 should have no rounded corner bounds set as their - // parent is a render surface. - const gfx::RRectF layer_3_rrect = - layer_3_impl->draw_properties().rounded_corner_bounds; - const gfx::RRectF layer_4_rrect = - layer_4_impl->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(layer_3_rrect.IsEmpty()); - EXPECT_TRUE(layer_4_rrect.IsEmpty()); -} - -// In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - FastRoundedCornerTriggersRenderSurfaceInAncestor) { - // Layer Tree: - // +root - // +--rounded corner layer [1] [should trigger render surface] - // +----fast rounded corner layer [2] [should not trigger render surface] - // +--rounded corner layer [3] [should trigger render surface] - // +----rounded corner layer [4] [should not trigger render surface] - - constexpr int kRoundedCorner1Radius = 2; - constexpr int kRoundedCorner2Radius = 5; - constexpr int kRoundedCorner3Radius = 1; - constexpr int kRoundedCorner4Radius = 3; - - constexpr gfx::RectF kRoundedCornerLayer1Bound(5.f, 5.f, 50.f, 50.f); - constexpr gfx::RectF kRoundedCornerLayer2Bound(0.f, 0.f, 25.f, 25.f); - constexpr gfx::RectF kRoundedCornerLayer3Bound(40.f, 40.f, 60.f, 60.f); - constexpr gfx::RectF kRoundedCornerLayer4Bound(30.f, 0.f, 30.f, 60.f); - - constexpr float kDeviceScale = 1.6f; - - scoped_refptr<Layer> root = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); - scoped_refptr<Layer> fast_rounded_corner_layer_2 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_3 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_4 = Layer::Create(); - - // Set up layer tree - root->AddChild(rounded_corner_layer_1); - root->AddChild(rounded_corner_layer_3); - - rounded_corner_layer_1->AddChild(fast_rounded_corner_layer_2); - - rounded_corner_layer_3->AddChild(rounded_corner_layer_4); - - // Set the root layer on host. - host()->SetRootLayer(root); - - // Set layer positions. - rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); - fast_rounded_corner_layer_2->SetPosition(kRoundedCornerLayer2Bound.origin()); - rounded_corner_layer_3->SetPosition(kRoundedCornerLayer3Bound.origin()); - rounded_corner_layer_4->SetPosition(kRoundedCornerLayer4Bound.origin()); - - // Set up layer bounds. - root->SetBounds(gfx::Size(100, 100)); - rounded_corner_layer_1->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); - fast_rounded_corner_layer_2->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); - rounded_corner_layer_3->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer3Bound.size())); - rounded_corner_layer_4->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer4Bound.size())); - - root->SetIsDrawable(true); - rounded_corner_layer_1->SetIsDrawable(true); - fast_rounded_corner_layer_2->SetIsDrawable(true); - rounded_corner_layer_3->SetIsDrawable(true); - rounded_corner_layer_4->SetIsDrawable(true); - - // Set Rounded corners - rounded_corner_layer_1->SetRoundedCorner( - {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, - kRoundedCorner1Radius}); - fast_rounded_corner_layer_2->SetRoundedCorner( - {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, - kRoundedCorner2Radius}); - rounded_corner_layer_3->SetRoundedCorner( - {kRoundedCorner3Radius, kRoundedCorner3Radius, kRoundedCorner3Radius, - kRoundedCorner3Radius}); - rounded_corner_layer_4->SetRoundedCorner( - {kRoundedCorner4Radius, kRoundedCorner4Radius, kRoundedCorner4Radius, - kRoundedCorner4Radius}); - - fast_rounded_corner_layer_2->SetIsFastRoundedCorner(true); - - ExecuteCalculateDrawProperties(root.get(), kDeviceScale); - - // Since this layer has a descendant that has rounded corner, this node will - // require a render surface. - const EffectNode* effect_node = GetEffectNode(rounded_corner_layer_1.get()); - gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; - EXPECT_TRUE(effect_node->HasRenderSurface()); - EXPECT_FALSE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), - kRoundedCorner1Radius); - EXPECT_EQ(rounded_corner_bounds_1.rect(), - gfx::RectF(kRoundedCornerLayer1Bound.size())); - - // Since this layer has no descendant with rounded corner or drawable, it will - // not have a render surface. - effect_node = GetEffectNode(fast_rounded_corner_layer_2.get()); - gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_TRUE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), - kRoundedCorner2Radius); - EXPECT_EQ(rounded_corner_bounds_2.rect(), - gfx::RectF(kRoundedCornerLayer2Bound.size())); - - // Since this layer has 1 descendant with a rounded corner, it should have a - // render surface. - effect_node = GetEffectNode(rounded_corner_layer_3.get()); - gfx::RRectF rounded_corner_bounds_3 = effect_node->rounded_corner_bounds; - EXPECT_TRUE(effect_node->HasRenderSurface()); - EXPECT_FALSE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_3.GetSimpleRadius(), - kRoundedCorner3Radius); - EXPECT_EQ(rounded_corner_bounds_3.rect(), - gfx::RectF(kRoundedCornerLayer3Bound.size())); - - // Since this layer no descendants, it would no thave a render pass. - effect_node = GetEffectNode(rounded_corner_layer_4.get()); - gfx::RRectF rounded_corner_bounds_4 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_FALSE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_4.GetSimpleRadius(), - kRoundedCorner4Radius); - EXPECT_EQ(rounded_corner_bounds_4.rect(), - gfx::RectF(kRoundedCornerLayer4Bound.size())); - - host()->host_impl()->CreatePendingTree(); - host()->CommitAndCreatePendingTree(); - // TODO(https://crbug.com/939968) This call should be handled by - // FakeLayerTreeHost instead of manually pushing the properties from the - // layer tree host to the pending tree. - root->layer_tree_host()->PushLayerTreePropertiesTo(host()->pending_tree()); - host()->host_impl()->ActivateSyncTree(); - LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); - - // Get the layer impl for each Layer. - LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); - LayerImpl* rounded_corner_layer_impl_1 = - layer_tree_impl->LayerById(rounded_corner_layer_1->id()); - LayerImpl* fast_rounded_corner_layer_impl_2 = - layer_tree_impl->LayerById(fast_rounded_corner_layer_2->id()); - LayerImpl* rounded_corner_layer_impl_3 = - layer_tree_impl->LayerById(rounded_corner_layer_3->id()); - LayerImpl* rounded_corner_layer_impl_4 = - layer_tree_impl->LayerById(rounded_corner_layer_4->id()); - - // Set the root layer on host. - ExecuteCalculateDrawProperties(root_impl, kDeviceScale); - - // Rounded corner layer 1. - // The render target for this layer is |root|, hence its target bounds are - // relative to |root|. - // The offset from the origin of the render target is [5, 5] and the device - // scale factor is 1.6 giving a total offset of [8, 8]. - const gfx::RRectF actual_self_rrect_1 = - rounded_corner_layer_impl_1->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(actual_self_rrect_1.IsEmpty()); - - gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; - bounds_in_target_space.Scale(kDeviceScale); - const gfx::RRectF actual_render_target_rrect_1 = - rounded_corner_layer_impl_1->render_target()->rounded_corner_bounds(); - EXPECT_EQ(actual_render_target_rrect_1.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_render_target_rrect_1.GetSimpleRadius(), - kRoundedCorner1Radius * kDeviceScale); - - // Fast rounded corner layer 2 - // The render target for this layer is |rounded_corner_layer_1|. - // The offset from the origin of the render target is [0, 0] and the device - // scale factor is 1.6. The corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_2 = - fast_rounded_corner_layer_impl_2->draw_properties().rounded_corner_bounds; - bounds_in_target_space = kRoundedCornerLayer2Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_self_rrect_2.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_self_rrect_2.GetSimpleRadius(), - kRoundedCorner2Radius * kDeviceScale); - - // Rounded corner layer 3 - // The render target for this layer is |root|. - // The offset from the origin of the render target is [40, 40] and the device - // scale factor is 1.6 thus giving the target space origin of [64, 64]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_3 = - rounded_corner_layer_impl_3->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(actual_self_rrect_3.IsEmpty()); - - bounds_in_target_space = kRoundedCornerLayer3Bound; - bounds_in_target_space.Scale(kDeviceScale); - const gfx::RRectF actual_render_target_rrect_3 = - rounded_corner_layer_impl_3->render_target()->rounded_corner_bounds(); - EXPECT_EQ(actual_render_target_rrect_3.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_render_target_rrect_3.GetSimpleRadius(), - kRoundedCorner3Radius * kDeviceScale); - - // Rounded corner layer 4 - // The render target for this layer is |rounded_corner_layer_3|. - // The offset from the origin of the render target is [30, 0] and the device - // scale factor is 1.6 thus giving the target space origin of [48, 0]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_4 = - rounded_corner_layer_impl_4->draw_properties().rounded_corner_bounds; - bounds_in_target_space = kRoundedCornerLayer4Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_self_rrect_4.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_self_rrect_4.GetSimpleRadius(), - kRoundedCorner4Radius * kDeviceScale); -} - -// In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - FastRoundedCornerDoesNotTriggerRenderSurfaceFromSubtree) { - // Layer Tree: - // +root - // +--fast rounded corner layer 1 [should trigger render surface] - // +----rounded corner layer 1 [should not trigger render surface] - // +--rounded corner layer 2 [should trigger render surface] - // +----rounded corner layer 3 [should not trigger render surface] - constexpr int kRoundedCorner1Radius = 2; - constexpr int kRoundedCorner2Radius = 5; - constexpr int kRoundedCorner3Radius = 4; - constexpr int kRoundedCorner4Radius = 5; - - constexpr gfx::RectF kRoundedCornerLayer1Bound(10.f, 5.f, 45.f, 50.f); - constexpr gfx::RectF kRoundedCornerLayer2Bound(5.f, 5.f, 20.f, 20.f); - constexpr gfx::RectF kRoundedCornerLayer3Bound(60.f, 5.f, 40.f, 25.f); - constexpr gfx::RectF kRoundedCornerLayer4Bound(0.f, 10.f, 10.f, 20.f); - - constexpr float kDeviceScale = 1.6f; - - scoped_refptr<Layer> root = Layer::Create(); - scoped_refptr<Layer> fast_rounded_corner_layer_1 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_2 = Layer::Create(); - scoped_refptr<Layer> rounded_corner_layer_3 = Layer::Create(); - - // Set up layer tree - root->AddChild(fast_rounded_corner_layer_1); - root->AddChild(rounded_corner_layer_2); - - fast_rounded_corner_layer_1->AddChild(rounded_corner_layer_1); - rounded_corner_layer_2->AddChild(rounded_corner_layer_3); - - // Set the root layer on host. - host()->SetRootLayer(root); - - // Set layer positions. - fast_rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); - rounded_corner_layer_1->SetPosition(kRoundedCornerLayer2Bound.origin()); - rounded_corner_layer_2->SetPosition(kRoundedCornerLayer3Bound.origin()); - rounded_corner_layer_3->SetPosition(kRoundedCornerLayer4Bound.origin()); - - // Set up layer bounds. - root->SetBounds(gfx::Size(100, 100)); - fast_rounded_corner_layer_1->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); - rounded_corner_layer_1->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); - rounded_corner_layer_2->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer3Bound.size())); - rounded_corner_layer_3->SetBounds( - gfx::ToRoundedSize(kRoundedCornerLayer4Bound.size())); - - root->SetIsDrawable(true); - fast_rounded_corner_layer_1->SetIsDrawable(true); - rounded_corner_layer_1->SetIsDrawable(true); - rounded_corner_layer_2->SetIsDrawable(true); - rounded_corner_layer_3->SetIsDrawable(true); - - // Set Rounded corners - fast_rounded_corner_layer_1->SetRoundedCorner( - {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, - kRoundedCorner1Radius}); - rounded_corner_layer_1->SetRoundedCorner( - {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, - kRoundedCorner2Radius}); - rounded_corner_layer_2->SetRoundedCorner( - {kRoundedCorner3Radius, kRoundedCorner3Radius, kRoundedCorner3Radius, - kRoundedCorner3Radius}); - rounded_corner_layer_3->SetRoundedCorner( - {kRoundedCorner4Radius, kRoundedCorner4Radius, kRoundedCorner4Radius, - kRoundedCorner4Radius}); - - fast_rounded_corner_layer_1->SetIsFastRoundedCorner(true); - - ExecuteCalculateDrawProperties(root.get(), kDeviceScale); - - // Since this layer has a descendant with rounded corner, it needs a render - // surface. - const EffectNode* effect_node = - GetEffectNode(fast_rounded_corner_layer_1.get()); - gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; - EXPECT_TRUE(effect_node->HasRenderSurface()); - EXPECT_TRUE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), - kRoundedCorner1Radius); - EXPECT_EQ(rounded_corner_bounds_1.rect(), - gfx::RectF(kRoundedCornerLayer1Bound.size())); - - // Since this layer has no descendant with rounded corner or drawable, it will - // not have a render surface. - effect_node = GetEffectNode(rounded_corner_layer_1.get()); - gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_FALSE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), - kRoundedCorner2Radius); - EXPECT_EQ(rounded_corner_bounds_2.rect(), - gfx::RectF(kRoundedCornerLayer2Bound.size())); - - // Since this layer has a descendant with rounded corner, it should have a - // render surface. - effect_node = GetEffectNode(rounded_corner_layer_2.get()); - gfx::RRectF rounded_corner_bounds_3 = effect_node->rounded_corner_bounds; - EXPECT_TRUE(effect_node->HasRenderSurface()); - EXPECT_FALSE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_3.GetSimpleRadius(), - kRoundedCorner3Radius); - EXPECT_EQ(rounded_corner_bounds_3.rect(), - gfx::RectF(kRoundedCornerLayer3Bound.size())); - - // Since this layer has no descendant, it does not need a render surface. - effect_node = GetEffectNode(rounded_corner_layer_3.get()); - gfx::RRectF rounded_corner_bounds_4 = effect_node->rounded_corner_bounds; - EXPECT_FALSE(effect_node->HasRenderSurface()); - EXPECT_FALSE(effect_node->is_fast_rounded_corner); - EXPECT_FLOAT_EQ(rounded_corner_bounds_4.GetSimpleRadius(), - kRoundedCorner4Radius); - EXPECT_EQ(rounded_corner_bounds_4.rect(), - gfx::RectF(kRoundedCornerLayer4Bound.size())); - - host()->host_impl()->CreatePendingTree(); - host()->CommitAndCreatePendingTree(); - // TODO(https://crbug.com/939968) This call should be handled by - // FakeLayerTreeHost instead of manually pushing the properties from the - // layer tree host to the pending tree. - root->layer_tree_host()->PushLayerTreePropertiesTo(host()->pending_tree()); - host()->host_impl()->ActivateSyncTree(); - LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); - - // Get the layer impl for each Layer. - LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); - LayerImpl* fast_rounded_corner_layer_impl_1 = - layer_tree_impl->LayerById(fast_rounded_corner_layer_1->id()); - LayerImpl* rounded_corner_layer_impl_1 = - layer_tree_impl->LayerById(rounded_corner_layer_1->id()); - LayerImpl* rounded_corner_layer_impl_2 = - layer_tree_impl->LayerById(rounded_corner_layer_2->id()); - LayerImpl* rounded_corner_layer_impl_3 = - layer_tree_impl->LayerById(rounded_corner_layer_3->id()); - - // Set the root layer on host. - ExecuteCalculateDrawProperties(root_impl, kDeviceScale); - - // Fast rounded corner layer 1. - // The render target for this layer is |root|, hence its target bounds are - // relative to |root|. - // The offset from the origin of the render target is [5, 5] and the device - // scale factor is 1.6. - const gfx::RRectF actual_self_rrect_1 = - fast_rounded_corner_layer_impl_1->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(actual_self_rrect_1.IsEmpty()); - - gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; - bounds_in_target_space.Scale(kDeviceScale); - const gfx::RRectF actual_render_target_rrect_1 = - fast_rounded_corner_layer_impl_1->render_target() - ->rounded_corner_bounds(); - EXPECT_EQ(actual_render_target_rrect_1.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_render_target_rrect_1.GetSimpleRadius(), - kRoundedCorner1Radius * kDeviceScale); - - // Rounded corner layer 1 - // The render target for this layer is |fast_rounded_corner_layer_1|. - // The offset from the origin of the render target is [0, 0] and the device - // scale factor is 1.6. The corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_2 = - rounded_corner_layer_impl_1->draw_properties().rounded_corner_bounds; - bounds_in_target_space = kRoundedCornerLayer2Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_self_rrect_2.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_self_rrect_2.GetSimpleRadius(), - kRoundedCorner2Radius * kDeviceScale); - - // Rounded corner layer 3 - // The render target for this layer is |root|. - // The offset from the origin of the render target is [5, 5] and the device - // scale factor is 1.6 thus giving the target space origin of [8, 8]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_3 = - rounded_corner_layer_impl_2->draw_properties().rounded_corner_bounds; - EXPECT_TRUE(actual_self_rrect_3.IsEmpty()); - - bounds_in_target_space = kRoundedCornerLayer3Bound; - bounds_in_target_space.Scale(kDeviceScale); - const gfx::RRectF actual_render_target_rrect_3 = - rounded_corner_layer_impl_2->render_target()->rounded_corner_bounds(); - EXPECT_EQ(actual_render_target_rrect_3.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_render_target_rrect_3.GetSimpleRadius(), - kRoundedCorner3Radius * kDeviceScale); - - // Rounded corner layer 4 - // The render target for this layer is |rounded_corner_layer_2|. - // The offset from the origin of the render target is [0, 5] and the device - // scale factor is 1.6 thus giving the target space origin of [0, 8]. The - // corner radius is also scaled by a factor of 1.6. - const gfx::RRectF actual_self_rrect_4 = - rounded_corner_layer_impl_3->draw_properties().rounded_corner_bounds; - bounds_in_target_space = kRoundedCornerLayer4Bound; - bounds_in_target_space.Scale(kDeviceScale); - EXPECT_EQ(actual_self_rrect_4.rect(), bounds_in_target_space); - EXPECT_FLOAT_EQ(actual_self_rrect_4.GetSimpleRadius(), - kRoundedCorner4Radius * kDeviceScale); -} - -// In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, CustomLayerClipBounds) { +TEST_F(DrawPropertiesTestWithLayerTree, CustomLayerClipBounds) { // The custom clip API should have the same effect as if an intermediate // clip layer has been added to the layer tree. To check this the test creates // 2 subtree for a root layer. One of the subtree uses the clip API to clip @@ -10435,24 +7942,17 @@ parent->SetClipRect(kClipBounds); clip_layer->SetMasksToBounds(true); - ExecuteCalculateDrawProperties(root.get(), kDeviceScale); + UpdateMainDrawProperties(kDeviceScale); EXPECT_EQ(GetClipNode(parent.get())->clip, gfx::RectF(kClipBounds)); EXPECT_TRUE(!parent->clip_rect().IsEmpty()); EXPECT_EQ(GetClipNode(child.get())->clip, gfx::RectF(kClipBounds)); - host()->host_impl()->CreatePendingTree(); - host()->CommitAndCreatePendingTree(); - // TODO(https://crbug.com/939968) This call should be handled by - // FakeLayerTreeHost instead of manually pushing the properties from the - // layer tree host to the pending tree. - root->layer_tree_host()->PushLayerTreePropertiesTo(host()->pending_tree()); - host()->host_impl()->ActivateSyncTree(); + CommitAndActivate(kDeviceScale); LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); // Get the layer impl for each Layer. - LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); LayerImpl* parent_impl = layer_tree_impl->LayerById(parent->id()); LayerImpl* child_impl = layer_tree_impl->LayerById(child->id()); LayerImpl* expected_parent_impl = @@ -10460,7 +7960,7 @@ LayerImpl* expected_child_impl = layer_tree_impl->LayerById(expected_child->id()); - ExecuteCalculateDrawProperties(root_impl, kDeviceScale); + EXPECT_EQ(kDeviceScale, layer_tree_impl->device_scale_factor()); EXPECT_TRUE(parent_impl->is_clipped()); EXPECT_TRUE(child_impl->is_clipped()); @@ -10472,8 +7972,7 @@ } // In layer tree mode, not using impl-side PropertyTreeBuilder. -TEST_F(LayerTreeHostCommonTestWithLayerTree, - CustomLayerClipBoundsWithMaskToBounds) { +TEST_F(DrawPropertiesTestWithLayerTree, CustomLayerClipBoundsWithMaskToBounds) { // The custom clip API should have the same effect as if an intermediate // clip layer has been added to the layer tree. To check this the test creates // 2 subtree for a root layer. One of the subtree uses the clip API to clip @@ -10545,7 +8044,7 @@ clip_layer->SetMasksToBounds(true); expected_parent->SetMasksToBounds(true); - ExecuteCalculateDrawProperties(root.get(), kDeviceScale); + UpdateMainDrawProperties(kDeviceScale); const gfx::RectF expected_clip_bounds = gfx::IntersectRects( gfx::RectF(kClipBounds), gfx::RectF(kParentLayerBounds)); @@ -10554,17 +8053,10 @@ EXPECT_EQ(GetClipNode(child.get())->clip, expected_clip_bounds); - host()->host_impl()->CreatePendingTree(); - host()->CommitAndCreatePendingTree(); - // TODO(https://crbug.com/939968) This call should be handled by - // FakeLayerTreeHost instead of manually pushing the properties from the - // layer tree host to the pending tree. - root->layer_tree_host()->PushLayerTreePropertiesTo(host()->pending_tree()); - host()->host_impl()->ActivateSyncTree(); + CommitAndActivate(kDeviceScale); LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); // Get the layer impl for each Layer. - LayerImpl* root_impl = layer_tree_impl->LayerById(root->id()); LayerImpl* parent_impl = layer_tree_impl->LayerById(parent->id()); LayerImpl* child_impl = layer_tree_impl->LayerById(child->id()); LayerImpl* expected_parent_impl = @@ -10572,7 +8064,7 @@ LayerImpl* expected_child_impl = layer_tree_impl->LayerById(expected_child->id()); - ExecuteCalculateDrawProperties(root_impl, kDeviceScale); + EXPECT_EQ(kDeviceScale, layer_tree_impl->device_scale_factor()); EXPECT_TRUE(parent_impl->is_clipped()); EXPECT_TRUE(child_impl->is_clipped());
diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc index aede10a6c..5a41d0c 100644 --- a/cc/trees/draw_property_utils.cc +++ b/cc/trees/draw_property_utils.cc
@@ -8,6 +8,7 @@ #include <vector> +#include "base/containers/adapters.h" #include "base/containers/stack.h" #include "cc/base/math_util.h" #include "cc/layers/draw_properties.h" @@ -29,21 +30,21 @@ namespace { -static gfx::Rect ToEnclosingClipRect(const gfx::RectF& clip_rect) { +gfx::Rect ToEnclosingClipRect(const gfx::RectF& clip_rect) { constexpr float kClipError = 0.00001f; return gfx::ToEnclosingRectIgnoringError(clip_rect, kClipError); } -static bool IsRootLayer(const Layer* layer) { +bool IsRootLayer(const Layer* layer) { return !layer->parent(); } -static bool IsRootLayer(const LayerImpl* layer) { +bool IsRootLayer(const LayerImpl* layer) { return layer->layer_tree_impl()->IsRootLayer(layer); } -static void PostConcatSurfaceContentsScale(const EffectNode* effect_node, - gfx::Transform* transform) { +void PostConcatSurfaceContentsScale(const EffectNode* effect_node, + gfx::Transform* transform) { if (!effect_node) { // This can happen when PaintArtifactCompositor builds property trees as it // doesn't set effect ids on clip nodes. @@ -54,11 +55,11 @@ effect_node->surface_contents_scale.y(), 1.f); } -static bool ConvertRectBetweenSurfaceSpaces(const PropertyTrees* property_trees, - int source_effect_id, - int dest_effect_id, - gfx::RectF clip_in_source_space, - gfx::RectF* clip_in_dest_space) { +bool ConvertRectBetweenSurfaceSpaces(const PropertyTrees* property_trees, + int source_effect_id, + int dest_effect_id, + gfx::RectF clip_in_source_space, + gfx::RectF* clip_in_dest_space) { const EffectNode* source_effect_node = property_trees->effect_tree.Node(source_effect_id); int source_transform_id = source_effect_node->transform_id; @@ -88,7 +89,7 @@ return true; } -static ConditionalClip ComputeTargetRectInLocalSpace( +ConditionalClip ComputeTargetRectInLocalSpace( gfx::RectF rect, const PropertyTrees* property_trees, int target_transform_id, @@ -109,7 +110,7 @@ MathUtil::ProjectClippedRect(target_to_local, rect)}; } -static ConditionalClip ComputeLocalRectInTargetSpace( +ConditionalClip ComputeLocalRectInTargetSpace( gfx::RectF rect, const PropertyTrees* property_trees, int current_transform_id, @@ -130,10 +131,10 @@ MathUtil::ProjectClippedRect(current_to_target, rect)}; } -static ConditionalClip ComputeCurrentClip(const ClipNode* clip_node, - const PropertyTrees* property_trees, - int target_transform_id, - int target_effect_id) { +ConditionalClip ComputeCurrentClip(const ClipNode* clip_node, + const PropertyTrees* property_trees, + int target_transform_id, + int target_effect_id) { if (clip_node->transform_id != target_transform_id) { return ComputeLocalRectInTargetSpace(clip_node->clip, property_trees, clip_node->transform_id, @@ -151,12 +152,12 @@ return ConditionalClip{true /* is_clipped */, current_clip}; } -static bool ApplyClipNodeToAccumulatedClip(const PropertyTrees* property_trees, - bool include_expanding_clips, - int target_id, - int target_transform_id, - const ClipNode* clip_node, - gfx::RectF* accumulated_clip) { +bool ApplyClipNodeToAccumulatedClip(const PropertyTrees* property_trees, + bool include_expanding_clips, + int target_id, + int target_transform_id, + const ClipNode* clip_node, + gfx::RectF* accumulated_clip) { switch (clip_node->clip_type) { case ClipNode::ClipType::APPLIES_LOCAL_CLIP: { ConditionalClip current_clip = ComputeCurrentClip( @@ -206,10 +207,10 @@ return true; } -static ConditionalClip ComputeAccumulatedClip(PropertyTrees* property_trees, - bool include_expanding_clips, - int local_clip_id, - int target_id) { +ConditionalClip ComputeAccumulatedClip(PropertyTrees* property_trees, + bool include_expanding_clips, + int local_clip_id, + int target_id) { ClipRectData* cached_data = property_trees->FetchClipRectFromCache(local_clip_id, target_id); if (cached_data->target_id != EffectTree::kInvalidNodeId) { @@ -324,15 +325,14 @@ return clip; } -static bool HasSingularTransform(int transform_tree_index, - const TransformTree& tree) { +bool HasSingularTransform(int transform_tree_index, const TransformTree& tree) { const TransformNode* node = tree.Node(transform_tree_index); return !node->is_invertible || !node->ancestors_are_invertible; } -static int LowestCommonAncestor(int clip_id_1, - int clip_id_2, - const ClipTree* clip_tree) { +int LowestCommonAncestor(int clip_id_1, + int clip_id_2, + const ClipTree* clip_tree) { const ClipNode* clip_node_1 = clip_tree->Node(clip_id_1); const ClipNode* clip_node_2 = clip_tree->Node(clip_id_2); while (clip_node_1->id != clip_node_2->id) { @@ -344,9 +344,9 @@ return clip_node_1->id; } -static void SetHasContributingLayerThatEscapesClip(int lca_clip_id, - int target_effect_id, - EffectTree* effect_tree) { +void SetHasContributingLayerThatEscapesClip(int lca_clip_id, + int target_effect_id, + EffectTree* effect_tree) { const EffectNode* effect_node = effect_tree->Node(target_effect_id); // Find all ancestor targets starting from effect_node who are clipped by // a descendant of lowest ancestor clip and set their @@ -361,14 +361,14 @@ } template <typename LayerType> -static int TransformTreeIndexForBackfaceVisibility(LayerType* layer, - const TransformTree& tree) { +int TransformTreeIndexForBackfaceVisibility(LayerType* layer, + const TransformTree& tree) { if (!layer->use_parent_backface_visibility() || !layer->has_transform_node()) return layer->transform_tree_index(); return tree.Node(layer->transform_tree_index())->parent_id; } -static bool IsTargetSpaceTransformBackFaceVisible( +bool IsTargetSpaceTransformBackFaceVisible( Layer* layer, int transform_tree_index, const PropertyTrees* property_trees) { @@ -377,7 +377,7 @@ return false; } -static bool IsTargetSpaceTransformBackFaceVisible( +bool IsTargetSpaceTransformBackFaceVisible( LayerImpl* layer, int transform_tree_index, const PropertyTrees* property_trees) { @@ -389,30 +389,30 @@ } template <typename LayerType> -static bool IsLayerBackFaceVisible(LayerType* layer, - int transform_tree_index, - const PropertyTrees* property_trees) { +bool IsLayerBackFaceVisible(LayerType* layer, + int transform_tree_index, + const PropertyTrees* property_trees) { return IsTargetSpaceTransformBackFaceVisible(layer, transform_tree_index, property_trees); } -static inline bool TransformToScreenIsKnown(Layer* layer, - int transform_tree_index, - const TransformTree& tree) { +inline bool TransformToScreenIsKnown(Layer* layer, + int transform_tree_index, + const TransformTree& tree) { const TransformNode* node = tree.Node(transform_tree_index); return !node->to_screen_is_potentially_animated; } -static inline bool TransformToScreenIsKnown(LayerImpl* layer, - int transform_tree_index, - const TransformTree& tree) { +inline bool TransformToScreenIsKnown(LayerImpl* layer, + int transform_tree_index, + const TransformTree& tree) { return true; } template <typename LayerType> -static bool LayerNeedsUpdateInternal(LayerType* layer, - bool layer_is_drawn, - const PropertyTrees* property_trees) { +bool LayerNeedsUpdate(LayerType* layer, + bool layer_is_drawn, + const PropertyTrees* property_trees) { // Layers can be skipped if any of these conditions are met. // - is not drawn due to it or one of its ancestors being hidden (or having // no copy requests). @@ -453,7 +453,7 @@ } template <typename LayerType> -static inline bool LayerShouldBeSkippedInternal( +inline bool LayerShouldBeSkippedForDrawPropertiesComputation( LayerType* layer, const TransformTree& transform_tree, const EffectTree& effect_tree) { @@ -469,7 +469,7 @@ effect_node->hidden_by_backface_visibility || !effect_node->is_drawn; } -static gfx::Rect LayerDrawableContentRect( +gfx::Rect LayerDrawableContentRect( const LayerImpl* layer, const gfx::Rect& layer_bounds_in_target_space, const gfx::Rect& clip_rect) { @@ -479,8 +479,8 @@ return layer_bounds_in_target_space; } -static void SetSurfaceIsClipped(const ClipTree& clip_tree, - RenderSurfaceImpl* render_surface) { +void SetSurfaceIsClipped(const ClipTree& clip_tree, + RenderSurfaceImpl* render_surface) { bool is_clipped; if (render_surface->EffectTreeIndex() == EffectTree::kContentsRootNodeId) { // Root render surface is always clipped. @@ -503,8 +503,8 @@ render_surface->SetIsClipped(is_clipped); } -static void SetSurfaceDrawOpacity(const EffectTree& tree, - RenderSurfaceImpl* render_surface) { +void SetSurfaceDrawOpacity(const EffectTree& tree, + RenderSurfaceImpl* render_surface) { // Draw opacity of a surface is the product of opacities between the surface // (included) and its target surface (excluded). const EffectNode* node = tree.Node(render_surface->EffectTreeIndex()); @@ -516,7 +516,7 @@ render_surface->SetDrawOpacity(draw_opacity); } -static float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) { +float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) { if (!layer->render_target()) return 0.f; @@ -535,8 +535,8 @@ } template <typename LayerType> -static gfx::Transform ScreenSpaceTransformInternal(LayerType* layer, - const TransformTree& tree) { +gfx::Transform ScreenSpaceTransformInternal(LayerType* layer, + const TransformTree& tree) { gfx::Transform xform(1, 0, 0, 1, layer->offset_to_transform_parent().x(), layer->offset_to_transform_parent().y()); gfx::Transform ssxform = tree.ToScreen(layer->transform_tree_index()); @@ -546,9 +546,9 @@ return xform; } -static void SetSurfaceClipRect(const ClipNode* parent_clip_node, - PropertyTrees* property_trees, - RenderSurfaceImpl* render_surface) { +void SetSurfaceClipRect(const ClipNode* parent_clip_node, + PropertyTrees* property_trees, + RenderSurfaceImpl* render_surface) { if (!render_surface->is_clipped()) { render_surface->SetClipRect(gfx::Rect()); return; @@ -572,8 +572,8 @@ } } -static void SetSurfaceDrawTransform(const PropertyTrees* property_trees, - RenderSurfaceImpl* render_surface) { +void SetSurfaceDrawTransform(const PropertyTrees* property_trees, + RenderSurfaceImpl* render_surface) { const TransformTree& transform_tree = property_trees->transform_tree; const EffectTree& effect_tree = property_trees->effect_tree; const TransformNode* transform_node = @@ -596,8 +596,7 @@ render_surface->SetDrawTransform(render_surface_transform); } -static gfx::Rect LayerVisibleRect(PropertyTrees* property_trees, - LayerImpl* layer) { +gfx::Rect LayerVisibleRect(PropertyTrees* property_trees, LayerImpl* layer) { const EffectNode* effect_node = property_trees->effect_tree.Node(layer->effect_tree_index()); int effect_ancestor_with_cache_render_surface = @@ -647,8 +646,7 @@ return visible_rect; } -static ConditionalClip LayerClipRect(PropertyTrees* property_trees, - LayerImpl* layer) { +ConditionalClip LayerClipRect(PropertyTrees* property_trees, LayerImpl* layer) { const EffectTree* effect_tree = &property_trees->effect_tree; const EffectNode* effect_node = effect_tree->Node(layer->effect_tree_index()); const EffectNode* target_node = @@ -660,7 +658,7 @@ layer->clip_tree_index(), target_node->id); } -static std::pair<gfx::RRectF, bool> GetRoundedCornerRRect( +std::pair<gfx::RRectF, bool> GetRoundedCornerRRect( const PropertyTrees* property_trees, int effect_tree_index, bool for_render_surface) { @@ -712,7 +710,7 @@ return std::make_pair(gfx::RRectF(result), node->is_fast_rounded_corner); } -static void UpdateRenderTarget(EffectTree* effect_tree) { +void UpdateRenderTarget(EffectTree* effect_tree) { for (int i = EffectTree::kContentsRootNodeId; i < static_cast<int>(effect_tree->size()); ++i) { EffectNode* node = effect_tree->Node(i); @@ -727,7 +725,7 @@ } } -static void ComputeClips(PropertyTrees* property_trees) { +void ComputeClips(PropertyTrees* property_trees) { DCHECK(!property_trees->transform_tree.needs_update()); ClipTree* clip_tree = &property_trees->clip_tree; if (!clip_tree->needs_update()) @@ -757,169 +755,293 @@ clip_tree->set_needs_update(false); } -} // namespace +void ComputeSurfaceDrawProperties(PropertyTrees* property_trees, + RenderSurfaceImpl* render_surface) { + SetSurfaceIsClipped(property_trees->clip_tree, render_surface); + SetSurfaceDrawOpacity(property_trees->effect_tree, render_surface); + SetSurfaceDrawTransform(property_trees, render_surface); -void ConcatInverseSurfaceContentsScale(const EffectNode* effect_node, - gfx::Transform* transform) { - DCHECK(effect_node->HasRenderSurface()); - if (effect_node->surface_contents_scale.x() != 0.0 && - effect_node->surface_contents_scale.y() != 0.0) - transform->Scale(1.0 / effect_node->surface_contents_scale.x(), - 1.0 / effect_node->surface_contents_scale.y()); + render_surface->SetRoundedCornerRRect( + GetRoundedCornerRRect(property_trees, render_surface->EffectTreeIndex(), + /*for_render_surface*/ true) + .first); + render_surface->SetScreenSpaceTransform( + property_trees->ToScreenSpaceTransformWithoutSurfaceContentsScale( + render_surface->TransformTreeIndex(), + render_surface->EffectTreeIndex())); + + const ClipNode* clip_node = + property_trees->clip_tree.Node(render_surface->ClipTreeIndex()); + SetSurfaceClipRect(clip_node, property_trees, render_surface); } -bool LayerShouldBeSkippedForDrawPropertiesComputation( - LayerImpl* layer, - const TransformTree& transform_tree, - const EffectTree& effect_tree) { - return LayerShouldBeSkippedInternal(layer, transform_tree, effect_tree); -} +void AddSurfaceToRenderSurfaceList(RenderSurfaceImpl* render_surface, + RenderSurfaceList* render_surface_list, + PropertyTrees* property_trees) { + // |render_surface| must appear after its target, so first make sure its + // target is in the list. + RenderSurfaceImpl* target = render_surface->render_target(); + bool is_root = + render_surface->EffectTreeIndex() == EffectTree::kContentsRootNodeId; + if (!is_root && !target->is_render_surface_list_member()) { + AddSurfaceToRenderSurfaceList(target, render_surface_list, property_trees); + } + render_surface->ClearAccumulatedContentRect(); + render_surface_list->push_back(render_surface); + render_surface->set_is_render_surface_list_member(true); + if (is_root) { + // The root surface does not contribute to any other surface, it has no + // target. + render_surface->set_contributes_to_drawn_surface(false); + } else { + bool contributes_to_drawn_surface = + property_trees->effect_tree.ContributesToDrawnSurface( + render_surface->EffectTreeIndex()); + render_surface->set_contributes_to_drawn_surface( + contributes_to_drawn_surface); + } -bool LayerShouldBeSkippedForDrawPropertiesComputation( - Layer* layer, - const TransformTree& transform_tree, - const EffectTree& effect_tree) { - return LayerShouldBeSkippedInternal(layer, transform_tree, effect_tree); -} + ComputeSurfaceDrawProperties(property_trees, render_surface); -void FindLayersThatNeedUpdates(LayerTreeHost* layer_tree_host, - const PropertyTrees* property_trees, - LayerList* update_layer_list) { - const TransformTree& transform_tree = property_trees->transform_tree; - const EffectTree& effect_tree = property_trees->effect_tree; - for (auto* layer : *layer_tree_host) { - if (!IsRootLayer(layer) && LayerShouldBeSkippedForDrawPropertiesComputation( - layer, transform_tree, effect_tree)) - continue; - - bool layer_is_drawn = - effect_tree.Node(layer->effect_tree_index())->is_drawn; - - if (LayerNeedsUpdate(layer, layer_is_drawn, property_trees)) { - update_layer_list->push_back(layer); - } + // Ignore occlusion from outside the surface when surface contents need to be + // fully drawn. Layers with copy-request need to be complete. We could be + // smarter about layers with filters that move pixels and exclude regions + // where both layers and the filters are occluded, but this seems like + // overkill. + // TODO(senorblanco): make this smarter for the SkImageFilter case (check for + // pixel-moving filters) + const FilterOperations& filters = render_surface->Filters(); + bool is_occlusion_immune = render_surface->HasCopyRequest() || + render_surface->ShouldCacheRenderSurface() || + filters.HasReferenceFilter() || + filters.HasFilterThatMovesPixels(); + if (is_occlusion_immune) { + render_surface->SetNearestOcclusionImmuneAncestor(render_surface); + } else if (is_root) { + render_surface->SetNearestOcclusionImmuneAncestor(nullptr); + } else { + render_surface->SetNearestOcclusionImmuneAncestor( + render_surface->render_target()->nearest_occlusion_immune_ancestor()); } } -void FindLayersThatNeedUpdates(LayerTreeImpl* layer_tree_impl, - const PropertyTrees* property_trees, - std::vector<LayerImpl*>* visible_layer_list) { - const TransformTree& transform_tree = property_trees->transform_tree; - const EffectTree& effect_tree = property_trees->effect_tree; - - for (auto* layer_impl : *layer_tree_impl) { - DCHECK(layer_impl); - DCHECK(layer_impl->layer_tree_impl()); - layer_impl->EnsureValidPropertyTreeIndices(); - - if (!IsRootLayer(layer_impl) && - LayerShouldBeSkippedForDrawPropertiesComputation( - layer_impl, transform_tree, effect_tree)) - continue; - - bool layer_is_drawn = - effect_tree.Node(layer_impl->effect_tree_index())->is_drawn; - - if (LayerNeedsUpdate(layer_impl, layer_is_drawn, property_trees)) - visible_layer_list->push_back(layer_impl); - } +bool SkipForInvertibility(const LayerImpl* layer, + PropertyTrees* property_trees) { + const TransformNode* transform_node = + property_trees->transform_tree.Node(layer->transform_tree_index()); + const EffectNode* effect_node = + property_trees->effect_tree.Node(layer->effect_tree_index()); + bool non_root_copy_request = + effect_node->closest_ancestor_with_copy_request_id > + EffectTree::kContentsRootNodeId; + gfx::Transform from_target; + // If there is a copy request, we check the invertibility of the transform + // between the node corresponding to the layer and the node corresponding to + // the copy request. Otherwise, we are interested in the invertibility of + // screen space transform which is already cached on the transform node. + return non_root_copy_request + ? !property_trees->GetFromTarget( + layer->transform_tree_index(), + effect_node->closest_ancestor_with_copy_request_id, + &from_target) + : !transform_node->ancestors_are_invertible; } -void ComputeTransforms(TransformTree* transform_tree) { - if (!transform_tree->needs_update()) { -#if DCHECK_IS_ON() - // If the transform tree does not need an update, no TransformNode should - // need a local transform update. - for (int i = TransformTree::kContentsRootNodeId; - i < static_cast<int>(transform_tree->size()); ++i) { - DCHECK(!transform_tree->Node(i)->needs_local_transform_update); - } -#endif - return; - } - for (int i = TransformTree::kContentsRootNodeId; - i < static_cast<int>(transform_tree->size()); ++i) - transform_tree->UpdateTransforms(i); - transform_tree->set_needs_update(false); -} - -void ComputeEffects(EffectTree* effect_tree) { - if (!effect_tree->needs_update()) - return; +void ComputeInitialRenderSurfaceList(LayerTreeImpl* layer_tree_impl, + PropertyTrees* property_trees, + RenderSurfaceList* render_surface_list) { + EffectTree& effect_tree = property_trees->effect_tree; for (int i = EffectTree::kContentsRootNodeId; - i < static_cast<int>(effect_tree->size()); ++i) - effect_tree->UpdateEffects(i); - effect_tree->set_needs_update(false); -} - -void UpdatePropertyTrees(LayerTreeHost* layer_tree_host, - PropertyTrees* property_trees) { - DCHECK(layer_tree_host); - DCHECK(property_trees); - DCHECK_EQ(layer_tree_host->property_trees(), property_trees); - if (property_trees->transform_tree.needs_update()) { - property_trees->clip_tree.set_needs_update(true); - property_trees->effect_tree.set_needs_update(true); + i < static_cast<int>(effect_tree.size()); ++i) { + if (RenderSurfaceImpl* render_surface = effect_tree.GetRenderSurface(i)) { + render_surface->set_is_render_surface_list_member(false); + render_surface->reset_num_contributors(); + } } - ComputeTransforms(&property_trees->transform_tree); - ComputeEffects(&property_trees->effect_tree); - // Computation of clips uses ToScreen which is updated while computing - // transforms. So, ComputeTransforms should be before ComputeClips. - ComputeClips(property_trees); -} -void UpdatePropertyTreesAndRenderSurfaces(LayerImpl* root_layer, - PropertyTrees* property_trees) { - if (property_trees->transform_tree.needs_update()) { - property_trees->clip_tree.set_needs_update(true); - property_trees->effect_tree.set_needs_update(true); + RenderSurfaceImpl* root_surface = + effect_tree.GetRenderSurface(EffectTree::kContentsRootNodeId); + // The root surface always gets added to the render surface list. + AddSurfaceToRenderSurfaceList(root_surface, render_surface_list, + property_trees); + // For all non-skipped layers, add their target to the render surface list if + // it's not already been added, and add their content rect to the target + // surface's accumulated content rect. + for (LayerImpl* layer : *layer_tree_impl) { + DCHECK(layer); + layer->EnsureValidPropertyTreeIndices(); + + layer->set_contributes_to_drawn_render_surface(false); + layer->set_raster_even_if_not_drawn(false); + + bool is_root = layer_tree_impl->IsRootLayer(layer); + + bool skip_draw_properties_computation = + LayerShouldBeSkippedForDrawPropertiesComputation( + layer, property_trees->transform_tree, property_trees->effect_tree); + + bool skip_for_invertibility = SkipForInvertibility(layer, property_trees); + + bool skip_layer = !is_root && (skip_draw_properties_computation || + skip_for_invertibility); + + layer->set_raster_even_if_not_drawn(skip_for_invertibility && + !skip_draw_properties_computation); + if (skip_layer) + continue; + + bool layer_is_drawn = + property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; + bool layer_should_be_drawn = + LayerNeedsUpdate(layer, layer_is_drawn, property_trees); + if (!layer_should_be_drawn) + continue; + + RenderSurfaceImpl* render_target = layer->render_target(); + if (!render_target->is_render_surface_list_member()) { + AddSurfaceToRenderSurfaceList(render_target, render_surface_list, + property_trees); + } + + layer->set_contributes_to_drawn_render_surface(true); + + // The layer contributes its drawable content rect to its render target. + render_target->AccumulateContentRectFromContributingLayer(layer); + render_target->increment_num_contributors(); } - UpdateRenderTarget(&property_trees->effect_tree); - - ComputeTransforms(&property_trees->transform_tree); - ComputeEffects(&property_trees->effect_tree); - // Computation of clips uses ToScreen which is updated while computing - // transforms. So, ComputeTransforms should be before ComputeClips. - ComputeClips(property_trees); } -bool LayerNeedsUpdate(Layer* layer, - bool layer_is_drawn, - const PropertyTrees* property_trees) { - return LayerNeedsUpdateInternal(layer, layer_is_drawn, property_trees); +void ComputeSurfaceContentRects(PropertyTrees* property_trees, + RenderSurfaceList* render_surface_list, + int max_texture_size) { + // Walk the list backwards, accumulating each surface's content rect into its + // target's content rect. + for (RenderSurfaceImpl* render_surface : + base::Reversed(*render_surface_list)) { + if (render_surface->EffectTreeIndex() == EffectTree::kContentsRootNodeId) { + // The root surface's content rect is always the entire viewport. + render_surface->SetContentRectToViewport(); + continue; + } + + // Now all contributing drawable content rect has been accumulated to this + // render surface, calculate the content rect. + render_surface->CalculateContentRectFromAccumulatedContentRect( + max_texture_size); + + // Now the render surface's content rect is calculated correctly, it could + // contribute to its render target. + RenderSurfaceImpl* render_target = render_surface->render_target(); + DCHECK(render_target->is_render_surface_list_member()); + render_target->AccumulateContentRectFromContributingRenderSurface( + render_surface); + render_target->increment_num_contributors(); + } } -bool LayerNeedsUpdate(LayerImpl* layer, - bool layer_is_drawn, - const PropertyTrees* property_trees) { - return LayerNeedsUpdateInternal(layer, layer_is_drawn, property_trees); +void ComputeListOfNonEmptySurfaces(LayerTreeImpl* layer_tree_impl, + PropertyTrees* property_trees, + RenderSurfaceList* initial_surface_list, + RenderSurfaceList* final_surface_list) { + // Walk the initial surface list forwards. The root surface and each + // surface with a non-empty content rect go into the final render surface + // layer list. Surfaces with empty content rects or whose target isn't in + // the final list do not get added to the final list. + bool removed_surface = false; + for (RenderSurfaceImpl* surface : *initial_surface_list) { + bool is_root = + surface->EffectTreeIndex() == EffectTree::kContentsRootNodeId; + RenderSurfaceImpl* target_surface = surface->render_target(); + if (!is_root && (surface->content_rect().IsEmpty() || + !target_surface->is_render_surface_list_member())) { + surface->set_is_render_surface_list_member(false); + removed_surface = true; + target_surface->decrement_num_contributors(); + continue; + } + final_surface_list->push_back(surface); + } + if (removed_surface) { + for (LayerImpl* layer : *layer_tree_impl) { + if (layer->contributes_to_drawn_render_surface()) { + RenderSurfaceImpl* render_target = layer->render_target(); + if (!render_target->is_render_surface_list_member()) { + layer->set_contributes_to_drawn_render_surface(false); + render_target->decrement_num_contributors(); + } + } + } + } } -gfx::Transform DrawTransform(const LayerImpl* layer, - const TransformTree& transform_tree, - const EffectTree& effect_tree) { - // TransformTree::ToTarget computes transform between the layer's transform - // node and surface's transform node and scales it by the surface's content - // scale. - gfx::Transform xform; - transform_tree.property_trees()->GetToTarget( - layer->transform_tree_index(), layer->render_target_effect_tree_index(), - &xform); - if (layer->should_flatten_screen_space_transform_from_property_tree()) - xform.FlattenTo2d(); - xform.Translate(layer->offset_to_transform_parent().x(), - layer->offset_to_transform_parent().y()); - return xform; +void CalculateRenderSurfaceLayerList(LayerTreeImpl* layer_tree_impl, + PropertyTrees* property_trees, + RenderSurfaceList* render_surface_list, + const int max_texture_size) { + RenderSurfaceList initial_render_surface_list; + + // First compute a list that might include surfaces that later turn out to + // have an empty content rect. After surface content rects are computed, + // produce a final list that omits empty surfaces. + ComputeInitialRenderSurfaceList(layer_tree_impl, property_trees, + &initial_render_surface_list); + ComputeSurfaceContentRects(property_trees, &initial_render_surface_list, + max_texture_size); + ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, + &initial_render_surface_list, + render_surface_list); } -gfx::Transform ScreenSpaceTransform(const Layer* layer, - const TransformTree& tree) { - return ScreenSpaceTransformInternal(layer, tree); +void RecordRenderSurfaceReasonsForTracing( + const PropertyTrees* property_trees, + const RenderSurfaceList* render_surface_list) { + static const auto* tracing_enabled = + TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED("cc"); + if (!*tracing_enabled || + // Don't output single root render surface. + render_surface_list->size() <= 1) + return; + + TRACE_EVENT_INSTANT1("cc", "RenderSurfaceReasonCount", + TRACE_EVENT_SCOPE_THREAD, "total", + render_surface_list->size()); + + // kTest is the last value which is not included for tracing. + constexpr auto kNumReasons = static_cast<size_t>(RenderSurfaceReason::kTest); + int reason_counts[kNumReasons] = {0}; + for (const auto* render_surface : *render_surface_list) { + const auto* effect_node = + property_trees->effect_tree.Node(render_surface->EffectTreeIndex()); + reason_counts[static_cast<size_t>(effect_node->render_surface_reason)]++; + } + for (size_t i = 0; i < kNumReasons; i++) { + if (!reason_counts[i]) + continue; + TRACE_EVENT_INSTANT1( + "cc", "RenderSurfaceReasonCount", TRACE_EVENT_SCOPE_THREAD, + RenderSurfaceReasonToString(static_cast<RenderSurfaceReason>(i)), + reason_counts[i]); + } } -gfx::Transform ScreenSpaceTransform(const LayerImpl* layer, - const TransformTree& tree) { - return ScreenSpaceTransformInternal(layer, tree); +void UpdateElasticOverscroll(PropertyTrees* property_trees, + const ElementId overscroll_elasticity_element_id, + const gfx::Vector2dF& elastic_overscroll) { + if (!overscroll_elasticity_element_id) { + DCHECK(elastic_overscroll.IsZero()); + return; + } + + TransformNode* node = property_trees->transform_tree.FindNodeFromElementId( + overscroll_elasticity_element_id); + DCHECK(node); + + if (node->scroll_offset == gfx::ScrollOffset(elastic_overscroll)) + return; + + node->scroll_offset = gfx::ScrollOffset(elastic_overscroll); + node->needs_local_transform_update = true; + property_trees->transform_tree.set_needs_update(true); } void ComputeDrawPropertiesOfVisibleLayers(const LayerImplList* layer_list, @@ -980,50 +1102,142 @@ } } -void ComputeMaskDrawProperties(LayerImpl* mask_layer, - PropertyTrees* property_trees) { - // Mask draw properties are used only for rastering, so most of the draw - // properties computed for other layers are not needed. - // Draw transform of a mask layer has to be a 2d scale. - // TODO(sunxd): the draw transform of a mask layer misses the "scale to fit" - // factor from mask layer to its parent. So does the screen space transform. - // It does not cause a problem because currently we only have 1:1 mask layer. - mask_layer->draw_properties().target_space_transform = DrawTransform( - mask_layer, property_trees->transform_tree, property_trees->effect_tree); - mask_layer->draw_properties().screen_space_transform = - ScreenSpaceTransformInternal(mask_layer, - property_trees->transform_tree); +} // namespace - ConditionalClip clip = LayerClipRect(property_trees, mask_layer); - // is_clipped should be set before visible rect computation as it is used - // there. - mask_layer->draw_properties().is_clipped = clip.is_clipped; - mask_layer->draw_properties().clip_rect = ToEnclosingClipRect(clip.clip_rect); - // Calculate actual visible layer rect for mask layers, since we could have - // tiled mask layers and the tile manager would need this info for rastering. - mask_layer->draw_properties().visible_layer_rect = - LayerVisibleRect(property_trees, mask_layer); - mask_layer->draw_properties().opacity = 1; +void ConcatInverseSurfaceContentsScale(const EffectNode* effect_node, + gfx::Transform* transform) { + DCHECK(effect_node->HasRenderSurface()); + if (effect_node->surface_contents_scale.x() != 0.0 && + effect_node->surface_contents_scale.y() != 0.0) + transform->Scale(1.0 / effect_node->surface_contents_scale.x(), + 1.0 / effect_node->surface_contents_scale.y()); } -void ComputeSurfaceDrawProperties(PropertyTrees* property_trees, - RenderSurfaceImpl* render_surface) { - SetSurfaceIsClipped(property_trees->clip_tree, render_surface); - SetSurfaceDrawOpacity(property_trees->effect_tree, render_surface); - SetSurfaceDrawTransform(property_trees, render_surface); +void FindLayersThatNeedUpdates(LayerTreeHost* layer_tree_host, + LayerList* update_layer_list) { + const PropertyTrees* property_trees = layer_tree_host->property_trees(); + const TransformTree& transform_tree = property_trees->transform_tree; + const EffectTree& effect_tree = property_trees->effect_tree; + for (auto* layer : *layer_tree_host) { + if (!IsRootLayer(layer) && LayerShouldBeSkippedForDrawPropertiesComputation( + layer, transform_tree, effect_tree)) + continue; - render_surface->SetRoundedCornerRRect( - GetRoundedCornerRRect(property_trees, render_surface->EffectTreeIndex(), - /*for_render_surface*/ true) - .first); - render_surface->SetScreenSpaceTransform( - property_trees->ToScreenSpaceTransformWithoutSurfaceContentsScale( - render_surface->TransformTreeIndex(), - render_surface->EffectTreeIndex())); + bool layer_is_drawn = + effect_tree.Node(layer->effect_tree_index())->is_drawn; - const ClipNode* clip_node = - property_trees->clip_tree.Node(render_surface->ClipTreeIndex()); - SetSurfaceClipRect(clip_node, property_trees, render_surface); + if (LayerNeedsUpdate(layer, layer_is_drawn, property_trees)) { + update_layer_list->push_back(layer); + } + } +} + +void FindLayersThatNeedUpdates(LayerTreeImpl* layer_tree_impl, + std::vector<LayerImpl*>* visible_layer_list) { + const PropertyTrees* property_trees = layer_tree_impl->property_trees(); + const TransformTree& transform_tree = property_trees->transform_tree; + const EffectTree& effect_tree = property_trees->effect_tree; + + for (auto* layer_impl : *layer_tree_impl) { + DCHECK(layer_impl); + DCHECK(layer_impl->layer_tree_impl()); + layer_impl->EnsureValidPropertyTreeIndices(); + + if (!IsRootLayer(layer_impl) && + LayerShouldBeSkippedForDrawPropertiesComputation( + layer_impl, transform_tree, effect_tree)) + continue; + + bool layer_is_drawn = + effect_tree.Node(layer_impl->effect_tree_index())->is_drawn; + + if (LayerNeedsUpdate(layer_impl, layer_is_drawn, property_trees)) + visible_layer_list->push_back(layer_impl); + } +} + +void ComputeTransforms(TransformTree* transform_tree) { + if (!transform_tree->needs_update()) { +#if DCHECK_IS_ON() + // If the transform tree does not need an update, no TransformNode should + // need a local transform update. + for (int i = TransformTree::kContentsRootNodeId; + i < static_cast<int>(transform_tree->size()); ++i) { + DCHECK(!transform_tree->Node(i)->needs_local_transform_update); + } +#endif + return; + } + for (int i = TransformTree::kContentsRootNodeId; + i < static_cast<int>(transform_tree->size()); ++i) + transform_tree->UpdateTransforms(i); + transform_tree->set_needs_update(false); +} + +void ComputeEffects(EffectTree* effect_tree) { + if (!effect_tree->needs_update()) + return; + for (int i = EffectTree::kContentsRootNodeId; + i < static_cast<int>(effect_tree->size()); ++i) + effect_tree->UpdateEffects(i); + effect_tree->set_needs_update(false); +} + +void UpdatePropertyTrees(LayerTreeHost* layer_tree_host) { + DCHECK(layer_tree_host); + auto* property_trees = layer_tree_host->property_trees(); + DCHECK(property_trees); + if (property_trees->transform_tree.needs_update()) { + property_trees->clip_tree.set_needs_update(true); + property_trees->effect_tree.set_needs_update(true); + } + ComputeTransforms(&property_trees->transform_tree); + ComputeEffects(&property_trees->effect_tree); + // Computation of clips uses ToScreen which is updated while computing + // transforms. So, ComputeTransforms should be before ComputeClips. + ComputeClips(property_trees); +} + +void UpdatePropertyTreesAndRenderSurfaces(LayerImpl* root_layer, + PropertyTrees* property_trees) { + if (property_trees->transform_tree.needs_update()) { + property_trees->clip_tree.set_needs_update(true); + property_trees->effect_tree.set_needs_update(true); + } + UpdateRenderTarget(&property_trees->effect_tree); + + ComputeTransforms(&property_trees->transform_tree); + ComputeEffects(&property_trees->effect_tree); + // Computation of clips uses ToScreen which is updated while computing + // transforms. So, ComputeTransforms should be before ComputeClips. + ComputeClips(property_trees); +} + +gfx::Transform DrawTransform(const LayerImpl* layer, + const TransformTree& transform_tree, + const EffectTree& effect_tree) { + // TransformTree::ToTarget computes transform between the layer's transform + // node and surface's transform node and scales it by the surface's content + // scale. + gfx::Transform xform; + transform_tree.property_trees()->GetToTarget( + layer->transform_tree_index(), layer->render_target_effect_tree_index(), + &xform); + if (layer->should_flatten_screen_space_transform_from_property_tree()) + xform.FlattenTo2d(); + xform.Translate(layer->offset_to_transform_parent().x(), + layer->offset_to_transform_parent().y()); + return xform; +} + +gfx::Transform ScreenSpaceTransform(const Layer* layer, + const TransformTree& tree) { + return ScreenSpaceTransformInternal(layer, tree); +} + +gfx::Transform ScreenSpaceTransform(const LayerImpl* layer, + const TransformTree& tree) { + return ScreenSpaceTransformInternal(layer, tree); } void UpdatePageScaleFactor(PropertyTrees* property_trees, @@ -1045,24 +1259,77 @@ property_trees->transform_tree.set_needs_update(true); } -void UpdateElasticOverscroll(PropertyTrees* property_trees, - const ElementId overscroll_elasticity_element_id, - const gfx::Vector2dF& elastic_overscroll) { - if (!overscroll_elasticity_element_id) { - DCHECK(elastic_overscroll.IsZero()); - return; +void CalculateDrawProperties( + LayerTreeImpl* layer_tree_impl, + RenderSurfaceList* output_render_surface_list, + LayerImplList* output_update_layer_list_for_testing) { + output_render_surface_list->clear(); + + LayerImplList visible_layer_list; + // Since page scale and elastic overscroll are SyncedProperties, changes + // on the active tree immediately affect the pending tree, so instead of + // trying to update property trees whenever these values change, we + // update property trees before using them. + + // We should never be setting a non-unit page scale factor on an oopif + // subframe ... if we attempt this log it and fail. + // TODO(wjmaclean): Remove as part of conditions for closing the bug. + // https://crbug.com/845097 + PropertyTrees* property_trees = layer_tree_impl->property_trees(); + if (layer_tree_impl->current_page_scale_factor() != + property_trees->transform_tree.page_scale_factor() && + !layer_tree_impl->PageScaleTransformNode()) { + LOG(ERROR) << "Setting PageScale on subframe: new psf = " + << layer_tree_impl->page_scale_factor() << ", old psf = " + << property_trees->transform_tree.page_scale_factor() + << ", in_oopif = " + << layer_tree_impl->settings().is_layer_tree_for_subframe; + NOTREACHED(); } - TransformNode* node = property_trees->transform_tree.FindNodeFromElementId( - overscroll_elasticity_element_id); - DCHECK(node); + UpdatePageScaleFactor(property_trees, + layer_tree_impl->PageScaleTransformNode(), + layer_tree_impl->current_page_scale_factor()); + UpdateElasticOverscroll(property_trees, + layer_tree_impl->OverscrollElasticityElementId(), + layer_tree_impl->current_elastic_overscroll()); + // Similarly, the device viewport and device transform are shared + // by both trees. + property_trees->clip_tree.SetViewportClip( + gfx::RectF(layer_tree_impl->GetDeviceViewport())); + property_trees->transform_tree.SetRootScaleAndTransform( + layer_tree_impl->device_scale_factor(), layer_tree_impl->DrawTransform()); + UpdatePropertyTreesAndRenderSurfaces(layer_tree_impl->root_layer(), + property_trees); - if (node->scroll_offset == gfx::ScrollOffset(elastic_overscroll)) - return; + { + TRACE_EVENT0("cc", "draw_property_utils::FindLayersThatNeedUpdates"); + FindLayersThatNeedUpdates(layer_tree_impl, &visible_layer_list); + } - node->scroll_offset = gfx::ScrollOffset(elastic_overscroll); - node->needs_local_transform_update = true; - property_trees->transform_tree.set_needs_update(true); + { + TRACE_EVENT1("cc", + "draw_property_utils::ComputeDrawPropertiesOfVisibleLayers", + "visible_layers", visible_layer_list.size()); + ComputeDrawPropertiesOfVisibleLayers(&visible_layer_list, property_trees); + } + + { + TRACE_EVENT0("cc", "CalculateRenderSurfaceLayerList"); + CalculateRenderSurfaceLayerList(layer_tree_impl, property_trees, + output_render_surface_list, + layer_tree_impl->max_texture_size()); + } + RecordRenderSurfaceReasonsForTracing(property_trees, + output_render_surface_list); + + // A root layer render_surface should always exist after + // CalculateDrawProperties. + DCHECK(property_trees->effect_tree.GetRenderSurface( + EffectTree::kContentsRootNodeId)); + + if (output_update_layer_list_for_testing) + *output_update_layer_list_for_testing = std::move(visible_layer_list); } } // namespace draw_property_utils
diff --git a/cc/trees/draw_property_utils.h b/cc/trees/draw_property_utils.h index 54c7a458..2f286c2 100644 --- a/cc/trees/draw_property_utils.h +++ b/cc/trees/draw_property_utils.h
@@ -10,7 +10,6 @@ namespace gfx { class Transform; -class Vector2dF; } // namespace gfx namespace cc { @@ -19,13 +18,11 @@ class LayerImpl; class LayerTreeHost; class LayerTreeImpl; -class RenderSurfaceImpl; class EffectTree; class TransformTree; class PropertyTrees; struct EffectNode; struct TransformNode; -struct ElementId; namespace draw_property_utils { @@ -39,52 +36,25 @@ // Computes screen space opacity for every node in the opacity tree. void CC_EXPORT ComputeEffects(EffectTree* effect_tree); -void CC_EXPORT UpdatePropertyTrees(LayerTreeHost* layer_tree_host, - PropertyTrees* property_trees); +void CC_EXPORT UpdatePropertyTrees(LayerTreeHost* layer_tree_host); void CC_EXPORT UpdatePropertyTreesAndRenderSurfaces(LayerImpl* root_layer, PropertyTrees* property_trees); void CC_EXPORT FindLayersThatNeedUpdates(LayerTreeHost* layer_tree_host, - const PropertyTrees* property_trees, LayerList* update_layer_list); void CC_EXPORT FindLayersThatNeedUpdates(LayerTreeImpl* layer_tree_impl, - const PropertyTrees* property_trees, std::vector<LayerImpl*>* visible_layer_list); -void CC_EXPORT -ComputeDrawPropertiesOfVisibleLayers(const LayerImplList* layer_list, - PropertyTrees* property_trees); - -void CC_EXPORT ComputeMaskDrawProperties(LayerImpl* mask_layer, - PropertyTrees* property_trees); - -void CC_EXPORT ComputeSurfaceDrawProperties(PropertyTrees* property_trees, - RenderSurfaceImpl* render_surface); - -bool CC_EXPORT LayerShouldBeSkippedForDrawPropertiesComputation( - LayerImpl* layer, - const TransformTree& transform_tree, - const EffectTree& effect_tree); - -bool CC_EXPORT LayerNeedsUpdate(Layer* layer, - bool layer_is_drawn, - const PropertyTrees* property_trees); - -bool CC_EXPORT LayerNeedsUpdate(LayerImpl* layer, - bool layer_is_drawn, - const PropertyTrees* property_trees); - gfx::Transform CC_EXPORT DrawTransform(const LayerImpl* layer, const TransformTree& transform_tree, const EffectTree& effect_tree); gfx::Transform CC_EXPORT ScreenSpaceTransform(const Layer* layer, const TransformTree& tree); - gfx::Transform CC_EXPORT ScreenSpaceTransform(const LayerImpl* layer, const TransformTree& tree); @@ -92,10 +62,10 @@ TransformNode* page_scale_node, float page_scale_factor); -void CC_EXPORT -UpdateElasticOverscroll(PropertyTrees* property_trees, - const ElementId overscroll_elasticity_element_id, - const gfx::Vector2dF& elastic_overscroll); +void CC_EXPORT CalculateDrawProperties( + LayerTreeImpl* layer_tree_impl, + RenderSurfaceList* output_render_surface_list, + LayerImplList* output_update_layer_list_for_testing = nullptr); } // namespace draw_property_utils } // namespace cc
diff --git a/cc/trees/layer_tree_host_common_perftest.cc b/cc/trees/draw_property_utils_perftest.cc similarity index 70% rename from cc/trees/layer_tree_host_common_perftest.cc rename to cc/trees/draw_property_utils_perftest.cc index 7fbadbfb..3facfbd 100644 --- a/cc/trees/layer_tree_host_common_perftest.cc +++ b/cc/trees/draw_property_utils_perftest.cc
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "cc/trees/draw_property_utils.h" + #include <stddef.h> #include <memory> @@ -19,7 +21,6 @@ #include "cc/test/fake_layer_tree_host_client.h" #include "cc/test/layer_tree_json_parser.h" #include "cc/test/layer_tree_test.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/transform_node.h" #include "components/viz/test/paths.h" @@ -32,9 +33,9 @@ static const int kWarmupRuns = 5; static const int kTimeCheckInterval = 10; -class LayerTreeHostCommonPerfTest : public LayerTreeTest { +class DrawPropertyUtilsPerfTest : public LayerTreeTest { public: - LayerTreeHostCommonPerfTest() + DrawPropertyUtilsPerfTest() : timer_(kWarmupRuns, base::TimeDelta::FromMilliseconds(kTimeLimitMillis), kTimeCheckInterval) {} @@ -76,7 +77,7 @@ std::unique_ptr<perf_test::PerfResultReporter> reporter_; }; -class CalcDrawPropsTest : public LayerTreeHostCommonPerfTest { +class CalcDrawPropsTest : public DrawPropertyUtilsPerfTest { public: void RunCalcDrawProps() { RunTest(CompositorMode::SINGLE_THREADED); } @@ -84,37 +85,16 @@ void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { timer_.Reset(); - LayerTreeImpl* active_tree = host_impl->active_tree(); do { - int max_texture_size = 8096; - DoCalcDrawPropertiesImpl(max_texture_size, active_tree, host_impl); - + RenderSurfaceList render_surface_list; + draw_property_utils::CalculateDrawProperties(host_impl->active_tree(), + &render_surface_list); timer_.NextLap(); } while (!timer_.HasTimeLimitExpired()); EndTest(); } - - void DoCalcDrawPropertiesImpl(int max_texture_size, - LayerTreeImpl* active_tree, - LayerTreeHostImpl* host_impl) { - RenderSurfaceList update_list; - LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( - active_tree->root_layer_for_testing(), active_tree->GetDeviceViewport(), - host_impl->DrawTransform(), active_tree->device_scale_factor(), - active_tree->current_page_scale_factor(), - active_tree->InnerViewportContainerLayer(), - active_tree->InnerViewportScrollLayer(), - active_tree->OuterViewportScrollLayer(), - active_tree->elastic_overscroll()->Current(active_tree->IsActiveTree()), - active_tree->OverscrollElasticityElementId(), max_texture_size, - &update_list, active_tree->property_trees(), - active_tree->property_trees()->transform_tree.Node( - active_tree->InnerViewportContainerLayer() - ->transform_tree_index())); - LayerTreeHostCommon::CalculateDrawProperties(&inputs); - } }; TEST_F(CalcDrawPropsTest, TenTen) {
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index a42af87b..16ca967 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc
@@ -48,12 +48,13 @@ #include "cc/trees/draw_property_utils.h" #include "cc/trees/effect_node.h" #include "cc/trees/layer_tree_host_client.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_host_impl.h" +#include "cc/trees/layer_tree_impl.h" #include "cc/trees/mutator_host.h" #include "cc/trees/property_tree_builder.h" #include "cc/trees/proxy_main.h" #include "cc/trees/render_frame_metadata_observer.h" +#include "cc/trees/scroll_and_scale_set.h" #include "cc/trees/scroll_node.h" #include "cc/trees/single_thread_proxy.h" #include "cc/trees/swap_promise_manager.h" @@ -843,11 +844,10 @@ CHECK(property_trees_.effect_tree.Node(root_layer_->effect_tree_index())); #endif - draw_property_utils::UpdatePropertyTrees(this, &property_trees_); + draw_property_utils::UpdatePropertyTrees(this); LayerList update_layer_list; - draw_property_utils::FindLayersThatNeedUpdates(this, &property_trees_, - &update_layer_list); + draw_property_utils::FindLayersThatNeedUpdates(this, &update_layer_list); bool painted_content_has_slow_paths = false; bool painted_content_has_non_aa_paint = false;
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc deleted file mode 100644 index 89f3bf88..0000000 --- a/cc/trees/layer_tree_host_common.cc +++ /dev/null
@@ -1,637 +0,0 @@ -// Copyright 2011 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 "cc/trees/layer_tree_host_common.h" - -#include <stddef.h> - -#include <algorithm> - -#include "base/containers/adapters.h" -#include "base/trace_event/trace_event.h" -#include "cc/base/math_util.h" -#include "cc/layers/heads_up_display_layer_impl.h" -#include "cc/layers/layer.h" -#include "cc/layers/layer_impl.h" -#include "cc/trees/draw_property_utils.h" -#include "cc/trees/effect_node.h" -#include "cc/trees/layer_tree_host.h" -#include "cc/trees/layer_tree_impl.h" -#include "cc/trees/property_tree_builder.h" -#include "cc/trees/scroll_node.h" -#include "cc/trees/transform_node.h" -#include "ui/gfx/geometry/rect_conversions.h" -#include "ui/gfx/geometry/vector2d_conversions.h" -#include "ui/gfx/transform.h" -#include "ui/gfx/transform_util.h" - -namespace cc { - -LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting:: - CalcDrawPropsMainInputsForTesting(Layer* root_layer, - const gfx::Rect& device_viewport_rect, - float device_scale_factor, - float page_scale_factor, - const Layer* page_scale_layer, - const Layer* inner_viewport_scroll_layer, - const Layer* outer_viewport_scroll_layer) - : root_layer(root_layer), - device_viewport_rect(device_viewport_rect), - device_scale_factor(device_scale_factor), - page_scale_factor(page_scale_factor), - page_scale_layer(page_scale_layer), - inner_viewport_scroll_layer(inner_viewport_scroll_layer), - outer_viewport_scroll_layer(outer_viewport_scroll_layer) {} - -LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting:: - CalcDrawPropsMainInputsForTesting(Layer* root_layer, - const gfx::Rect& device_viewport_rect) - : CalcDrawPropsMainInputsForTesting(root_layer, - device_viewport_rect, - 1.f, - 1.f, - nullptr, - nullptr, - nullptr) {} - -LayerTreeHostCommon::CalcDrawPropsImplInputs::CalcDrawPropsImplInputs( - LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - const gfx::Transform& device_transform, - float device_scale_factor, - float page_scale_factor, - const LayerImpl* page_scale_layer, - const LayerImpl* inner_viewport_scroll_layer, - const LayerImpl* outer_viewport_scroll_layer, - const gfx::Vector2dF& elastic_overscroll, - const ElementId elastic_overscroll_element_id, - int max_texture_size, - RenderSurfaceList* render_surface_list, - PropertyTrees* property_trees, - TransformNode* page_scale_transform_node) - : root_layer(root_layer), - device_viewport_rect(device_viewport_rect), - device_transform(device_transform), - device_scale_factor(device_scale_factor), - page_scale_factor(page_scale_factor), - page_scale_layer(page_scale_layer), - inner_viewport_scroll_layer(inner_viewport_scroll_layer), - outer_viewport_scroll_layer(outer_viewport_scroll_layer), - elastic_overscroll(elastic_overscroll), - elastic_overscroll_element_id(elastic_overscroll_element_id), - max_texture_size(max_texture_size), - render_surface_list(render_surface_list), - property_trees(property_trees), - page_scale_transform_node(page_scale_transform_node) {} - -LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: - CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - const gfx::Transform& device_transform, - float device_scale_factor, - RenderSurfaceList* render_surface_list) - : CalcDrawPropsImplInputs(root_layer, - device_viewport_rect, - device_transform, - device_scale_factor, - 1.f, - nullptr, - nullptr, - nullptr, - gfx::Vector2dF(), - ElementId(), - std::numeric_limits<int>::max() / 2, - render_surface_list, - GetPropertyTrees(root_layer), - nullptr) { - DCHECK(root_layer); - DCHECK(render_surface_list); -} - -LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: - CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - const gfx::Transform& device_transform, - RenderSurfaceList* render_surface_list) - : CalcDrawPropsImplInputsForTesting(root_layer, - device_viewport_rect, - device_transform, - 1.f, - render_surface_list) {} - -LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: - CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - RenderSurfaceList* render_surface_list) - : CalcDrawPropsImplInputsForTesting(root_layer, - device_viewport_rect, - gfx::Transform(), - 1.f, - render_surface_list) {} - -LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting:: - CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - float device_scale_factor, - RenderSurfaceList* render_surface_list) - : CalcDrawPropsImplInputsForTesting(root_layer, - device_viewport_rect, - gfx::Transform(), - device_scale_factor, - render_surface_list) {} - -bool LayerTreeHostCommon::ScrollUpdateInfo::operator==( - const LayerTreeHostCommon::ScrollUpdateInfo& other) const { - return element_id == other.element_id && scroll_delta == other.scroll_delta; -} - -LayerTreeHostCommon::ScrollbarsUpdateInfo::ScrollbarsUpdateInfo() - : element_id(), hidden(true) {} - -LayerTreeHostCommon::ScrollbarsUpdateInfo::ScrollbarsUpdateInfo(ElementId id, - bool hidden) - : element_id(id), hidden(hidden) {} - -bool LayerTreeHostCommon::ScrollbarsUpdateInfo::operator==( - const LayerTreeHostCommon::ScrollbarsUpdateInfo& other) const { - return element_id == other.element_id && hidden == other.hidden; -} - -ScrollAndScaleSet::ScrollAndScaleSet() - : page_scale_delta(1.f), - is_pinch_gesture_active(false), - top_controls_delta(0.f), - browser_controls_constraint(BrowserControlsState::kBoth), - browser_controls_constraint_changed(false), - scroll_gesture_did_end(false), - manipulation_info(kManipulationInfoNone) {} - -ScrollAndScaleSet::~ScrollAndScaleSet() = default; - -static float TranslationFromActiveTreeLayerScreenSpaceTransform( - LayerImpl* pending_tree_layer) { - LayerTreeImpl* layer_tree_impl = pending_tree_layer->layer_tree_impl(); - if (layer_tree_impl) { - LayerImpl* active_tree_layer = - layer_tree_impl->FindActiveTreeLayerById(pending_tree_layer->id()); - if (active_tree_layer) { - gfx::Transform active_tree_screen_space_transform = - active_tree_layer->draw_properties().screen_space_transform; - if (active_tree_screen_space_transform.IsIdentity()) - return 0.f; - if (active_tree_screen_space_transform.ApproximatelyEqual( - pending_tree_layer->draw_properties().screen_space_transform)) - return 0.f; - return (active_tree_layer->draw_properties() - .screen_space_transform.To2dTranslation() - - pending_tree_layer->draw_properties() - .screen_space_transform.To2dTranslation()) - .Length(); - } - } - return 0.f; -} - -// A layer jitters if its screen space transform is same on two successive -// commits, but has changed in between the commits. CalculateLayerJitter -// computes the jitter for the layer. -int LayerTreeHostCommon::CalculateLayerJitter(LayerImpl* layer) { - float jitter = 0.f; - layer->performance_properties().translation_from_last_frame = 0.f; - layer->performance_properties().last_commit_screen_space_transform = - layer->draw_properties().screen_space_transform; - - if (!layer->visible_layer_rect().IsEmpty()) { - if (layer->draw_properties().screen_space_transform.ApproximatelyEqual( - layer->performance_properties() - .last_commit_screen_space_transform)) { - float translation_from_last_commit = - TranslationFromActiveTreeLayerScreenSpaceTransform(layer); - if (translation_from_last_commit > 0.f) { - layer->performance_properties().num_fixed_point_hits++; - layer->performance_properties().translation_from_last_frame = - translation_from_last_commit; - if (layer->performance_properties().num_fixed_point_hits > - layer->layer_tree_impl()->kFixedPointHitsThreshold) { - // Jitter = Translation from fixed point * sqrt(Area of the layer). - // The square root of the area is used instead of the area to match - // the dimensions of both terms on the rhs. - jitter += translation_from_last_commit * - sqrt(layer->visible_layer_rect().size().GetArea()); - } - } else { - layer->performance_properties().num_fixed_point_hits = 0; - } - } - } - return jitter; -} - -static void AddSurfaceToRenderSurfaceList( - RenderSurfaceImpl* render_surface, - RenderSurfaceList* render_surface_list, - PropertyTrees* property_trees) { - // |render_surface| must appear after its target, so first make sure its - // target is in the list. - RenderSurfaceImpl* target = render_surface->render_target(); - bool is_root = - render_surface->EffectTreeIndex() == EffectTree::kContentsRootNodeId; - if (!is_root && !target->is_render_surface_list_member()) { - AddSurfaceToRenderSurfaceList(target, render_surface_list, property_trees); - } - render_surface->ClearAccumulatedContentRect(); - render_surface_list->push_back(render_surface); - render_surface->set_is_render_surface_list_member(true); - if (is_root) { - // The root surface does not contribute to any other surface, it has no - // target. - render_surface->set_contributes_to_drawn_surface(false); - } else { - bool contributes_to_drawn_surface = - property_trees->effect_tree.ContributesToDrawnSurface( - render_surface->EffectTreeIndex()); - render_surface->set_contributes_to_drawn_surface( - contributes_to_drawn_surface); - } - - draw_property_utils::ComputeSurfaceDrawProperties(property_trees, - render_surface); - - // Ignore occlusion from outside the surface when surface contents need to be - // fully drawn. Layers with copy-request need to be complete. We could be - // smarter about layers with filters that move pixels and exclude regions - // where both layers and the filters are occluded, but this seems like - // overkill. - // TODO(senorblanco): make this smarter for the SkImageFilter case (check for - // pixel-moving filters) - const FilterOperations& filters = render_surface->Filters(); - bool is_occlusion_immune = render_surface->HasCopyRequest() || - render_surface->ShouldCacheRenderSurface() || - filters.HasReferenceFilter() || - filters.HasFilterThatMovesPixels(); - if (is_occlusion_immune) { - render_surface->SetNearestOcclusionImmuneAncestor(render_surface); - } else if (is_root) { - render_surface->SetNearestOcclusionImmuneAncestor(nullptr); - } else { - render_surface->SetNearestOcclusionImmuneAncestor( - render_surface->render_target()->nearest_occlusion_immune_ancestor()); - } -} - -static bool SkipForInvertibility(const LayerImpl* layer, - PropertyTrees* property_trees) { - const TransformNode* transform_node = - property_trees->transform_tree.Node(layer->transform_tree_index()); - const EffectNode* effect_node = - property_trees->effect_tree.Node(layer->effect_tree_index()); - bool non_root_copy_request = - effect_node->closest_ancestor_with_copy_request_id > - EffectTree::kContentsRootNodeId; - gfx::Transform from_target; - // If there is a copy request, we check the invertibility of the transform - // between the node corresponding to the layer and the node corresponding to - // the copy request. Otherwise, we are interested in the invertibility of - // screen space transform which is already cached on the transform node. - return non_root_copy_request - ? !property_trees->GetFromTarget( - layer->transform_tree_index(), - effect_node->closest_ancestor_with_copy_request_id, - &from_target) - : !transform_node->ancestors_are_invertible; -} - -static void ComputeInitialRenderSurfaceList( - LayerTreeImpl* layer_tree_impl, - PropertyTrees* property_trees, - RenderSurfaceList* render_surface_list) { - EffectTree& effect_tree = property_trees->effect_tree; - for (int i = EffectTree::kContentsRootNodeId; - i < static_cast<int>(effect_tree.size()); ++i) { - if (RenderSurfaceImpl* render_surface = effect_tree.GetRenderSurface(i)) { - render_surface->set_is_render_surface_list_member(false); - render_surface->reset_num_contributors(); - } - } - - RenderSurfaceImpl* root_surface = - effect_tree.GetRenderSurface(EffectTree::kContentsRootNodeId); - // The root surface always gets added to the render surface list. - AddSurfaceToRenderSurfaceList(root_surface, render_surface_list, - property_trees); - // For all non-skipped layers, add their target to the render surface list if - // it's not already been added, and add their content rect to the target - // surface's accumulated content rect. - for (LayerImpl* layer : *layer_tree_impl) { - DCHECK(layer); - layer->EnsureValidPropertyTreeIndices(); - - layer->set_contributes_to_drawn_render_surface(false); - layer->set_raster_even_if_not_drawn(false); - - bool is_root = layer_tree_impl->IsRootLayer(layer); - - bool skip_draw_properties_computation = - draw_property_utils::LayerShouldBeSkippedForDrawPropertiesComputation( - layer, property_trees->transform_tree, property_trees->effect_tree); - - bool skip_for_invertibility = SkipForInvertibility(layer, property_trees); - - bool skip_layer = !is_root && (skip_draw_properties_computation || - skip_for_invertibility); - - layer->set_raster_even_if_not_drawn(skip_for_invertibility && - !skip_draw_properties_computation); - if (skip_layer) - continue; - - bool layer_is_drawn = - property_trees->effect_tree.Node(layer->effect_tree_index())->is_drawn; - bool layer_should_be_drawn = draw_property_utils::LayerNeedsUpdate( - layer, layer_is_drawn, property_trees); - if (!layer_should_be_drawn) - continue; - - RenderSurfaceImpl* render_target = layer->render_target(); - if (!render_target->is_render_surface_list_member()) { - AddSurfaceToRenderSurfaceList(render_target, render_surface_list, - property_trees); - } - - layer->set_contributes_to_drawn_render_surface(true); - - // The layer contributes its drawable content rect to its render target. - render_target->AccumulateContentRectFromContributingLayer(layer); - render_target->increment_num_contributors(); - } -} - -static void ComputeSurfaceContentRects(PropertyTrees* property_trees, - RenderSurfaceList* render_surface_list, - int max_texture_size) { - // Walk the list backwards, accumulating each surface's content rect into its - // target's content rect. - for (RenderSurfaceImpl* render_surface : - base::Reversed(*render_surface_list)) { - if (render_surface->EffectTreeIndex() == EffectTree::kContentsRootNodeId) { - // The root surface's content rect is always the entire viewport. - render_surface->SetContentRectToViewport(); - continue; - } - - // Now all contributing drawable content rect has been accumulated to this - // render surface, calculate the content rect. - render_surface->CalculateContentRectFromAccumulatedContentRect( - max_texture_size); - - // Now the render surface's content rect is calculated correctly, it could - // contribute to its render target. - RenderSurfaceImpl* render_target = render_surface->render_target(); - DCHECK(render_target->is_render_surface_list_member()); - render_target->AccumulateContentRectFromContributingRenderSurface( - render_surface); - render_target->increment_num_contributors(); - } -} - -static void ComputeListOfNonEmptySurfaces( - LayerTreeImpl* layer_tree_impl, - PropertyTrees* property_trees, - RenderSurfaceList* initial_surface_list, - RenderSurfaceList* final_surface_list) { - // Walk the initial surface list forwards. The root surface and each - // surface with a non-empty content rect go into the final render surface - // layer list. Surfaces with empty content rects or whose target isn't in - // the final list do not get added to the final list. - bool removed_surface = false; - for (RenderSurfaceImpl* surface : *initial_surface_list) { - bool is_root = - surface->EffectTreeIndex() == EffectTree::kContentsRootNodeId; - RenderSurfaceImpl* target_surface = surface->render_target(); - if (!is_root && (surface->content_rect().IsEmpty() || - !target_surface->is_render_surface_list_member())) { - surface->set_is_render_surface_list_member(false); - removed_surface = true; - target_surface->decrement_num_contributors(); - continue; - } - final_surface_list->push_back(surface); - } - if (removed_surface) { - for (LayerImpl* layer : *layer_tree_impl) { - if (layer->contributes_to_drawn_render_surface()) { - RenderSurfaceImpl* render_target = layer->render_target(); - if (!render_target->is_render_surface_list_member()) { - layer->set_contributes_to_drawn_render_surface(false); - render_target->decrement_num_contributors(); - } - } - } - } -} - -static void CalculateRenderSurfaceLayerList( - LayerTreeImpl* layer_tree_impl, - PropertyTrees* property_trees, - RenderSurfaceList* render_surface_list, - const int max_texture_size) { - RenderSurfaceList initial_render_surface_list; - - // First compute a list that might include surfaces that later turn out to - // have an empty content rect. After surface content rects are computed, - // produce a final list that omits empty surfaces. - ComputeInitialRenderSurfaceList(layer_tree_impl, property_trees, - &initial_render_surface_list); - ComputeSurfaceContentRects(property_trees, &initial_render_surface_list, - max_texture_size); - ComputeListOfNonEmptySurfaces(layer_tree_impl, property_trees, - &initial_render_surface_list, - render_surface_list); -} - -static void RecordRenderSurfaceReasonsForTracing( - const PropertyTrees* property_trees, - const RenderSurfaceList* render_surface_list) { - static const auto* tracing_enabled = - TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED("cc"); - if (!*tracing_enabled || - // Don't output single root render surface. - render_surface_list->size() <= 1) - return; - - TRACE_EVENT_INSTANT1("cc", "RenderSurfaceReasonCount", - TRACE_EVENT_SCOPE_THREAD, "total", - render_surface_list->size()); - - // kTest is the last value which is not included for tracing. - constexpr auto kNumReasons = static_cast<size_t>(RenderSurfaceReason::kTest); - int reason_counts[kNumReasons] = {0}; - for (const auto* render_surface : *render_surface_list) { - const auto* effect_node = - property_trees->effect_tree.Node(render_surface->EffectTreeIndex()); - reason_counts[static_cast<size_t>(effect_node->render_surface_reason)]++; - } - for (size_t i = 0; i < kNumReasons; i++) { - if (!reason_counts[i]) - continue; - TRACE_EVENT_INSTANT1( - "cc", "RenderSurfaceReasonCount", TRACE_EVENT_SCOPE_THREAD, - RenderSurfaceReasonToString(static_cast<RenderSurfaceReason>(i)), - reason_counts[i]); - } -} - -static void CalculateDrawPropertiesInternal( - LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs, - LayerImplList* output_update_layer_list) { - inputs->render_surface_list->clear(); - - LayerImplList visible_layer_list; - // Since page scale and elastic overscroll are SyncedProperties, changes - // on the active tree immediately affect the pending tree, so instead of - // trying to update property trees whenever these values change, we - // update property trees before using them. - - // We should never be setting a non-unit page scale factor on an oopif - // subframe ... if we attempt this log it and fail. - // TODO(wjmaclean): Remove as part of conditions for closing the bug. - // https://crbug.com/845097 - if (inputs->page_scale_factor != - inputs->property_trees->transform_tree.page_scale_factor() && - !inputs->page_scale_transform_node) { - LOG(ERROR) << "Setting PageScale on subframe: new psf = " - << inputs->page_scale_factor << ", old psf = " - << inputs->property_trees->transform_tree.page_scale_factor() - << ", in_oopif = " - << inputs->root_layer->layer_tree_impl() - ->settings() - .is_layer_tree_for_subframe; - NOTREACHED(); - } - - DCHECK_NE(inputs->page_scale_layer, inputs->root_layer); - draw_property_utils::UpdatePageScaleFactor(inputs->property_trees, - inputs->page_scale_transform_node, - inputs->page_scale_factor); - draw_property_utils::UpdateElasticOverscroll( - inputs->property_trees, inputs->elastic_overscroll_element_id, - inputs->elastic_overscroll); - // Similarly, the device viewport and device transform are shared - // by both trees. - PropertyTrees* property_trees = inputs->property_trees; - property_trees->clip_tree.SetViewportClip( - gfx::RectF(inputs->device_viewport_rect)); - property_trees->transform_tree.SetRootScaleAndTransform( - inputs->device_scale_factor, inputs->device_transform); - draw_property_utils::UpdatePropertyTreesAndRenderSurfaces( - inputs->root_layer, inputs->property_trees); - - { - TRACE_EVENT0("cc", "draw_property_utils::FindLayersThatNeedUpdates"); - draw_property_utils::FindLayersThatNeedUpdates( - inputs->root_layer->layer_tree_impl(), inputs->property_trees, - &visible_layer_list); - } - - { - TRACE_EVENT1("cc", - "draw_property_utils::ComputeDrawPropertiesOfVisibleLayers", - "visible_layers", visible_layer_list.size()); - draw_property_utils::ComputeDrawPropertiesOfVisibleLayers( - &visible_layer_list, inputs->property_trees); - } - - { - TRACE_EVENT0("cc", "CalculateRenderSurfaceLayerList"); - CalculateRenderSurfaceLayerList( - inputs->root_layer->layer_tree_impl(), inputs->property_trees, - inputs->render_surface_list, inputs->max_texture_size); - } - RecordRenderSurfaceReasonsForTracing(inputs->property_trees, - inputs->render_surface_list); - - // A root layer render_surface should always exist after - // CalculateDrawProperties. - DCHECK(inputs->property_trees->effect_tree.GetRenderSurface( - EffectTree::kContentsRootNodeId)); - - if (output_update_layer_list) - *output_update_layer_list = std::move(visible_layer_list); -} - -void LayerTreeHostCommon::CalculateDrawPropertiesForTesting( - CalcDrawPropsMainInputsForTesting* inputs) { - LayerList update_layer_list; - PropertyTrees* property_trees = - inputs->root_layer->layer_tree_host()->property_trees(); - if (inputs->root_layer->layer_tree_host()->IsUsingLayerLists()) { - // TODO(wangxianzhu): We should DCHECK(!needs_rebuild) after we remove all - // unnecessary setting of the flag in layer list mode. - property_trees->needs_rebuild = false; - } else { - DCHECK_EQ(1.f, inputs->page_scale_factor); - DCHECK(!inputs->page_scale_layer); - DCHECK(!inputs->inner_viewport_scroll_layer); - DCHECK(!inputs->outer_viewport_scroll_layer); - LayerTreeHost* layer_tree_host = inputs->root_layer->layer_tree_host(); - // TODO(wangxianzhu): Cleanup LayerTreeHostCommon methods and let caller - // sets these inputs on LayerTreeHost directly. - layer_tree_host->SetViewportRectAndScale(inputs->device_viewport_rect, - inputs->device_scale_factor, - viz::LocalSurfaceIdAllocation()); - PropertyTreeBuilder::BuildPropertyTrees( - inputs->root_layer->layer_tree_host()); - } - draw_property_utils::UpdatePropertyTrees( - inputs->root_layer->layer_tree_host(), property_trees); - draw_property_utils::FindLayersThatNeedUpdates( - inputs->root_layer->layer_tree_host(), property_trees, - &update_layer_list); - - if (inputs->update_layer_list) - *inputs->update_layer_list = std::move(update_layer_list); -} - -void LayerTreeHostCommon::CalculateDrawProperties( - CalcDrawPropsImplInputs* inputs) { - CalculateDrawPropertiesInternal(inputs, nullptr); -} - -void LayerTreeHostCommon::PrepareForUpdateDrawPropertiesForTesting( - LayerTreeImpl* layer_tree_impl) { - if (!layer_tree_impl->settings().use_layer_lists) - return; - - // TODO(wangxianzhu): We should DCHECK(!needs_rebuild) after we remove all - // unnecessary setting of the flag in layer list mode. - auto* property_trees = layer_tree_impl->property_trees(); - property_trees->needs_rebuild = false; - - // The following are needed for tests that modify impl-side property trees. - // In production code impl-side property trees are pushed from the main - // thread and the following are done in other ways. - std::vector<std::unique_ptr<RenderSurfaceImpl>> old_render_surfaces; - property_trees->effect_tree.TakeRenderSurfaces(&old_render_surfaces); - property_trees->effect_tree.CreateOrReuseRenderSurfaces(&old_render_surfaces, - layer_tree_impl); - layer_tree_impl->MoveChangeTrackingToLayers(); - property_trees->ResetCachedData(); -} - -void LayerTreeHostCommon::CalculateDrawPropertiesForTesting( - CalcDrawPropsImplInputsForTesting* inputs) { - PrepareForUpdateDrawPropertiesForTesting( - inputs->root_layer->layer_tree_impl()); - CalculateDrawPropertiesInternal(inputs, inputs->update_layer_list); -} - -PropertyTrees* GetPropertyTrees(const Layer* layer) { - return layer->layer_tree_host()->property_trees(); -} - -PropertyTrees* GetPropertyTrees(const LayerImpl* layer) { - return layer->layer_tree_impl()->property_trees(); -} - -} // namespace cc
diff --git a/cc/trees/layer_tree_host_common.h b/cc/trees/layer_tree_host_common.h deleted file mode 100644 index a12c014..0000000 --- a/cc/trees/layer_tree_host_common.h +++ /dev/null
@@ -1,198 +0,0 @@ -// Copyright 2011 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 CC_TREES_LAYER_TREE_HOST_COMMON_H_ -#define CC_TREES_LAYER_TREE_HOST_COMMON_H_ - -#include <stddef.h> - -#include <limits> -#include <vector> - -#include "base/bind.h" -#include "base/memory/ref_counted.h" -#include "cc/cc_export.h" -#include "cc/input/browser_controls_state.h" -#include "cc/layers/layer.h" -#include "cc/layers/layer_collections.h" -#include "cc/layers/layer_impl.h" -#include "cc/layers/picture_layer.h" -#include "cc/trees/layer_tree_host.h" -#include "cc/trees/layer_tree_impl.h" -#include "cc/trees/property_tree.h" -#include "ui/gfx/geometry/rect.h" -#include "ui/gfx/geometry/vector2d.h" -#include "ui/gfx/transform.h" - -namespace cc { - -class LayerImpl; -class Layer; -class SwapPromise; -class PropertyTrees; - -class CC_EXPORT LayerTreeHostCommon { - public: - struct CC_EXPORT CalcDrawPropsMainInputsForTesting { - public: - CalcDrawPropsMainInputsForTesting(Layer* root_layer, - const gfx::Rect& device_viewport_rect, - float device_scale_factor, - float page_scale_factor, - const Layer* page_scale_layer, - const Layer* inner_viewport_scroll_layer, - const Layer* outer_viewport_scroll_layer); - CalcDrawPropsMainInputsForTesting(Layer* root_layer, - const gfx::Rect& device_viewport_rect); - Layer* root_layer; - gfx::Rect device_viewport_rect; - float device_scale_factor; - float page_scale_factor; - const Layer* page_scale_layer; - const Layer* inner_viewport_scroll_layer; - const Layer* outer_viewport_scroll_layer; - // If not null, accepts layers output from FindLayersThatNeedUpdates(). - LayerList* update_layer_list = nullptr; - }; - - struct CC_EXPORT CalcDrawPropsImplInputs { - public: - CalcDrawPropsImplInputs(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - const gfx::Transform& device_transform, - float device_scale_factor, - float page_scale_factor, - const LayerImpl* page_scale_layer, - const LayerImpl* inner_viewport_scroll_layer, - const LayerImpl* outer_viewport_scroll_layer, - const gfx::Vector2dF& elastic_overscroll, - const ElementId elastic_overscroll_element_id, - int max_texture_size, - RenderSurfaceList* render_surface_list, - PropertyTrees* property_trees, - TransformNode* page_scale_transform_node); - - LayerImpl* root_layer; - gfx::Rect device_viewport_rect; - gfx::Transform device_transform; - float device_scale_factor; - float page_scale_factor; - const LayerImpl* page_scale_layer; - const LayerImpl* inner_viewport_scroll_layer; - const LayerImpl* outer_viewport_scroll_layer; - gfx::Vector2dF elastic_overscroll; - const ElementId elastic_overscroll_element_id; - int max_texture_size; - RenderSurfaceList* render_surface_list; - PropertyTrees* property_trees; - TransformNode* page_scale_transform_node; - }; - - struct CC_EXPORT CalcDrawPropsImplInputsForTesting - : public CalcDrawPropsImplInputs { - CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - const gfx::Transform& device_transform, - float device_scale_factor, - RenderSurfaceList* render_surface_list); - CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - const gfx::Transform& device_transform, - RenderSurfaceList* render_surface_list); - CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - RenderSurfaceList* render_surface_list); - CalcDrawPropsImplInputsForTesting(LayerImpl* root_layer, - const gfx::Rect& device_viewport_rect, - float device_scale_factor, - RenderSurfaceList* render_surface_list); - - // If not null, accepts layers output from FindLayersThatNeedUpdates(). - LayerImplList* update_layer_list = nullptr; - }; - - static int CalculateLayerJitter(LayerImpl* scrolling_layer); - static void CalculateDrawPropertiesForTesting( - CalcDrawPropsMainInputsForTesting* inputs); - - static void CalculateDrawProperties(CalcDrawPropsImplInputs* inputs); - - // TODO(wangxianzhu): Move these functions into testing classes. - static void PrepareForUpdateDrawPropertiesForTesting(LayerTreeImpl*); - static void CalculateDrawPropertiesForTesting( - CalcDrawPropsImplInputsForTesting* inputs); - - struct CC_EXPORT ScrollUpdateInfo { - ElementId element_id; - gfx::ScrollOffset scroll_delta; - - bool operator==(const ScrollUpdateInfo& other) const; - }; - - // Used to communicate scrollbar visibility from Impl thread to Blink. - // Scrollbar input is handled by Blink but the compositor thread animates - // opacity on scrollbars to fade them out when they're overlay. Blink needs - // to be told when they're faded out so it can stop handling input for - // invisible scrollbars. - struct CC_EXPORT ScrollbarsUpdateInfo { - ElementId element_id; - bool hidden; - - ScrollbarsUpdateInfo(); - ScrollbarsUpdateInfo(ElementId element_id, bool hidden); - - bool operator==(const ScrollbarsUpdateInfo& other) const; - }; -}; - -struct CC_EXPORT ScrollAndScaleSet { - ScrollAndScaleSet(); - ScrollAndScaleSet(const ScrollAndScaleSet&) = delete; - ~ScrollAndScaleSet(); - - ScrollAndScaleSet& operator=(const ScrollAndScaleSet&) = delete; - - // The inner viewport scroll delta is kept separate since it's special. - // Because the inner (visual) viewport's maximum offset depends on the - // current page scale, the two must be committed at the same time to prevent - // clamping. - LayerTreeHostCommon::ScrollUpdateInfo inner_viewport_scroll; - - std::vector<LayerTreeHostCommon::ScrollUpdateInfo> scrolls; - float page_scale_delta; - bool is_pinch_gesture_active; - - // Elastic overscroll effect offset delta. This is used only on Mac and shows - // the pixels that the page is rubber-banned/stretched by. - gfx::Vector2dF elastic_overscroll_delta; - - // Unconsumed scroll delta used to send overscroll events to the latched - // element on the main thread; - gfx::Vector2dF overscroll_delta; - - // The element id of the node to which scrolling is latched. This is used to - // send overscroll/scrollend DOM events to proper targets whenever needed. - ElementId scroll_latched_element_id; - - float top_controls_delta; - std::vector<LayerTreeHostCommon::ScrollbarsUpdateInfo> scrollbars; - std::vector<std::unique_ptr<SwapPromise>> swap_promises; - BrowserControlsState browser_controls_constraint; - bool browser_controls_constraint_changed; - - // Set to true when a scroll gesture being handled on the compositor has - // ended. - bool scroll_gesture_did_end; - - // Tracks different methods of scrolling (e.g. wheel, touch, precision - // touchpad, etc.). - ManipulationInfo manipulation_info; -}; - -CC_EXPORT PropertyTrees* GetPropertyTrees(const Layer* layer); -CC_EXPORT PropertyTrees* GetPropertyTrees(const LayerImpl* layer); - -} // namespace cc - -#endif // CC_TREES_LAYER_TREE_HOST_COMMON_H_
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 25ea491c..9b33a564 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -79,12 +79,12 @@ #include "cc/trees/image_animation_controller.h" #include "cc/trees/latency_info_swap_promise_monitor.h" #include "cc/trees/layer_tree_frame_sink.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/mutator_host.h" #include "cc/trees/presentation_time_callback_buffer.h" #include "cc/trees/render_frame_metadata.h" #include "cc/trees/render_frame_metadata_observer.h" +#include "cc/trees/scroll_and_scale_set.h" #include "cc/trees/scroll_node.h" #include "cc/trees/single_thread_proxy.h" #include "cc/trees/transform_node.h" @@ -202,25 +202,6 @@ } } -ui::FrameMetricsSettings LTHI_FrameMetricsSettings( - const LayerTreeSettings& settings) { - ui::FrameMetricsSource source = - settings.commit_to_active_tree - ? ui::FrameMetricsSource::UiCompositor - : ui::FrameMetricsSource::RendererCompositor; - ui::FrameMetricsSourceThread source_thread = - settings.commit_to_active_tree - ? ui::FrameMetricsSourceThread::UiCompositor - : ui::FrameMetricsSourceThread::RendererCompositor; - ui::FrameMetricsCompileTarget compile_target = - settings.using_synchronous_renderer_compositor - ? ui::FrameMetricsCompileTarget::SynchronousCompositor - : settings.wait_for_all_pipeline_stages_before_draw - ? ui::FrameMetricsCompileTarget::Headless - : ui::FrameMetricsCompileTarget::Chromium; - return ui::FrameMetricsSettings(source, source_thread, compile_target); -} - class ScopedPostAnimationEventsToMainThread { public: ScopedPostAnimationEventsToMainThread(MutatorHost* animation_host, @@ -314,12 +295,11 @@ image_animation_controller_(GetTaskRunner(), this, settings_.enable_image_animation_resync), - frame_metrics_(LTHI_FrameMetricsSettings(settings_)), - skipped_frame_tracker_(&frame_metrics_), is_animating_for_snap_(false), paint_image_generator_client_id_(PaintImage::GetNextGeneratorClientId()), scrollbar_controller_(std::make_unique<ScrollbarController>(this)), - frame_trackers_(compositor_frame_reporting_controller_.get()), + frame_trackers_(settings.single_thread_proxy_scheduler, + compositor_frame_reporting_controller_.get()), scroll_gesture_did_end_(false) { DCHECK(mutator_host_); mutator_host_->SetMutatorHostClient(this); @@ -1163,8 +1143,7 @@ // must compute all damage tracking before drawing anything, so that we know // the root damage rect. The root damage rect is then used to scissor each // surface. - DamageTracker::UpdateDamageTracking(active_tree_.get(), - active_tree_->GetRenderSurfaceList()); + DamageTracker::UpdateDamageTracking(active_tree_.get()); if (HasDamage()) { consecutive_frame_with_damage_count_++; @@ -1469,7 +1448,6 @@ DCHECK(layer_tree_frame_sink()); layer_tree_frame_sink()->Invalidate(needs_redraw); - skipped_frame_tracker_.DidProduceFrame(); } DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { @@ -2011,13 +1989,6 @@ PresentationTimeCallbackBuffer::PendingCallbacks activated = presentation_time_callbacks_.PopPendingCallbacks(frame_token); - // Update compositor frame latency and smoothness stats only for frames - // that caused on-screen damage. - if (!activated.frame_time.is_null()) { - frame_metrics_.AddFrameDisplayed(activated.frame_time, - details.presentation_feedback.timestamp); - } - // Send all the main-thread callbacks to the client in one batch. The client // is in charge of posting them to the main thread. client_->DidPresentCompositorFrameOnImplThread( @@ -2025,7 +1996,6 @@ } void LayerTreeHostImpl::DidNotNeedBeginFrame() { - skipped_frame_tracker_.WillNotProduceFrame(); frame_trackers_.NotifyPauseFrameProduction(); } @@ -2245,7 +2215,6 @@ DCHECK(CanDraw()); DCHECK_EQ(frame->has_no_damage, frame->render_passes.empty()); ResetRequiresHighResToDraw(); - skipped_frame_tracker_.DidProduceFrame(); if (frame->has_no_damage) { DCHECK(!resourceless_software_draw_); @@ -2651,8 +2620,6 @@ for (auto* it : video_frame_controllers_) it->OnBeginFrame(args); - skipped_frame_tracker_.BeginFrame(args.frame_time, args.interval); - bool recent_frame_had_no_damage = consecutive_frame_with_damage_count_ < settings_.damaged_frame_limit; // Check damage early if the setting is enabled and a recent frame had no @@ -2662,8 +2629,7 @@ CanDraw()) { bool ok = active_tree()->UpdateDrawProperties(); DCHECK(ok); - DamageTracker::UpdateDamageTracking(active_tree_.get(), - active_tree_->GetRenderSurfaceList()); + DamageTracker::UpdateDamageTracking(active_tree_.get()); bool has_damage = HasDamage(); // Animations are updated after we attempt to draw. If the frame is aborted, // update animations now. @@ -2688,7 +2654,6 @@ frame_trackers_.NotifyMainFrameCausedNoDamage( current_begin_frame_tracker_.Current()); } - skipped_frame_tracker_.FinishFrame(); impl_thread_phase_ = ImplThreadPhase::IDLE; current_begin_frame_tracker_.Finish(); } @@ -3171,8 +3136,6 @@ void LayerTreeHostImpl::SetNeedsRedraw() { NotifySwapPromiseMonitorsOfSetNeedsRedraw(); client_->SetNeedsRedrawOnImplThread(); - if (CurrentlyScrollingNode()) - skipped_frame_tracker_.WillProduceFrame(); } ManagedMemoryPolicy LayerTreeHostImpl::ActualManagedMemoryPolicy() const { @@ -5152,8 +5115,8 @@ ScrollAndScaleSet* scroll_info) const { scroll_info->scrollbars.reserve(scrollbar_animation_controllers_.size()); for (auto& pair : scrollbar_animation_controllers_) { - scroll_info->scrollbars.push_back(LayerTreeHostCommon::ScrollbarsUpdateInfo( - pair.first, pair.second->ScrollbarsHidden())); + scroll_info->scrollbars.push_back( + {pair.first, pair.second->ScrollbarsHidden()}); } }
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index fbdc241..08185ce 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -59,7 +59,6 @@ #include "components/viz/common/surfaces/surface_id.h" #include "components/viz/common/surfaces/surface_range.h" #include "ui/gfx/geometry/rect.h" -#include "ui/latency/frame_metrics.h" namespace gfx { class ScrollOffset; @@ -1239,8 +1238,6 @@ std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_; PresentationTimeCallbackBuffer presentation_time_callbacks_; - ui::FrameMetrics frame_metrics_; - ui::SkippedFrameTracker skipped_frame_tracker_; bool is_animating_for_snap_; const PaintImage::GeneratorClientId paint_image_generator_client_id_;
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 58266ffa1..cab5780 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -44,6 +44,7 @@ #include "cc/resources/ui_resource_bitmap.h" #include "cc/resources/ui_resource_manager.h" #include "cc/test/animation_test_common.h" +#include "cc/test/fake_impl_task_runner_provider.h" #include "cc/test/fake_layer_tree_frame_sink.h" #include "cc/test/fake_layer_tree_host_impl.h" #include "cc/test/fake_mask_layer_impl.h" @@ -62,11 +63,11 @@ #include "cc/trees/draw_property_utils.h" #include "cc/trees/effect_node.h" #include "cc/trees/latency_info_swap_promise.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/mutator_host.h" #include "cc/trees/render_frame_metadata.h" #include "cc/trees/render_frame_metadata_observer.h" +#include "cc/trees/scroll_and_scale_set.h" #include "cc/trees/scroll_node.h" #include "cc/trees/single_thread_proxy.h" #include "cc/trees/transform_node.h" @@ -294,11 +295,11 @@ const gfx::Size& viewport_size, Args&&... args) { const int kRootLayerId = 1; - DCHECK(!layer_tree_impl->root_layer_for_testing()); + DCHECK(!layer_tree_impl->root_layer()); DCHECK(!layer_tree_impl->LayerById(kRootLayerId)); layer_tree_impl->SetRootLayerForTesting( T::Create(layer_tree_impl, kRootLayerId, std::forward<Args>(args)...)); - auto* root = layer_tree_impl->root_layer_for_testing(); + auto* root = layer_tree_impl->root_layer(); root->SetBounds(viewport_size); layer_tree_impl->SetDeviceViewportRect( gfx::Rect(DipSizeToPixelSize(viewport_size))); @@ -310,9 +311,7 @@ return SetupRootLayer<LayerImpl>(host_impl_->active_tree(), viewport_size); } - LayerImpl* root_layer() { - return host_impl_->active_tree()->root_layer_for_testing(); - } + LayerImpl* root_layer() { return host_impl_->active_tree()->root_layer(); } gfx::Size DipSizeToPixelSize(const gfx::Size& size) { return gfx::ScaleToRoundedSize( @@ -393,7 +392,7 @@ const gfx::Size& inner_viewport_size, const gfx::Size& outer_viewport_size, const gfx::Size& content_size) { - DCHECK(!layer_tree_impl->root_layer_for_testing()); + DCHECK(!layer_tree_impl->root_layer()); auto* root = SetupRootLayer<LayerImpl>(layer_tree_impl, inner_viewport_size); SetupViewport(root, outer_viewport_size, content_size); @@ -550,15 +549,8 @@ return scroll_state; } - void UpdateDrawProperties(LayerTreeImpl* layer_tree_impl) { - LayerTreeHostCommon::PrepareForUpdateDrawPropertiesForTesting( - layer_tree_impl); - layer_tree_impl->UpdateDrawProperties(); - } - void DrawFrame() { - LayerTreeHostCommon::PrepareForUpdateDrawPropertiesForTesting( - host_impl_->active_tree()); + PrepareForUpdateDrawProperties(host_impl_->active_tree()); TestFrameData frame; EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); host_impl_->DrawLayers(&frame); @@ -694,8 +686,7 @@ } void DrawOneFrame() { - LayerTreeHostCommon::PrepareForUpdateDrawPropertiesForTesting( - host_impl_->active_tree()); + PrepareForUpdateDrawProperties(host_impl_->active_tree()); TestFrameData frame_data; host_impl_->PrepareToDraw(&frame_data); host_impl_->DidDrawAllLayers(frame_data); @@ -1999,10 +1990,7 @@ // Set up the property trees so that UpdateDrawProperties will work in // CommitComplete below. - RenderSurfaceList list; - LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( - root, gfx::Rect(50, 50), &list); - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); + UpdateDrawProperties(host_impl_->active_tree()); EXPECT_FALSE(did_request_next_frame_); EXPECT_FALSE(did_request_redraw_); @@ -5614,7 +5602,7 @@ EXPECT_EQ(viewport_size_, inner_clip->bounds()); EXPECT_EQ(0.f, host_impl_->browser_controls_manager()->ContentTopOffset()); - host_impl_->sync_tree()->root_layer_for_testing()->SetBounds(gfx::Size( + host_impl_->sync_tree()->root_layer()->SetBounds(gfx::Size( inner_clip->bounds().width(), inner_clip->bounds().height() - 50.f)); host_impl_->ActivateSyncTree(); @@ -8471,8 +8459,8 @@ } void VerifyQuadsExactlyCoverViewport(const viz::QuadList& quad_list) { - LayerTestCommon::VerifyQuadsExactlyCoverRect( - quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_))); + VerifyQuadsExactlyCoverRect(quad_list, + gfx::Rect(DipSizeToPixelSize(viewport_size_))); } // Make sure that the texture coordinates match their expectations. @@ -8992,7 +8980,7 @@ resourceless_software_draw, false); EXPECT_EQ(1u, last_on_draw_frame_->will_draw_layers.size()); - EXPECT_EQ(host_impl_->active_tree()->root_layer_for_testing(), + EXPECT_EQ(host_impl_->active_tree()->root_layer(), last_on_draw_frame_->will_draw_layers[0]); } @@ -10717,9 +10705,7 @@ CreatePendingTree(); SetupRootLayer<LayerImpl>(host_impl_->pending_tree(), layer_size); UpdateDrawProperties(host_impl_->pending_tree()); - host_impl_->pending_tree() - ->root_layer_for_testing() - ->SetNeedsPushProperties(); + host_impl_->pending_tree()->root_layer()->SetNeedsPushProperties(); host_impl_->ActivateSyncTree(); UpdateDrawProperties(host_impl_->active_tree()); @@ -12337,53 +12323,6 @@ EXPECT_EQ(node->surface_contents_scale, gfx::Vector2dF(2.f, 2.f)); } -TEST_F(LayerTreeHostImplTest, JitterTest) { - host_impl_->active_tree()->SetDeviceViewportRect(gfx::Rect(100, 100)); - - CreatePendingTree(); - SetupViewportLayers(host_impl_->pending_tree(), gfx::Size(50, 50), - gfx::Size(100, 100), gfx::Size(100, 100)); - auto* scroll_layer = host_impl_->pending_tree()->InnerViewportScrollLayer(); - auto* content_layer = AddLayer<LayerImpl>(host_impl_->pending_tree()); - content_layer->SetBounds(gfx::Size(100, 100)); - content_layer->SetDrawsContent(true); - CopyProperties(host_impl_->pending_tree()->OuterViewportScrollLayer(), - content_layer); - UpdateDrawProperties(host_impl_->pending_tree()); - - host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); - const int scroll = 5; - int accumulated_scroll = 0; - for (int i = 0; i < LayerTreeImpl::kFixedPointHitsThreshold + 1; ++i) { - host_impl_->ActivateSyncTree(); - accumulated_scroll += scroll; - SetScrollOffset(host_impl_->InnerViewportScrollLayer(), - gfx::ScrollOffset(0, accumulated_scroll)); - UpdateDrawProperties(host_impl_->active_tree()); - - CreatePendingTree(); - LayerTreeImpl* pending_tree = host_impl_->pending_tree(); - pending_tree->set_source_frame_number(i + 1); - pending_tree->PushPageScaleFromMainThread(1.f, 1.f, 1.f); - // Simulate scroll offset pushed from the main thread. - SetScrollOffset(scroll_layer, gfx::ScrollOffset(0, accumulated_scroll)); - // The scroll done on the active tree is undone on the pending tree. - content_layer->SetOffsetToTransformParent( - gfx::Vector2dF(0, accumulated_scroll)); - content_layer->SetNeedsPushProperties(); - pending_tree->UpdateDrawProperties(); - - float jitter = LayerTreeHostCommon::CalculateLayerJitter(content_layer); - // There should not be any jitter measured till we hit the fixed point hits - // threshold. 250 is sqrt(50 * 50) * 5. 50x50 is the visible bounds of - // content (clipped by the viewport). 5 is the distance between the - // locations of the content in the pending tree and the active tree. - float expected_jitter = - (i == pending_tree->kFixedPointHitsThreshold) ? 250 : 0; - EXPECT_EQ(jitter, expected_jitter); - } -} - // Checks that if we lose a GPU raster enabled LayerTreeFrameSink and replace // it with a software LayerTreeFrameSink, LayerTreeHostImpl correctly // re-computes GPU rasterization status. @@ -12714,8 +12653,7 @@ // invalidated on the pending tree. host_impl_->InvalidateContentOnImplSide(); pending_tree = host_impl_->pending_tree(); - root = static_cast<FakePictureLayerImpl*>( - pending_tree->root_layer_for_testing()); + root = static_cast<FakePictureLayerImpl*>(pending_tree->root_layer()); for (auto* tile : root->tilings()->tiling_at(0)->AllTilesForTesting()) { if (tile->tiling_i_index() < 2 && tile->tiling_j_index() < 2) EXPECT_TRUE(tile->HasRasterTask());
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index 2d8e322..6742dda 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc
@@ -51,9 +51,9 @@ #include "cc/trees/clip_node.h" #include "cc/trees/effect_node.h" #include "cc/trees/frame_rate_counter.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_host_impl.h" #include "cc/trees/layer_tree_impl.h" +#include "cc/trees/scroll_and_scale_set.h" #include "cc/trees/scroll_node.h" #include "cc/trees/single_thread_proxy.h" #include "cc/trees/swap_promise.h" @@ -779,7 +779,7 @@ } void DrawLayersOnThread(LayerTreeHostImpl* impl) override { - VerifyAfterValues(impl->active_tree()->root_layer_for_testing()); + VerifyAfterValues(impl->active_tree()->root_layer()); } void DidCommitAndDrawFrame() override { @@ -1644,7 +1644,7 @@ void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { gfx::Transform transform; FilterOperations filters; - LayerImpl* root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* root = impl->active_tree()->root_layer(); switch (static_cast<Animations>(index_)) { case OPACITY: index_++; @@ -1914,7 +1914,7 @@ void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { EffectTree& effect_tree = impl->sync_tree()->property_trees()->effect_tree; - LayerImpl* root = impl->sync_tree()->root_layer_for_testing(); + LayerImpl* root = impl->sync_tree()->root_layer(); EffectNode* node = effect_tree.Node(root->effect_tree_index()); switch (impl->sync_tree()->source_frame_number()) { case 0: @@ -2186,8 +2186,7 @@ void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { auto* mask_surface = GetRenderSurface(impl->sync_tree()->LayerById(mask_layer_->id())); - auto* root_surface = - GetRenderSurface(impl->sync_tree()->root_layer_for_testing()); + auto* root_surface = GetRenderSurface(impl->sync_tree()->root_layer()); ASSERT_TRUE(mask_surface); switch (index_) { case 0: { @@ -2534,10 +2533,8 @@ } else { gfx::Rect root_damage_rect = frame_data->render_passes.back()->damage_rect; - EXPECT_EQ( - gfx::Rect( - host_impl->active_tree()->root_layer_for_testing()->bounds()), - root_damage_rect); + EXPECT_EQ(gfx::Rect(host_impl->active_tree()->root_layer()->bounds()), + root_damage_rect); EXPECT_EQ(4.f, host_impl->active_tree()->device_scale_factor()); EndTest(); } @@ -2621,10 +2618,8 @@ if (!frame_data->has_no_damage) { gfx::Rect root_damage_rect = frame_data->render_passes.back()->damage_rect; - EXPECT_EQ( - gfx::Rect( - host_impl->active_tree()->root_layer_for_testing()->bounds()), - root_damage_rect); + EXPECT_EQ(gfx::Rect(host_impl->active_tree()->root_layer()->bounds()), + root_damage_rect); } return draw_result; @@ -3293,8 +3288,8 @@ // Device viewport is scaled. EXPECT_EQ(gfx::Rect(60, 60), impl->active_tree()->GetDeviceViewport()); - FakePictureLayerImpl* root = static_cast<FakePictureLayerImpl*>( - impl->active_tree()->root_layer_for_testing()); + FakePictureLayerImpl* root = + static_cast<FakePictureLayerImpl*>(impl->active_tree()->root_layer()); FakePictureLayerImpl* child = static_cast<FakePictureLayerImpl*>( impl->active_tree()->LayerById(child_layer_->id())); @@ -3858,10 +3853,10 @@ } void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { - PictureLayerImpl* root_layer = static_cast<PictureLayerImpl*>( - host_impl->active_tree()->root_layer_for_testing()); + PictureLayerImpl* root_layer = + static_cast<PictureLayerImpl*>(host_impl->active_tree()->root_layer()); bool can_use_lcd_text = - host_impl->active_tree()->root_layer_for_testing()->CanUseLCDText(); + host_impl->active_tree()->root_layer()->CanUseLCDText(); switch (host_impl->active_tree()->source_frame_number()) { case 0: // The first draw. @@ -4450,7 +4445,7 @@ // Make sure the new root is pushed. EXPECT_EQ(1u, static_cast<PushPropertiesCountingLayerImpl*>( - host_impl->active_tree()->root_layer_for_testing()) + host_impl->active_tree()->root_layer()) ->push_properties_count()); return; case 4: @@ -4556,7 +4551,7 @@ // Pull the layers that we need from the tree assuming the same structure // as LayerTreeHostTestLayersPushProperties root_impl_ = static_cast<PushPropertiesCountingLayerImpl*>( - host_impl->active_tree()->root_layer_for_testing()); + host_impl->active_tree()->root_layer()); LayerTreeImpl* impl = root_impl_->layer_tree_impl(); if (impl->LayerById(child_->id())) { @@ -8229,8 +8224,8 @@ void WillPrepareToDrawOnThread(LayerTreeHostImpl* host_impl) override { gfx::Rect image_rect(-1, -1, 502, 502); - auto* layer = static_cast<PictureLayerImpl*>( - host_impl->active_tree()->root_layer_for_testing()); + auto* layer = + static_cast<PictureLayerImpl*>(host_impl->active_tree()->root_layer()); switch (++draw_count_) { case 1: // First draw, everything is invalid.
diff --git a/cc/trees/layer_tree_host_unittest_animation.cc b/cc/trees/layer_tree_host_unittest_animation.cc index 56bd3ff8..a21e88e 100644 --- a/cc/trees/layer_tree_host_unittest_animation.cc +++ b/cc/trees/layer_tree_host_unittest_animation.cc
@@ -352,7 +352,7 @@ base::TimeTicks monotonic_time) override { // TODO(ajuma): This test only checks the active tree. Add checks for // pending tree too. - if (!host_impl->active_tree()->root_layer_for_testing()) + if (!host_impl->active_tree()->root_layer()) return; // Wait for the commit with the animation to happen. @@ -1155,7 +1155,7 @@ if (!host_impl->pending_tree()) return false; - if (!host_impl->active_tree()->root_layer_for_testing()) + if (!host_impl->active_tree()->root_layer()) return false; scoped_refptr<AnimationTimeline> timeline_impl = @@ -2349,11 +2349,11 @@ void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { if (host_impl->pending_tree()->source_frame_number() <= 1) { EXPECT_TRUE(host_impl->pending_tree() - ->root_layer_for_testing() + ->root_layer() ->screen_space_transform_is_animating()); } else { EXPECT_FALSE(host_impl->pending_tree() - ->root_layer_for_testing() + ->root_layer() ->screen_space_transform_is_animating()); } } @@ -2373,7 +2373,7 @@ DrawResult draw_result) override { const bool screen_space_transform_is_animating = host_impl->active_tree() - ->root_layer_for_testing() + ->root_layer() ->screen_space_transform_is_animating(); // Check that screen_space_transform_is_animating changes only once.
diff --git a/cc/trees/layer_tree_host_unittest_checkerimaging.cc b/cc/trees/layer_tree_host_unittest_checkerimaging.cc index 2865584..f841b4c 100644 --- a/cc/trees/layer_tree_host_unittest_checkerimaging.cc +++ b/cc/trees/layer_tree_host_unittest_checkerimaging.cc
@@ -120,7 +120,7 @@ case 2: { // Ensure that the expected tiles are invalidated on the sync tree. PictureLayerImpl* sync_layer_impl = static_cast<PictureLayerImpl*>( - host_impl->sync_tree()->root_layer_for_testing()); + host_impl->sync_tree()->root_layer()); PictureLayerTiling* sync_tiling = sync_layer_impl->picture_layer_tiling_set() ->FindTilingWithResolution(TileResolution::HIGH_RESOLUTION); @@ -180,8 +180,8 @@ EXPECT_EQ(host_impl->sync_tree()->source_frame_number(), 0); // Ensure that the expected tiles are invalidated on the sync tree. - PictureLayerImpl* sync_layer_impl = static_cast<PictureLayerImpl*>( - host_impl->sync_tree()->root_layer_for_testing()); + PictureLayerImpl* sync_layer_impl = + static_cast<PictureLayerImpl*>(host_impl->sync_tree()->root_layer()); PictureLayerTiling* sync_tiling = sync_layer_impl->picture_layer_tiling_set()->FindTilingWithResolution( TileResolution::HIGH_RESOLUTION);
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc index 55bb0a7..30ec967 100644 --- a/cc/trees/layer_tree_host_unittest_context.cc +++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -750,8 +750,8 @@ } void DrawLayersOnThread(LayerTreeHostImpl* impl) override { - FakePictureLayerImpl* picture_impl = static_cast<FakePictureLayerImpl*>( - impl->active_tree()->root_layer_for_testing()); + FakePictureLayerImpl* picture_impl = + static_cast<FakePictureLayerImpl*>(impl->active_tree()->root_layer()); EXPECT_TRUE(picture_impl->HighResTiling() ->TileAt(0, 0) ->draw_info() @@ -829,7 +829,7 @@ // fail before second activation. if (num_commits_ >= 2) { root_picture = static_cast<FakePictureLayerImpl*>( - host_impl->active_tree()->root_layer_for_testing()); + host_impl->active_tree()->root_layer()); child_picture = static_cast<FakePictureLayerImpl*>( host_impl->active_tree()->LayerById(child_->id())); grandchild_picture = static_cast<FakePictureLayerImpl*>(
diff --git a/cc/trees/layer_tree_host_unittest_copyrequest.cc b/cc/trees/layer_tree_host_unittest_copyrequest.cc index 2545887..2d3bc04e8 100644 --- a/cc/trees/layer_tree_host_unittest_copyrequest.cc +++ b/cc/trees/layer_tree_host_unittest_copyrequest.cc
@@ -1319,7 +1319,7 @@ DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, LayerTreeHostImpl::FrameData* frame_data, DrawResult draw_result) override { - LayerImpl* root = host_impl->active_tree()->root_layer_for_testing(); + LayerImpl* root = host_impl->active_tree()->root_layer(); LayerImpl* child = host_impl->active_tree()->LayerById(child_->id()); bool saw_root = false;
diff --git a/cc/trees/layer_tree_host_unittest_damage.cc b/cc/trees/layer_tree_host_unittest_damage.cc index 945d4e9..a61d2ea 100644 --- a/cc/trees/layer_tree_host_unittest_damage.cc +++ b/cc/trees/layer_tree_host_unittest_damage.cc
@@ -56,7 +56,7 @@ EXPECT_EQ(DRAW_SUCCESS, draw_result); RenderSurfaceImpl* root_surface = - GetRenderSurface(impl->active_tree()->root_layer_for_testing()); + GetRenderSurface(impl->active_tree()->root_layer()); gfx::Rect root_damage; EXPECT_TRUE( root_surface->damage_tracker()->GetDamageRectIfValid(&root_damage)); @@ -118,7 +118,7 @@ EXPECT_EQ(DRAW_SUCCESS, draw_result); RenderSurfaceImpl* root_surface = - GetRenderSurface(impl->active_tree()->root_layer_for_testing()); + GetRenderSurface(impl->active_tree()->root_layer()); gfx::Rect root_damage; EXPECT_TRUE( root_surface->damage_tracker()->GetDamageRectIfValid(&root_damage)); @@ -258,7 +258,7 @@ EXPECT_EQ(DRAW_SUCCESS, draw_result); RenderSurfaceImpl* root_surface = - GetRenderSurface(host_impl->active_tree()->root_layer_for_testing()); + GetRenderSurface(host_impl->active_tree()->root_layer()); gfx::Rect root_damage; EXPECT_TRUE( root_surface->damage_tracker()->GetDamageRectIfValid(&root_damage)); @@ -378,7 +378,7 @@ DrawResult draw_result) override { EXPECT_EQ(DRAW_SUCCESS, draw_result); RenderSurfaceImpl* root_surface = - GetRenderSurface(host_impl->active_tree()->root_layer_for_testing()); + GetRenderSurface(host_impl->active_tree()->root_layer()); gfx::Rect root_damage; EXPECT_TRUE( root_surface->damage_tracker()->GetDamageRectIfValid(&root_damage)); @@ -464,7 +464,7 @@ DrawResult draw_result) override { EXPECT_EQ(DRAW_SUCCESS, draw_result); RenderSurfaceImpl* root_surface = - GetRenderSurface(host_impl->active_tree()->root_layer_for_testing()); + GetRenderSurface(host_impl->active_tree()->root_layer()); gfx::Rect root_damage; EXPECT_TRUE( root_surface->damage_tracker()->GetDamageRectIfValid(&root_damage));
diff --git a/cc/trees/layer_tree_host_unittest_occlusion.cc b/cc/trees/layer_tree_host_unittest_occlusion.cc index 47fb835..e54c35a 100644 --- a/cc/trees/layer_tree_host_unittest_occlusion.cc +++ b/cc/trees/layer_tree_host_unittest_occlusion.cc
@@ -49,7 +49,7 @@ void BeginTest() override { PostSetNeedsCommitToMainThread(); } void DrawLayersOnThread(LayerTreeHostImpl* impl) override { - LayerImpl* root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* root = impl->active_tree()->root_layer(); LayerImpl* child = impl->active_tree()->LayerById(child_->id()); // Verify the draw properties are valid. @@ -103,7 +103,7 @@ void BeginTest() override { PostSetNeedsCommitToMainThread(); } void DrawLayersOnThread(LayerTreeHostImpl* impl) override { - LayerImpl* root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* root = impl->active_tree()->root_layer(); LayerImpl* child = impl->active_tree()->LayerById(child_->id()); RenderSurfaceImpl* surface = GetRenderSurface(child); @@ -168,7 +168,7 @@ void BeginTest() override { PostSetNeedsCommitToMainThread(); } void DrawLayersOnThread(LayerTreeHostImpl* impl) override { - LayerImpl* root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* root = impl->active_tree()->root_layer(); LayerImpl* child = impl->active_tree()->LayerById(child_->id()); RenderSurfaceImpl* child_surface = GetRenderSurface(child); LayerImpl* mask = impl->active_tree()->LayerById(mask_->id());
diff --git a/cc/trees/layer_tree_host_unittest_picture.cc b/cc/trees/layer_tree_host_unittest_picture.cc index 445a263..3e89fab 100644 --- a/cc/trees/layer_tree_host_unittest_picture.cc +++ b/cc/trees/layer_tree_host_unittest_picture.cc
@@ -77,7 +77,7 @@ } void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override { - LayerImpl* active_root_impl = impl->active_tree()->root_layer_for_testing(); + LayerImpl* active_root_impl = impl->active_tree()->root_layer(); int picture_id = impl->active_tree()->source_frame_number() < 2 ? picture_id1_ : picture_id2_; @@ -293,7 +293,7 @@ PictureLayerTiling* tiling = picture_impl->HighResTiling(); int num_tiles_y = tiling->TilingDataForTesting().num_tiles_y(); - if (!impl->active_tree()->root_layer_for_testing()) { + if (!impl->active_tree()->root_layer()) { // If active tree doesn't have the layer, then pending tree should have // all needed tiles. EXPECT_TRUE(tiling->TileAt(0, 0));
diff --git a/cc/trees/layer_tree_host_unittest_proxy.cc b/cc/trees/layer_tree_host_unittest_proxy.cc index 457b2d1..dca5f3a 100644 --- a/cc/trees/layer_tree_host_unittest_proxy.cc +++ b/cc/trees/layer_tree_host_unittest_proxy.cc
@@ -7,6 +7,7 @@ #include "cc/test/fake_content_layer_client.h" #include "cc/test/fake_picture_layer.h" #include "cc/test/layer_tree_test.h" +#include "cc/trees/layer_tree_impl.h" #include "cc/trees/proxy_impl.h" #include "cc/trees/proxy_main.h"
diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc index fb7a1dcd..8df1a97 100644 --- a/cc/trees/layer_tree_host_unittest_scroll.cc +++ b/cc/trees/layer_tree_host_unittest_scroll.cc
@@ -27,7 +27,6 @@ #include "cc/test/test_ukm_recorder_factory.h" #include "cc/trees/clip_node.h" #include "cc/trees/effect_node.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/scroll_node.h" #include "cc/trees/transform_node.h" @@ -137,7 +136,7 @@ } void DrawLayersOnThread(LayerTreeHostImpl* impl) override { - LayerImpl* root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* root = impl->active_tree()->root_layer(); LayerImpl* scroll_layer = impl->OuterViewportScrollLayer(); EXPECT_VECTOR_EQ(gfx::Vector2d(), ScrollDelta(scroll_layer)); @@ -863,7 +862,7 @@ if (impl->pending_tree()) impl->SetNeedsRedraw(); - LayerImpl* root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* root = impl->active_tree()->root_layer(); LayerImpl* scroll_layer = impl->OuterViewportScrollLayer(); LayerImpl* pending_root = impl->active_tree()->FindPendingTreeLayerById(root->id()); @@ -976,7 +975,7 @@ void BeginCommitOnThread(LayerTreeHostImpl* impl) override { // Scroll after the 2nd commit has started. if (impl->active_tree()->source_frame_number() == 0) { - LayerImpl* active_root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* active_root = impl->active_tree()->root_layer(); LayerImpl* active_scroll_layer = impl->OuterViewportScrollLayer(); ASSERT_TRUE(active_root); ASSERT_TRUE(active_scroll_layer); @@ -988,10 +987,10 @@ void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { // We force a second draw here of the first commit before activating // the second commit. - LayerImpl* active_root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* active_root = impl->active_tree()->root_layer(); LayerImpl* active_scroll_layer = active_root ? impl->OuterViewportScrollLayer() : nullptr; - LayerImpl* pending_root = impl->pending_tree()->root_layer_for_testing(); + LayerImpl* pending_root = impl->pending_tree()->root_layer(); LayerImpl* pending_scroll_layer = impl->pending_tree()->OuterViewportScrollLayer(); @@ -1534,7 +1533,7 @@ private: void Scroll(LayerTreeHostImpl* impl) { - LayerImpl* root = impl->active_tree()->root_layer_for_testing(); + LayerImpl* root = impl->active_tree()->root_layer(); LayerImpl* scroll_layer = impl->OuterViewportScrollLayer(); scroll_layer->SetBounds(
diff --git a/cc/trees/layer_tree_host_unittest_video.cc b/cc/trees/layer_tree_host_unittest_video.cc index c379af6..f69dc76d 100644 --- a/cc/trees/layer_tree_host_unittest_video.cc +++ b/cc/trees/layer_tree_host_unittest_video.cc
@@ -48,7 +48,7 @@ DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, LayerTreeHostImpl::FrameData* frame, DrawResult draw_result) override { - LayerImpl* root_layer = host_impl->active_tree()->root_layer_for_testing(); + LayerImpl* root_layer = host_impl->active_tree()->root_layer(); RenderSurfaceImpl* root_surface = GetRenderSurface(root_layer); gfx::Rect damage_rect; EXPECT_TRUE(
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index 49956bd..79cc2d6 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc
@@ -38,7 +38,6 @@ #include "cc/trees/draw_property_utils.h" #include "cc/trees/effect_node.h" #include "cc/trees/layer_tree_frame_sink.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_host_impl.h" #include "cc/trees/mutator_host.h" #include "cc/trees/occlusion_tracker.h" @@ -1279,7 +1278,8 @@ } bool LayerTreeImpl::UpdateDrawProperties( - bool update_image_animation_controller) { + bool update_image_animation_controller, + LayerImplList* output_update_layer_list_for_testing) { if (!needs_update_draw_properties_) return true; @@ -1315,14 +1315,9 @@ // We verify visible rect calculations whenever we verify clip tree // calculations except when this function is explicitly passed a flag asking // us to skip it. - LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( - layer_list_[0].get(), GetDeviceViewport(), host_impl_->DrawTransform(), - device_scale_factor(), current_page_scale_factor(), PageScaleLayer(), - InnerViewportScrollLayer(), OuterViewportScrollLayer(), - elastic_overscroll()->Current(IsActiveTree()), - OverscrollElasticityElementId(), max_texture_size(), - &render_surface_list_, &property_trees_, PageScaleTransformNode()); - LayerTreeHostCommon::CalculateDrawProperties(&inputs); + draw_property_utils::CalculateDrawProperties( + this, &render_surface_list_, output_update_layer_list_for_testing); + if (const char* client_name = GetClientNameForMetrics()) { UMA_HISTOGRAM_COUNTS_1M( base::StringPrintf(
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h index 4d28bc6..f74d18f6 100644 --- a/cc/trees/layer_tree_impl.h +++ b/cc/trees/layer_tree_impl.h
@@ -162,7 +162,7 @@ // Other public methods // --------------------------------------------------------------------------- - LayerImpl* root_layer_for_testing() { + LayerImpl* root_layer() { return layer_list_.empty() ? nullptr : layer_list_[0].get(); } const RenderSurfaceImpl* RootRenderSurface() const; @@ -433,13 +433,18 @@ const SyncedBrowserControls* top_controls_shown_ratio() const { return top_controls_shown_ratio_.get(); } + gfx::Vector2dF current_elastic_overscroll() const { + return elastic_overscroll()->Current(IsActiveTree()); + } void SetElementIdsForTesting(); // Updates draw properties and render surface layer list, as well as tile // priorities. Returns false if it was unable to update. Updating lcd // text may cause invalidations, so should only be done after a commit. - bool UpdateDrawProperties(bool update_image_animation_controller = true); + bool UpdateDrawProperties( + bool update_image_animation_controller = true, + LayerImplList* output_update_layer_list_for_testing = nullptr); void UpdateCanUseLCDText(); void set_needs_update_draw_properties() { @@ -682,6 +687,12 @@ return host_impl_->paint_worklet_tracker(); } + const gfx::Transform& DrawTransform() const { + return host_impl_->DrawTransform(); + } + + TransformNode* PageScaleTransformNode(); + protected: float ClampPageScaleFactorToLimits(float page_scale_factor) const; void PushPageScaleFactorAndLimits(const float* page_scale_factor, @@ -696,7 +707,6 @@ private: friend class LayerTreeHost; - TransformNode* PageScaleTransformNode(); void UpdatePageScaleNode(); ElementListType GetElementTypeForAnimation() const;
diff --git a/cc/trees/layer_tree_impl_unittest.cc b/cc/trees/layer_tree_impl_unittest.cc index ddbb9847..eb85f376 100644 --- a/cc/trees/layer_tree_impl_unittest.cc +++ b/cc/trees/layer_tree_impl_unittest.cc
@@ -8,10 +8,9 @@ #include "cc/test/fake_layer_tree_host_impl.h" #include "cc/test/fake_raster_source.h" #include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" +#include "cc/test/layer_tree_impl_test_base.h" #include "cc/trees/clip_node.h" #include "cc/trees/draw_property_utils.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_host_impl.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -19,12 +18,11 @@ namespace cc { namespace { -class LayerTreeImplTest : public LayerTestCommon::LayerImplTest, - public testing::Test { +class LayerTreeImplTest : public LayerTreeImplTestBase, public testing::Test { public: LayerTreeImplTest() = default; explicit LayerTreeImplTest(const LayerTreeSettings& settings) - : LayerImplTest(settings) {} + : LayerTreeImplTestBase(settings) {} void SetUp() override { root_layer()->SetBounds(gfx::Size(100, 100)); @@ -32,7 +30,7 @@ } FakeLayerTreeHostImpl& host_impl() const { - return *LayerImplTest::host_impl(); + return *LayerTreeImplTestBase::host_impl(); } const RenderSurfaceList& GetRenderSurfaceList() const { @@ -2349,7 +2347,7 @@ // active tree (as they are only used on the sync tree). LayerTreeImpl* active_tree = host_impl().active_tree(); UpdateDrawProperties(active_tree); - LayerImpl* active_root = active_tree->root_layer_for_testing(); + LayerImpl* active_root = active_tree->root_layer(); auto& active_opacity_map = active_tree->element_id_to_opacity_animations_for_testing(); @@ -2441,7 +2439,7 @@ // they are used on the sync tree). LayerTreeImpl* active_tree = host_impl().active_tree(); UpdateDrawProperties(active_tree); - LayerImpl* root = active_tree->root_layer_for_testing(); + LayerImpl* root = active_tree->root_layer(); auto& opacity_map = active_tree->element_id_to_opacity_animations_for_testing();
diff --git a/cc/trees/occlusion_tracker_unittest.cc b/cc/trees/occlusion_tracker_unittest.cc index d2fc739..6fa6693 100644 --- a/cc/trees/occlusion_tracker_unittest.cc +++ b/cc/trees/occlusion_tracker_unittest.cc
@@ -14,13 +14,15 @@ #include "cc/paint/filter_operations.h" #include "cc/test/animation_test_common.h" #include "cc/test/fake_impl_task_runner_provider.h" +#include "cc/test/fake_layer_tree_frame_sink.h" #include "cc/test/fake_layer_tree_host.h" #include "cc/test/fake_layer_tree_host_impl.h" #include "cc/test/geometry_test_utils.h" #include "cc/test/layer_test_common.h" +#include "cc/test/property_tree_test_utils.h" #include "cc/test/test_occlusion_tracker.h" #include "cc/test/test_task_graph_runner.h" -#include "cc/trees/layer_tree_host_common.h" +#include "cc/trees/draw_property_utils.h" #include "cc/trees/single_thread_proxy.h" #include "components/viz/common/frame_sinks/copy_output_request.h" #include "components/viz/common/frame_sinks/copy_output_result.h" @@ -90,12 +92,15 @@ protected: explicit OcclusionTrackerTest(bool opaque_layers) : opaque_layers_(opaque_layers), + layer_tree_frame_sink_(FakeLayerTreeFrameSink::Create3d()), animation_host_(AnimationHost::CreateForTesting(ThreadInstance::MAIN)), host_(FakeLayerTreeHost::Create(&client_, &task_graph_runner_, animation_host_.get(), LayerListSettings())), - next_layer_impl_id_(1) {} + next_layer_impl_id_(1) { + host_->host_impl()->InitializeFrameSink(layer_tree_frame_sink_.get()); + } virtual void RunMyTest() = 0; @@ -215,29 +220,28 @@ return layer; } - void CalcDrawEtc(TestContentLayerImpl* root) { - DCHECK(root == root->layer_tree_impl()->root_layer_for_testing()); + void CalcDrawEtc() { + LayerTreeImpl* tree = host_->host_impl()->active_tree(); + tree->SetDeviceViewportRect(gfx::Rect(tree->root_layer()->bounds())); + UpdateDrawProperties(tree); - RenderSurfaceList render_surface_list_impl; - LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( - root, gfx::Rect(root->bounds()), &render_surface_list_impl); - LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); - - layer_iterator_ = std::make_unique<EffectTreeLayerListIterator>( - host_->host_impl()->active_tree()); + layer_iterator_ = std::make_unique<EffectTreeLayerListIterator>(tree); } +#define ASSERT_EQ_WITH_IDS(a, b) \ + ASSERT_EQ(a, b) << " ids: " << (a)->id() << " vs " << (b)->id() + void EnterLayer(LayerImpl* layer, OcclusionTracker* occlusion) { - ASSERT_EQ(layer_iterator_->current_layer(), layer); - ASSERT_TRUE(layer_iterator_->state() == - EffectTreeLayerListIterator::State::LAYER); + ASSERT_EQ(EffectTreeLayerListIterator::State::LAYER, + layer_iterator_->state()); + ASSERT_EQ_WITH_IDS(layer, layer_iterator_->current_layer()); occlusion->EnterLayer(*layer_iterator_); } void LeaveLayer(LayerImpl* layer, OcclusionTracker* occlusion) { - ASSERT_EQ(layer_iterator_->current_layer(), layer); - ASSERT_TRUE(layer_iterator_->state() == - EffectTreeLayerListIterator::State::LAYER); + ASSERT_EQ(EffectTreeLayerListIterator::State::LAYER, + layer_iterator_->state()); + ASSERT_EQ_WITH_IDS(layer, layer_iterator_->current_layer()); occlusion->LeaveLayer(*layer_iterator_); ++(*layer_iterator_); } @@ -248,23 +252,23 @@ } void EnterContributingSurface(LayerImpl* layer, OcclusionTracker* occlusion) { - ASSERT_EQ(layer_iterator_->target_render_surface(), - GetRenderSurface(layer)); - ASSERT_TRUE(layer_iterator_->state() == - EffectTreeLayerListIterator::State::TARGET_SURFACE); + ASSERT_EQ(EffectTreeLayerListIterator::State::TARGET_SURFACE, + layer_iterator_->state()); + ASSERT_EQ_WITH_IDS(GetRenderSurface(layer), + layer_iterator_->target_render_surface()); occlusion->EnterLayer(*layer_iterator_); occlusion->LeaveLayer(*layer_iterator_); ++(*layer_iterator_); - ASSERT_TRUE(layer_iterator_->state() == - EffectTreeLayerListIterator::State::CONTRIBUTING_SURFACE); + ASSERT_EQ(EffectTreeLayerListIterator::State::CONTRIBUTING_SURFACE, + layer_iterator_->state()); occlusion->EnterLayer(*layer_iterator_); } void LeaveContributingSurface(LayerImpl* layer, OcclusionTracker* occlusion) { - ASSERT_EQ(layer_iterator_->current_render_surface(), - GetRenderSurface(layer)); - ASSERT_TRUE(layer_iterator_->state() == - EffectTreeLayerListIterator::State::CONTRIBUTING_SURFACE); + ASSERT_EQ(EffectTreeLayerListIterator::State::CONTRIBUTING_SURFACE, + layer_iterator_->state()); + ASSERT_EQ_WITH_IDS(GetRenderSurface(layer), + layer_iterator_->current_render_surface()); occlusion->LeaveLayer(*layer_iterator_); ++(*layer_iterator_); } @@ -309,6 +313,7 @@ bool opaque_layers_; FakeLayerTreeHostClient client_; TestTaskGraphRunner task_graph_runner_; + std::unique_ptr<LayerTreeFrameSink> layer_tree_frame_sink_; std::unique_ptr<AnimationHost> animation_host_; std::unique_ptr<FakeLayerTreeHost> host_; std::unique_ptr<EffectTreeLayerListIterator> layer_iterator_; @@ -345,12 +350,12 @@ TestContentLayerImpl* layer = this->CreateDrawingLayer( parent, this->identity_matrix, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), true); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -378,12 +383,12 @@ TestContentLayerImpl* layer = this->CreateDrawingLayer( parent, layer_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), true); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -409,12 +414,12 @@ TestContentLayerImpl* layer = this->CreateDrawingLayer( parent, layer_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500), true); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -443,20 +448,20 @@ TestContentLayerImpl* layer = this->CreateDrawingLayer( child, this->identity_matrix, gfx::PointF(10.f, 10.f), gfx::Size(500, 500), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(layer, &occlusion); - this->EnterContributingSurface(child, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterContributingSurface(child, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveContributingSurface(child, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveContributingSurface(child, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -535,12 +540,12 @@ TestContentLayerImpl* occluder = this->CreateDrawingLayer( parent, this->identity_matrix, gfx::PointF(100.f, 100.f), gfx::Size(500, 500), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(occluder, &occlusion); - this->EnterLayer(layer2, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(occluder, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(layer2, &occlusion)); EXPECT_EQ(gfx::Rect(100, 100, 100, 100).ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -569,25 +574,26 @@ TestContentLayerImpl* top_layer = this->CreateDrawingLayer( root, this->identity_matrix, gfx::PointF(40.f, 90.f), gfx::Size(50, 20), true); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(top_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(top_layer, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(40, 90, 50, 20).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->VisitLayer(surface_child, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(surface_child, &occlusion)); EXPECT_EQ(gfx::Rect(10, 60, 50, 20).ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(10, 10, 50, 50).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->EnterContributingSurface(surface, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->EnterContributingSurface(surface, &occlusion)); EXPECT_EQ(gfx::Rect(10, 60, 50, 20).ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -596,8 +602,9 @@ // Occlusion from |top_layer| already in the root target should get merged // with the occlusion from the |surface| we are leaving now. - this->LeaveContributingSurface(surface, &occlusion); - this->EnterLayer(root, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->LeaveContributingSurface(surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(root, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_EQ(gfx::Rect(40, 40, 50, 70).ToString(), @@ -627,23 +634,23 @@ parent, child_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500)); TestContentLayerImpl* layer = this->CreateDrawingLayer( child, layer_transform, gfx::PointF(), gfx::Size(500, 500), true); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); gfx::Rect clipped_layer_in_child = MathUtil::MapEnclosingClippedRect( layer_transform, layer->visible_layer_rect()); - this->VisitLayer(layer, &occlusion); - this->EnterContributingSurface(child, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterContributingSurface(child, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(clipped_layer_in_child.ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveContributingSurface(child, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveContributingSurface(child, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -679,22 +686,22 @@ TestContentLayerImpl* layer2 = this->CreateDrawingLayer( child, this->identity_matrix, gfx::PointF(10.f, 450.f), gfx::Size(500, 60), true); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(layer2, &occlusion); - this->VisitLayer(layer1, &occlusion); - this->VisitLayer(child, &occlusion); - this->EnterContributingSurface(child, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer2, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer1, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(child, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterContributingSurface(child, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveContributingSurface(child, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveContributingSurface(child, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -747,12 +754,12 @@ TestContentLayerImpl* layer2 = this->CreateDrawingLayer( child2, this->identity_matrix, gfx::PointF(10.f, 0.f), gfx::Size(40, 50), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(layer2, &occlusion); - this->EnterContributingSurface(child2, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer2, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterContributingSurface(child2, &occlusion)); // layer2's occlusion. EXPECT_EQ(gfx::Rect().ToString(), @@ -760,9 +767,9 @@ EXPECT_EQ(gfx::Rect(10, 0, 40, 50).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveContributingSurface(child2, &occlusion); - this->VisitLayer(layer1, &occlusion); - this->EnterContributingSurface(child1, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveContributingSurface(child2, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer1, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterContributingSurface(child1, &occlusion)); // layer2's occlusion in the target space of layer1. EXPECT_EQ(gfx::Rect(30, 0, 40, 50).ToString(), @@ -771,8 +778,8 @@ EXPECT_EQ(gfx::Rect(0, 0, 40, 50).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveContributingSurface(child1, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveContributingSurface(child1, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); // The occlusion from from layer1 and layer2 is merged. EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); @@ -813,37 +820,37 @@ TestContentLayerImpl* layer2 = this->CreateDrawingLayer( child2, this->identity_matrix, gfx::PointF(-10.f, -10.f), gfx::Size(510, 510), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(layer2, &occlusion); - this->EnterLayer(child2, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer2, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(child2, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(-10, 420, 70, 80).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveLayer(child2, &occlusion); - this->EnterContributingSurface(child2, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveLayer(child2, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterContributingSurface(child2, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(-10, 420, 70, 80).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveContributingSurface(child2, &occlusion); - this->VisitLayer(layer1, &occlusion); - this->EnterContributingSurface(child1, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveContributingSurface(child2, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer1, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterContributingSurface(child1, &occlusion)); EXPECT_EQ(gfx::Rect(420, -10, 70, 80).ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(420, -20, 80, 90).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveContributingSurface(child1, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveContributingSurface(child1, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -921,57 +928,67 @@ CreateEffectNode(rounded_corner_layer).rounded_corner_bounds = gfx::RRectF(1, 2, 3, 4, 5, 6); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); + EXPECT_TRUE(rounded_corner_layer->contributes_to_drawn_render_surface()); + EXPECT_TRUE(blur_layer->contributes_to_drawn_render_surface()); + EXPECT_TRUE(opaque_layer->contributes_to_drawn_render_surface()); + EXPECT_TRUE(opacity_layer->contributes_to_drawn_render_surface()); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); // Rounded corners won't contribute to occlusion. - this->EnterLayer(rounded_corner_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(rounded_corner_layer, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty()); - this->LeaveLayer(rounded_corner_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveLayer(rounded_corner_layer, &occlusion)); // Opacity layer won't contribute to occlusion. - this->VisitLayer(opacity_layer, &occlusion); - this->EnterContributingSurface(opacity_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(opacity_layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->EnterContributingSurface(opacity_layer, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty()); // And has nothing to contribute to its parent surface. - this->LeaveContributingSurface(opacity_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->LeaveContributingSurface(opacity_layer, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty()); // Opaque layer will contribute to occlusion. - this->VisitLayer(opaque_layer, &occlusion); - this->EnterContributingSurface(opaque_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(opaque_layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->EnterContributingSurface(opaque_layer, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_EQ(gfx::Rect(0, 430, 70, 70).ToString(), occlusion.occlusion_from_inside_target().ToString()); // And it gets translated to the parent surface. - this->LeaveContributingSurface(opaque_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->LeaveContributingSurface(opaque_layer, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_EQ(gfx::Rect(30, 30, 70, 70).ToString(), occlusion.occlusion_from_inside_target().ToString()); // The blur layer needs to throw away any occlusion from outside its // subtree. - this->EnterLayer(blur_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(blur_layer, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty()); // And it won't contribute to occlusion. - this->LeaveLayer(blur_layer, &occlusion); - this->EnterContributingSurface(blur_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveLayer(blur_layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->EnterContributingSurface(blur_layer, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty()); // But the opaque layer's occlusion is preserved on the parent. - this->LeaveContributingSurface(blur_layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->LeaveContributingSurface(blur_layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_EQ(gfx::Rect(30, 30, 70, 70).ToString(), occlusion.occlusion_from_inside_target().ToString()); @@ -990,17 +1007,17 @@ TestContentLayerImpl* layer = this->CreateDrawingSurface(parent, this->identity_matrix, gfx::PointF(), gfx::Size(200, 200), false); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->EnterLayer(layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(layer, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty()); - this->LeaveLayer(layer, &occlusion); - this->VisitContributingSurface(layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitContributingSurface(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty()); @@ -1019,14 +1036,14 @@ TestContentLayerImpl* layer = this->CreateDrawingLayer( parent, this->identity_matrix, gfx::PointF(100.f, 100.f), gfx::Size(200, 200), false); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); { TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); layer->SetOpaqueContentsRect(gfx::Rect(0, 0, 100, 100)); this->ResetLayerIterator(); - this->VisitLayer(layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect(100, 100, 100, 100).ToString(), occlusion.occlusion_from_inside_target().ToString()); @@ -1036,8 +1053,8 @@ layer->SetOpaqueContentsRect(gfx::Rect(20, 20, 180, 180)); this->ResetLayerIterator(); - this->VisitLayer(layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect(120, 120, 180, 180).ToString(), occlusion.occlusion_from_inside_target().ToString()); @@ -1047,8 +1064,8 @@ layer->SetOpaqueContentsRect(gfx::Rect(150, 150, 100, 100)); this->ResetLayerIterator(); - this->VisitLayer(layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_EQ(gfx::Rect(250, 250, 50, 50).ToString(), occlusion.occlusion_from_inside_target().ToString()); @@ -1078,13 +1095,13 @@ GetTransformNode(parent)->sorting_context_id = 1; GetTransformNode(layer)->flattens_inherited_transform = false; GetTransformNode(layer)->sorting_context_id = 1; - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); // The |layer| is entirely behind the camera and should not occlude. - this->VisitLayer(layer, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty()); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); } @@ -1110,12 +1127,13 @@ gfx::Size(300, 300), false); surface->SetOpaqueContentsRect(gfx::Rect(0, 0, 200, 200)); surface2->SetOpaqueContentsRect(gfx::Rect(0, 0, 200, 200)); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(surface2, &occlusion); - this->VisitContributingSurface(surface2, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(surface2, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(surface2, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1126,8 +1144,9 @@ occlusion.set_occlusion_from_outside_target(SimpleEnclosedRegion()); occlusion.set_occlusion_from_inside_target(SimpleEnclosedRegion()); - this->VisitLayer(surface, &occlusion); - this->VisitContributingSurface(surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(surface, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1152,12 +1171,13 @@ this->CreateDrawingSurface(parent, this->identity_matrix, gfx::PointF(), gfx::Size(500, 300), false); surface->SetOpaqueContentsRect(gfx::Rect(0, 0, 400, 200)); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(surface, &occlusion); - this->VisitContributingSurface(surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(surface, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1186,20 +1206,20 @@ gfx::Size(100, 50), true); LayerImpl* topmost = this->CreateDrawingLayer( parent, this->identity_matrix, gfx::PointF(), gfx::Size(100, 50), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(-100, -100, 1000, 1000)); // |topmost| occludes everything partially so we know occlusion is happening // at all. - this->VisitLayer(topmost, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(topmost, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->VisitLayer(surface_child, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(surface_child, &occlusion)); // surface_child increases the occlusion in the screen by a narrow sliver. EXPECT_EQ(gfx::Rect(0, -10, 100, 50).ToString(), @@ -1214,7 +1234,8 @@ // |surface_child| exercises different code paths as its parent does not // have a clip rect. - this->EnterContributingSurface(surface_child, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->EnterContributingSurface(surface_child, &occlusion)); // The |surface_child| can't occlude its own surface, but occlusion from // |topmost| can. EXPECT_EQ(gfx::Rect().ToString(), @@ -1223,18 +1244,20 @@ EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), occlusion.occlusion_on_contributing_surface_from_inside_target() .ToString()); - this->LeaveContributingSurface(surface_child, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->LeaveContributingSurface(surface_child, &occlusion)); // When the surface_child's occlusion is transformed up to its parent, make // sure it is not clipped away inappropriately. - this->EnterLayer(surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(surface, &occlusion)); EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(0, 10, 100, 50).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->LeaveLayer(surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->LeaveLayer(surface, &occlusion)); - this->EnterContributingSurface(surface, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->EnterContributingSurface(surface, &occlusion)); // The occlusion from inside |surface| can't affect the surface, but // |topmost| can. EXPECT_EQ(gfx::Rect().ToString(), @@ -1244,8 +1267,9 @@ occlusion.occlusion_on_contributing_surface_from_inside_target() .ToString()); - this->LeaveContributingSurface(surface, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->LeaveContributingSurface(surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); // The occlusion in |surface| and without are merged into the parent. EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1310,20 +1334,20 @@ LayerImpl* occluding_layer = this->CreateDrawingLayer( parent, this->identity_matrix, gfx::PointF(occlusion_rect.origin()), occlusion_rect.size(), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 200, 200)); // This layer occludes pixels directly beside the filtered_surface. // Because filtered surface blends pixels in a radius, it will need to see // some of the pixels (up to radius far) underneath the occluding layers. - this->VisitLayer(occluding_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(occluding_layer, &occlusion)); EXPECT_EQ(occlusion_rect.ToString(), occlusion.occlusion_from_inside_target().ToString()); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); - this->VisitLayer(filtered_surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(filtered_surface, &occlusion)); // The occlusion is used fully inside the surface. gfx::Rect occlusion_inside_surface = @@ -1336,8 +1360,9 @@ // currently considered occluded in order to be drawn. The pixels it // needs should be removed from the occluded area, so that they are drawn // when we get to the parent. - this->VisitContributingSurface(filtered_surface, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(filtered_surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); // The spread due to a 10px blur is 30px. gfx::Rect expected_occlusion = occlusion_rect; @@ -1423,20 +1448,20 @@ LayerImpl* occluding_layer = this->CreateDrawingLayer( parent, this->identity_matrix, gfx::PointF(occlusion_rect.origin()), occlusion_rect.size(), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 200, 200)); // This layer occludes pixels directly beside the filtered_surface. // Because filtered surface blends pixels in a radius, it will need to see // some of the pixels (up to radius far) underneath the occluding layers. - this->VisitLayer(occluding_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(occluding_layer, &occlusion)); EXPECT_EQ(occlusion_rect.ToString(), occlusion.occlusion_from_inside_target().ToString()); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); - this->VisitLayer(filtered_surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(filtered_surface, &occlusion)); // The occlusion is used fully inside the surface. gfx::Rect occlusion_inside_surface = @@ -1449,8 +1474,9 @@ // currently considered occluded in order to be drawn. The pixels it // needs should be removed from the occluded area, so that they are drawn // when we get to the parent. - this->VisitContributingSurface(filtered_surface, &occlusion); - this->EnterLayer(parent, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(filtered_surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(parent, &occlusion)); gfx::Rect expected_occlusion; switch (i) { @@ -1517,20 +1543,23 @@ GetEffectNode(filtered_surface1)->backdrop_filters = filters; GetEffectNode(filtered_surface2)->backdrop_filters = filters; - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(occluding_layer_above, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->VisitLayer(occluding_layer_above, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(100 / 2, 100 / 2, 50 / 2, 50 / 2).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->VisitLayer(filtered_surface2, &occlusion); - this->VisitContributingSurface(filtered_surface2, &occlusion); - this->VisitLayer(filtered_surface1, &occlusion); - this->VisitContributingSurface(filtered_surface1, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(filtered_surface2, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(filtered_surface2, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(filtered_surface1, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(filtered_surface1, &occlusion)); // Test expectations in the target. int blur_outset = 3; @@ -1577,14 +1606,15 @@ filters.Append(FilterOperation::CreateBlurFilter(3.f)); GetEffectNode(filtered_surface)->backdrop_filters = filters; - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); // The surface has a backdrop blur, so it blurs non-opaque pixels below // it. - this->VisitLayer(filtered_surface, &occlusion); - this->VisitContributingSurface(filtered_surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(filtered_surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(filtered_surface, &occlusion)); // The layers behind the surface are not blurred, and their occlusion does // not change, until we leave the surface. So it should not be modified by @@ -1595,7 +1625,7 @@ // without existing occlusion interfering. occlusion.set_occlusion_from_inside_target(SimpleEnclosedRegion()); - this->VisitLayer(behind_surface_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(behind_surface_layer, &occlusion)); // The layers behind the surface are not blurred, and their occlusion does // not change, until we leave the surface. So it should not be modified by @@ -1637,13 +1667,13 @@ filters.Append(FilterOperation::CreateBlurFilter(3.f)); GetEffectNode(filtered_surface)->backdrop_filters = filters; - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(occluding_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(occluding_layer, &occlusion)); - this->VisitLayer(filtered_surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(filtered_surface, &occlusion)); { // The layers above the filtered surface occlude from outside. gfx::Rect occlusion_above_surface = gfx::Rect(0, 0, 50, 50); @@ -1656,7 +1686,8 @@ // The surface has a backdrop blur, so it blurs non-opaque pixels below // it. - this->VisitContributingSurface(filtered_surface, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(filtered_surface, &occlusion)); { // The filter is completely occluded, so it should not blur anything and // reduce any occlusion. @@ -1703,17 +1734,18 @@ filters.Append(FilterOperation::CreateBlurFilter(3.f)); GetEffectNode(filtered_surface)->backdrop_filters = filters; - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(beside_surface_layer, &occlusion); - this->VisitLayer(above_surface_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(beside_surface_layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(above_surface_layer, &occlusion)); // The surface has a backdrop blur, so it blurs non-opaque pixels below // it. - this->VisitLayer(filtered_surface, &occlusion); - this->VisitContributingSurface(filtered_surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(filtered_surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(filtered_surface, &occlusion)); // The filter in the surface is partially unoccluded. Only the unoccluded // parts should reduce occlusion. This means it will push back the @@ -1763,17 +1795,17 @@ // Blend mode makes the layer own a surface. GetEffectNode(blend_mode_layer)->blend_mode = SkBlendMode::kMultiply; - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(top_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(top_layer, &occlusion)); // |top_layer| occludes. EXPECT_EQ(gfx::Rect(10, 12, 20, 22).ToString(), occlusion.occlusion_from_inside_target().ToString()); EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty()); - this->VisitLayer(blend_mode_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(blend_mode_layer, &occlusion)); // |top_layer| and |blend_mode_layer| both occlude, since the blend mode // gets applied by blend_mode_layer's render surface, not when drawing the // layer itself. @@ -1782,7 +1814,8 @@ EXPECT_EQ(gfx::Rect(10, 12, 20, 22).ToString(), occlusion.occlusion_from_outside_target().ToString()); - this->VisitContributingSurface(blend_mode_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(blend_mode_layer, &occlusion)); // |top_layer| occludes but not |blend_mode_layer|. EXPECT_EQ(gfx::Rect(10, 12, 20, 22).ToString(), occlusion.occlusion_from_inside_target().ToString()); @@ -1806,13 +1839,13 @@ LayerImpl* small = this->CreateDrawingLayer(parent, this->identity_matrix, gfx::PointF(), below_tracking_size, true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); occlusion.set_minimum_tracking_size(tracking_size); // The small layer is not tracked because it is too small. - this->VisitLayer(small, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(small, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1820,7 +1853,7 @@ occlusion.occlusion_from_inside_target().ToString()); // The large layer is tracked as it is large enough. - this->VisitLayer(large, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(large, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1848,11 +1881,11 @@ gfx::Size(1, 1)); LayerImpl* scaled = this->CreateDrawingLayer( scale, this->identity_matrix, gfx::PointF(), gfx::Size(500, 500), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(scaled, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(scaled, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1883,13 +1916,14 @@ gfx::PointF(), gfx::Size(1, 1)); LayerImpl* scaled = this->CreateDrawingLayer( scale, this->identity_matrix, gfx::PointF(), gfx::Size(500, 500), true); - this->CalcDrawEtc(parent); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(scaled, &occlusion); - this->VisitLayer(surface, &occlusion); - this->VisitContributingSurface(surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(scaled, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(surface, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->VisitContributingSurface(surface, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1916,17 +1950,17 @@ LayerImpl* top_layer = this->CreateDrawingLayer(root, this->identity_matrix, gfx::PointF(50, 0), gfx::Size(50, 400), true); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(top_layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(top_layer, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(50, 0, 50, 400).ToString(), occlusion.occlusion_from_inside_target().ToString()); - this->VisitLayer(copy_child, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(copy_child, &occlusion)); // Layers outside the copy request do not occlude. EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); @@ -1934,7 +1968,7 @@ occlusion.occlusion_from_inside_target().ToString()); // CopyRequests cause the layer to own a surface. - this->VisitContributingSurface(copy, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitContributingSurface(copy, &occlusion)); // The occlusion from the copy should be kept. EXPECT_EQ(gfx::Rect().ToString(), @@ -1967,18 +2001,18 @@ LayerImpl* copy_child = this->CreateDrawingLayer( copy, this->identity_matrix, gfx::PointF(), gfx::Size(200, 400), true); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000)); - this->VisitLayer(copy_child, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(copy_child, &occlusion)); EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusion_from_outside_target().ToString()); EXPECT_EQ(gfx::Rect(200, 400).ToString(), occlusion.occlusion_from_inside_target().ToString()); // CopyRequests cause the layer to own a surface. - this->VisitContributingSurface(copy, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitContributingSurface(copy, &occlusion)); // The occlusion from the copy should be dropped since it is hidden. EXPECT_EQ(gfx::Rect().ToString(), @@ -2004,11 +2038,11 @@ surface, translate, gfx::PointF(), gfx::Size(200, 200), false); TestContentLayerImpl* outside_layer = this->CreateDrawingLayer( root, this->identity_matrix, gfx::PointF(), gfx::Size(200, 200), false); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 200, 200)); - this->VisitLayer(outside_layer, &occlusion); - this->EnterLayer(layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(outside_layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(layer, &occlusion)); // No occlusion, is not occluded. occlusion.set_occlusion_from_outside_target(SimpleEnclosedRegion()); @@ -2091,11 +2125,11 @@ surface, translate, gfx::PointF(), gfx::Size(200, 200), false); TestContentLayerImpl* outside_layer = this->CreateDrawingLayer( root, this->identity_matrix, gfx::PointF(), gfx::Size(200, 200), false); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 200, 200)); - this->VisitLayer(outside_layer, &occlusion); - this->EnterLayer(layer, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(outside_layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->EnterLayer(layer, &occlusion)); // No occlusion, is not occluded. occlusion.set_occlusion_from_outside_target(SimpleEnclosedRegion()); @@ -2254,12 +2288,13 @@ gfx::Size(200, 200), false); TestContentLayerImpl* outside_layer = this->CreateDrawingLayer( root, this->identity_matrix, gfx::PointF(), gfx::Size(200, 200), false); - this->CalcDrawEtc(root); + this->CalcDrawEtc(); TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 200, 200)); - this->VisitLayer(outside_layer, &occlusion); - this->VisitLayer(layer, &occlusion); - this->EnterContributingSurface(surface, &occlusion); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(outside_layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE(this->VisitLayer(layer, &occlusion)); + ASSERT_NO_FATAL_FAILURE( + this->EnterContributingSurface(surface, &occlusion)); // No occlusion, is not occluded. occlusion.set_occlusion_on_contributing_surface_from_outside_target(
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc index 7e4aa2da..d0321f04 100644 --- a/cc/trees/property_tree.cc +++ b/cc/trees/property_tree.cc
@@ -15,9 +15,9 @@ #include "cc/layers/layer_impl.h" #include "cc/trees/clip_node.h" #include "cc/trees/effect_node.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/property_tree.h" +#include "cc/trees/scroll_and_scale_set.h" #include "cc/trees/scroll_node.h" #include "cc/trees/transform_node.h" #include "components/viz/common/frame_sinks/copy_output_request.h" @@ -1471,10 +1471,7 @@ scroll_info->inner_viewport_scroll.element_id = id; scroll_info->inner_viewport_scroll.scroll_delta = scroll_delta; } else { - LayerTreeHostCommon::ScrollUpdateInfo scroll; - scroll.element_id = id; - scroll.scroll_delta = scroll_delta; - scroll_info->scrolls.push_back(scroll); + scroll_info->scrolls.push_back({id, scroll_delta}); } } }
diff --git a/cc/trees/property_tree_builder_unittest.cc b/cc/trees/property_tree_builder_unittest.cc new file mode 100644 index 0000000..994db65 --- /dev/null +++ b/cc/trees/property_tree_builder_unittest.cc
@@ -0,0 +1,2413 @@ +// Copyright 2011 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 "cc/trees/property_tree_builder.h" + +#include "cc/animation/keyframed_animation_curve.h" +#include "cc/layers/layer.h" +#include "cc/layers/layer_impl.h" +#include "cc/layers/picture_layer.h" +#include "cc/layers/render_surface_impl.h" +#include "cc/layers/texture_layer.h" +#include "cc/test/animation_test_common.h" +#include "cc/test/fake_content_layer_client.h" +#include "cc/test/layer_tree_impl_test_base.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/geometry/size_conversions.h" +#include "ui/gfx/geometry/vector2d_conversions.h" +#include "ui/gfx/transform.h" + +namespace cc { +namespace { + +class PropertyTreeBuilderTest : public LayerTreeImplTestBase, + public testing::Test { + public: + PropertyTreeBuilderTest() : LayerTreeImplTestBase(LayerTreeSettings()) {} + + void UpdateMainDrawProperties(float device_scale_factor = 1.0f) { + SetDeviceScaleAndUpdateViewportRect(host(), device_scale_factor); + UpdateDrawProperties(host()); + } + + LayerImpl* ImplOf(const scoped_refptr<Layer>& layer) { + return layer ? host_impl()->active_tree()->LayerById(layer->id()) : nullptr; + } + RenderSurfaceImpl* GetRenderSurfaceImpl(const scoped_refptr<Layer>& layer) { + return GetRenderSurface(ImplOf(layer)); + } + + // Updates main thread draw properties, commits main thread tree to + // impl-side pending tree, and updates pending tree draw properties. + void Commit(float device_scale_factor = 1.0f) { + UpdateMainDrawProperties(device_scale_factor); + if (!host_impl()->pending_tree()) + host_impl()->CreatePendingTree(); + host()->CommitAndCreatePendingTree(); + // TODO(https://crbug.com/939968) This call should be handled by + // FakeLayerTreeHost instead of manually pushing the properties from the + // layer tree host to the pending tree. + host()->PushLayerTreePropertiesTo(host_impl()->pending_tree()); + + UpdateDrawProperties(host_impl()->pending_tree()); + } + + // Calls Commit(), then activates the pending tree, and updates active tree + // draw properties. + void CommitAndActivate(float device_scale_factor = 1.0f) { + Commit(device_scale_factor); + host_impl()->ActivateSyncTree(); + DCHECK_EQ(device_scale_factor, + host_impl()->active_tree()->device_scale_factor()); + UpdateActiveTreeDrawProperties(device_scale_factor); + } + + const RenderSurfaceList& GetRenderSurfaceList() { + return host_impl()->active_tree()->GetRenderSurfaceList(); + } +}; + +TEST_F(PropertyTreeBuilderTest, EffectTreeTransformIdTest) { + // Tests that effect tree node gets a valid transform id when a layer + // has opacity but doesn't create a render surface. + auto parent = Layer::Create(); + host()->SetRootLayer(parent); + auto child = Layer::Create(); + parent->AddChild(child); + child->SetIsDrawable(true); + + parent->SetBounds(gfx::Size(100, 100)); + child->SetPosition(gfx::PointF(10, 10)); + child->SetBounds(gfx::Size(100, 100)); + child->SetOpacity(0.f); + UpdateMainDrawProperties(); + EffectNode* node = GetEffectNode(child.get()); + const int transform_tree_size = + GetPropertyTrees(parent.get())->transform_tree.next_available_id(); + EXPECT_LT(node->transform_id, transform_tree_size); +} + +TEST_F(PropertyTreeBuilderTest, TransformsForFlatteningLayer) { + // For layers that flatten their subtree, there should be an orthographic + // projection (for x and y values) in the middle of the transform sequence. + // Note that the way the code is currently implemented, it is not expected to + // use a canonical orthographic projection. + + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto child = Layer::Create(); + root->AddChild(child); + child->SetIsDrawable(true); + auto grand_child = Layer::Create(); + child->AddChild(grand_child); + grand_child->SetIsDrawable(true); + auto great_grand_child = Layer::Create(); + grand_child->AddChild(great_grand_child); + great_grand_child->SetIsDrawable(true); + + gfx::Transform rotation_about_y_axis; + rotation_about_y_axis.RotateAboutYAxis(30.0); + + root->SetBounds(gfx::Size(100, 100)); + child->SetTransform(rotation_about_y_axis); + child->SetBounds(gfx::Size(10, 10)); + child->SetForceRenderSurfaceForTesting(true); + grand_child->SetTransform(rotation_about_y_axis); + grand_child->SetBounds(gfx::Size(10, 10)); + great_grand_child->SetBounds(gfx::Size(10, 10)); + + // No layers in this test should preserve 3d. + ASSERT_TRUE(root->should_flatten_transform()); + ASSERT_TRUE(child->should_flatten_transform()); + ASSERT_TRUE(grand_child->should_flatten_transform()); + ASSERT_TRUE(great_grand_child->should_flatten_transform()); + + gfx::Transform expected_child_draw_transform = rotation_about_y_axis; + gfx::Transform expected_child_screen_space_transform = rotation_about_y_axis; + gfx::Transform expected_grand_child_draw_transform = + rotation_about_y_axis; // draws onto child's render surface + gfx::Transform flattened_rotation_about_y = rotation_about_y_axis; + flattened_rotation_about_y.FlattenTo2d(); + gfx::Transform expected_grand_child_screen_space_transform = + flattened_rotation_about_y * rotation_about_y_axis; + gfx::Transform expected_great_grand_child_draw_transform = + flattened_rotation_about_y; + gfx::Transform expected_great_grand_child_screen_space_transform = + flattened_rotation_about_y * flattened_rotation_about_y; + + CommitAndActivate(); + + // The child's draw transform should have been taken by its surface. + ASSERT_TRUE(GetRenderSurfaceImpl(child)); + EXPECT_TRANSFORMATION_MATRIX_EQ( + expected_child_draw_transform, + GetRenderSurfaceImpl(child)->draw_transform()); + EXPECT_TRANSFORMATION_MATRIX_EQ( + expected_child_screen_space_transform, + GetRenderSurfaceImpl(child)->screen_space_transform()); + EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), + ImplOf(child)->DrawTransform()); + EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_screen_space_transform, + ImplOf(child)->ScreenSpaceTransform()); + EXPECT_TRANSFORMATION_MATRIX_EQ(expected_grand_child_draw_transform, + ImplOf(grand_child)->DrawTransform()); + EXPECT_TRANSFORMATION_MATRIX_EQ(expected_grand_child_screen_space_transform, + ImplOf(grand_child)->ScreenSpaceTransform()); + EXPECT_TRANSFORMATION_MATRIX_EQ(expected_great_grand_child_draw_transform, + ImplOf(great_grand_child)->DrawTransform()); + EXPECT_TRANSFORMATION_MATRIX_EQ( + expected_great_grand_child_screen_space_transform, + ImplOf(great_grand_child)->ScreenSpaceTransform()); +} + +TEST_F(PropertyTreeBuilderTest, RenderSurfaceForNonAxisAlignedClipping) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto rotated_and_transparent = Layer::Create(); + root->AddChild(rotated_and_transparent); + auto clips_subtree = Layer::Create(); + rotated_and_transparent->AddChild(clips_subtree); + auto draws_content = Layer::Create(); + clips_subtree->AddChild(draws_content); + + root->SetBounds(gfx::Size(10, 10)); + rotated_and_transparent->SetBounds(gfx::Size(10, 10)); + rotated_and_transparent->SetOpacity(0.5f); + gfx::Transform rotate; + rotate.Rotate(2); + rotated_and_transparent->SetTransform(rotate); + clips_subtree->SetBounds(gfx::Size(10, 10)); + clips_subtree->SetMasksToBounds(true); + draws_content->SetBounds(gfx::Size(10, 10)); + draws_content->SetIsDrawable(true); + + UpdateMainDrawProperties(); + EXPECT_TRUE(GetEffectNode(clips_subtree.get())->HasRenderSurface()); +} + +TEST_F(PropertyTreeBuilderTest, EffectNodesForNonAxisAlignedClips) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto rotate_and_clip = Layer::Create(); + root->AddChild(rotate_and_clip); + auto only_clip = Layer::Create(); + rotate_and_clip->AddChild(only_clip); + auto rotate_and_clip2 = Layer::Create(); + only_clip->AddChild(rotate_and_clip2); + + gfx::Transform rotate; + rotate.Rotate(2); + root->SetBounds(gfx::Size(10, 10)); + rotate_and_clip->SetBounds(gfx::Size(10, 10)); + rotate_and_clip->SetTransform(rotate); + rotate_and_clip->SetMasksToBounds(true); + only_clip->SetBounds(gfx::Size(10, 10)); + only_clip->SetMasksToBounds(true); + rotate_and_clip2->SetBounds(gfx::Size(10, 10)); + rotate_and_clip2->SetTransform(rotate); + rotate_and_clip2->SetMasksToBounds(true); + + UpdateMainDrawProperties(); + // non-axis aligned clip should create an effect node + EXPECT_NE(root->effect_tree_index(), rotate_and_clip->effect_tree_index()); + // Since only_clip's clip is in the same non-axis aligned space as + // rotate_and_clip's clip, no new effect node should be created. + EXPECT_EQ(rotate_and_clip->effect_tree_index(), + only_clip->effect_tree_index()); + // rotate_and_clip2's clip and only_clip's clip are in different non-axis + // aligned spaces. So, new effect node should be created. + EXPECT_NE(rotate_and_clip2->effect_tree_index(), + only_clip->effect_tree_index()); +} + +TEST_F(PropertyTreeBuilderTest, + RenderSurfaceListForRenderSurfaceWithClippedLayer) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto render_surface1 = Layer::Create(); + root->AddChild(render_surface1); + auto child = Layer::Create(); + render_surface1->AddChild(child); + + root->SetBounds(gfx::Size(10, 10)); + root->SetMasksToBounds(true); + render_surface1->SetBounds(gfx::Size(10, 10)); + render_surface1->SetForceRenderSurfaceForTesting(true); + child->SetIsDrawable(true); + child->SetPosition(gfx::PointF(30.f, 30.f)); + child->SetBounds(gfx::Size(10, 10)); + + CommitAndActivate(); + + // The child layer's content is entirely outside the root's clip rect, so + // the intermediate render surface should not be listed here, even if it was + // forced to be created. Render surfaces without children or visible content + // are unexpected at draw time (e.g. we might try to create a content texture + // of size 0). + ASSERT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_EQ(1U, GetRenderSurfaceList().size()); +} + +TEST_F(PropertyTreeBuilderTest, RenderSurfaceListForTransparentChild) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto render_surface1 = Layer::Create(); + root->AddChild(render_surface1); + auto child = Layer::Create(); + render_surface1->AddChild(child); + + root->SetBounds(gfx::Size(10, 10)); + render_surface1->SetBounds(gfx::Size(10, 10)); + render_surface1->SetForceRenderSurfaceForTesting(true); + render_surface1->SetOpacity(0.f); + child->SetBounds(gfx::Size(10, 10)); + child->SetIsDrawable(true); + + CommitAndActivate(); + + // Since the layer is transparent, render_surface1_impl->GetRenderSurface() + // should not have gotten added anywhere. Also, the drawable content rect + // should not have been extended by the children. + ASSERT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_EQ(0, GetRenderSurfaceImpl(root)->num_contributors()); + EXPECT_EQ(1U, GetRenderSurfaceList().size()); + EXPECT_EQ(static_cast<viz::RenderPassId>(root->id()), + GetRenderSurfaceList().at(0)->id()); + EXPECT_EQ(gfx::Rect(), ImplOf(root)->drawable_content_rect()); +} + +TEST_F(PropertyTreeBuilderTest, + RenderSurfaceListForTransparentChildWithBackdropFilter) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto render_surface1 = Layer::Create(); + root->AddChild(render_surface1); + auto child = Layer::Create(); + render_surface1->AddChild(child); + + root->SetBounds(gfx::Size(10, 10)); + render_surface1->SetBounds(gfx::Size(10, 10)); + render_surface1->SetForceRenderSurfaceForTesting(true); + render_surface1->SetOpacity(0.f); + render_surface1->SetIsDrawable(true); + FilterOperations filters; + filters.Append(FilterOperation::CreateBlurFilter(1.5f)); + render_surface1->SetBackdropFilters(filters); + child->SetBounds(gfx::Size(10, 10)); + child->SetIsDrawable(true); + host()->SetElementIdsForTesting(); + + CommitAndActivate(); + EXPECT_EQ(2U, GetRenderSurfaceList().size()); + + // The layer is fully transparent, but has a backdrop filter, so it + // shouldn't be skipped and should be drawn. + ASSERT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_EQ(1, GetRenderSurfaceImpl(root)->num_contributors()); + EXPECT_EQ(gfx::RectF(0, 0, 10, 10), + GetRenderSurfaceImpl(root)->DrawableContentRect()); + EXPECT_TRUE(GetEffectNode(ImplOf(render_surface1))->is_drawn); + + // When root is transparent, the layer should not be drawn. + host_impl()->active_tree()->SetOpacityMutated(root->element_id(), 0.f); + host_impl()->active_tree()->SetOpacityMutated(render_surface1->element_id(), + 1.f); + ImplOf(render_surface1)->set_visible_layer_rect(gfx::Rect()); + UpdateActiveTreeDrawProperties(); + + EXPECT_FALSE(GetEffectNode(ImplOf(render_surface1))->is_drawn); + EXPECT_EQ(gfx::Rect(), ImplOf(render_surface1)->visible_layer_rect()); +} + +TEST_F(PropertyTreeBuilderTest, RenderSurfaceListForFilter) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto parent = Layer::Create(); + root->AddChild(parent); + auto child1 = Layer::Create(); + parent->AddChild(child1); + auto child2 = Layer::Create(); + parent->AddChild(child2); + + gfx::Transform scale_matrix; + scale_matrix.Scale(2.0f, 2.0f); + + root->SetBounds(gfx::Size(100, 100)); + parent->SetTransform(scale_matrix); + FilterOperations filters; + filters.Append(FilterOperation::CreateBlurFilter(10.0f)); + parent->SetFilters(filters); + parent->SetForceRenderSurfaceForTesting(true); + child1->SetBounds(gfx::Size(25, 25)); + child1->SetIsDrawable(true); + child1->SetForceRenderSurfaceForTesting(true); + child2->SetPosition(gfx::PointF(25, 25)); + child2->SetBounds(gfx::Size(25, 25)); + child2->SetIsDrawable(true); + child2->SetForceRenderSurfaceForTesting(true); + + CommitAndActivate(); + + ASSERT_TRUE(GetRenderSurfaceImpl(parent)); + EXPECT_EQ(2, GetRenderSurfaceImpl(parent)->num_contributors()); + EXPECT_EQ(4U, GetRenderSurfaceList().size()); + + // The rectangle enclosing child1 and child2 (0,0 50x50), expanded for the + // blur (-30,-30 110x110), and then scaled by the scale matrix + // (-60,-60 220x220). + EXPECT_EQ(gfx::RectF(-60, -60, 220, 220), + GetRenderSurfaceImpl(parent)->DrawableContentRect()); +} + +TEST_F(PropertyTreeBuilderTest, ForceRenderSurface) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto render_surface1 = Layer::Create(); + root->AddChild(render_surface1); + auto child = Layer::Create(); + render_surface1->AddChild(child); + + root->SetBounds(gfx::Size(10, 10)); + render_surface1->SetBounds(gfx::Size(10, 10)); + render_surface1->SetForceRenderSurfaceForTesting(true); + child->SetBounds(gfx::Size(10, 10)); + child->SetIsDrawable(true); + + CommitAndActivate(); + + // The root layer always creates a render surface + EXPECT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(render_surface1), GetRenderSurfaceImpl(root)); + + render_surface1->SetForceRenderSurfaceForTesting(false); + CommitAndActivate(); + + EXPECT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(render_surface1), GetRenderSurfaceImpl(root)); +} + +TEST_F(PropertyTreeBuilderTest, RenderSurfacesFlattenScreenSpaceTransform) { + // Render surfaces act as a flattening point for their subtree, so should + // always flatten the target-to-screen space transform seen by descendants. + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto parent = Layer::Create(); + root->AddChild(parent); + auto child = Layer::Create(); + parent->AddChild(child); + auto grand_child = Layer::Create(); + child->AddChild(grand_child); + + gfx::Transform rotation_about_y_axis; + rotation_about_y_axis.RotateAboutYAxis(30.0); + + root->SetBounds(gfx::Size(100, 100)); + parent->SetTransform(rotation_about_y_axis); + parent->SetBounds(gfx::Size(10, 10)); + parent->SetForceRenderSurfaceForTesting(true); + child->SetBounds(gfx::Size(10, 10)); + child->SetIsDrawable(true); + grand_child->SetBounds(gfx::Size(10, 10)); + grand_child->SetIsDrawable(true); + grand_child->SetShouldFlattenTransform(false); + + CommitAndActivate(); + + EXPECT_TRUE(GetRenderSurfaceImpl(parent)); + EXPECT_EQ(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(parent)); + EXPECT_EQ(GetRenderSurfaceImpl(grand_child), GetRenderSurfaceImpl(parent)); + + EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), + ImplOf(child)->DrawTransform()); + EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), + ImplOf(grand_child)->DrawTransform()); + + // The screen-space transform inherited by |child| and |grand_child| + // should have been flattened at their render target. In particular, the fact + // that |grand_child| happens to preserve 3d shouldn't affect this + // flattening. + gfx::Transform flattened_rotation_about_y = rotation_about_y_axis; + flattened_rotation_about_y.FlattenTo2d(); + EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_y, + ImplOf(child)->ScreenSpaceTransform()); + EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_y, + ImplOf(grand_child)->ScreenSpaceTransform()); +} + +TEST_F(PropertyTreeBuilderTest, VisibleRectWithClippingAndFilters) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto clip = Layer::Create(); + root->AddChild(clip); + auto filter = Layer::Create(); + clip->AddChild(filter); + auto filter_child = Layer::Create(); + filter->AddChild(filter_child); + + root->SetBounds(gfx::Size(100, 100)); + clip->SetBounds(gfx::Size(10, 10)); + filter->SetForceRenderSurfaceForTesting(true); + filter_child->SetBounds(gfx::Size(2000, 2000)); + filter_child->SetPosition(gfx::PointF(-50, -50)); + filter_child->SetIsDrawable(true); + + clip->SetMasksToBounds(true); + + CommitAndActivate(); + + EXPECT_EQ(gfx::Rect(50, 50, 10, 10), + ImplOf(filter_child)->visible_layer_rect()); + EXPECT_EQ(gfx::Rect(10, 10), GetRenderSurfaceImpl(filter)->content_rect()); + + FilterOperations blur_filter; + blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f)); + filter->SetFilters(blur_filter); + + CommitAndActivate(); + + EXPECT_EQ(gfx::Rect(38, 38, 34, 34), + ImplOf(filter_child)->visible_layer_rect()); + EXPECT_EQ(gfx::Rect(-12, -12, 34, 34), + GetRenderSurfaceImpl(filter)->content_rect()); + + gfx::Transform vertical_flip; + vertical_flip.Scale(1, -1); + sk_sp<PaintFilter> flip_filter = sk_make_sp<MatrixPaintFilter>( + vertical_flip.matrix(), kLow_SkFilterQuality, nullptr); + FilterOperations reflection_filter; + reflection_filter.Append( + FilterOperation::CreateReferenceFilter(sk_make_sp<XfermodePaintFilter>( + SkBlendMode::kSrcOver, std::move(flip_filter), nullptr))); + filter->SetFilters(reflection_filter); + + CommitAndActivate(); + + EXPECT_EQ(gfx::Rect(49, 39, 12, 21), + ImplOf(filter_child)->visible_layer_rect()); + EXPECT_EQ(gfx::Rect(-1, -11, 12, 21), + GetRenderSurfaceImpl(filter)->content_rect()); +} + +TEST_F(PropertyTreeBuilderTest, VisibleRectWithScalingClippingAndFilters) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto scale = Layer::Create(); + root->AddChild(scale); + auto clip = Layer::Create(); + scale->AddChild(clip); + auto filter = Layer::Create(); + clip->AddChild(filter); + auto filter_child = Layer::Create(); + filter->AddChild(filter_child); + + root->SetBounds(gfx::Size(100, 100)); + clip->SetBounds(gfx::Size(10, 10)); + filter->SetForceRenderSurfaceForTesting(true); + filter_child->SetBounds(gfx::Size(2000, 2000)); + filter_child->SetPosition(gfx::PointF(-50, -50)); + filter_child->SetIsDrawable(true); + + clip->SetMasksToBounds(true); + + gfx::Transform scale_transform; + scale_transform.Scale(3, 3); + scale->SetTransform(scale_transform); + + CommitAndActivate(); + + EXPECT_EQ(gfx::Rect(50, 50, 10, 10), + ImplOf(filter_child)->visible_layer_rect()); + EXPECT_EQ(gfx::Rect(30, 30), GetRenderSurfaceImpl(filter)->content_rect()); + + FilterOperations blur_filter; + blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f)); + filter->SetFilters(blur_filter); + + CommitAndActivate(); + + EXPECT_EQ(gfx::Rect(38, 38, 34, 34), + ImplOf(filter_child)->visible_layer_rect()); + EXPECT_EQ(gfx::Rect(-36, -36, 102, 102), + GetRenderSurfaceImpl(filter)->content_rect()); + + gfx::Transform vertical_flip; + vertical_flip.Scale(1, -1); + sk_sp<PaintFilter> flip_filter = sk_make_sp<MatrixPaintFilter>( + vertical_flip.matrix(), kLow_SkFilterQuality, nullptr); + FilterOperations reflection_filter; + reflection_filter.Append( + FilterOperation::CreateReferenceFilter(sk_make_sp<XfermodePaintFilter>( + SkBlendMode::kSrcOver, std::move(flip_filter), nullptr))); + filter->SetFilters(reflection_filter); + + CommitAndActivate(); + + EXPECT_EQ(gfx::Rect(49, 39, 12, 21), + ImplOf(filter_child)->visible_layer_rect()); + EXPECT_EQ(gfx::Rect(-1, -31, 32, 61), + GetRenderSurfaceImpl(filter)->content_rect()); +} + +TEST_F(PropertyTreeBuilderTest, TextureLayerSnapping) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto child = TextureLayer::CreateForMailbox(nullptr); + root->AddChild(child); + + root->SetBounds(gfx::Size(100, 100)); + child->SetBounds(gfx::Size(100, 100)); + child->SetIsDrawable(true); + gfx::Transform fractional_translate; + fractional_translate.Translate(10.5f, 20.3f); + child->SetTransform(fractional_translate); + + CommitAndActivate(); + + auto child_screen_space_transform = ImplOf(child)->ScreenSpaceTransform(); + EXPECT_NE(child_screen_space_transform, fractional_translate); + fractional_translate.RoundTranslationComponents(); + EXPECT_TRANSFORMATION_MATRIX_EQ(child_screen_space_transform, + fractional_translate); + gfx::RectF layer_bounds_in_screen_space = MathUtil::MapClippedRect( + child_screen_space_transform, gfx::RectF(gfx::SizeF(child->bounds()))); + EXPECT_EQ(layer_bounds_in_screen_space, gfx::RectF(11.f, 20.f, 100.f, 100.f)); +} + +// Verify the behavior of back-face culling when there are no preserve-3d +// layers. Note that 3d transforms still apply in this case, but they are +// "flattened" to each parent layer according to current W3C spec. +TEST_F(PropertyTreeBuilderTest, BackFaceCullingWithoutPreserves3d) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto front_facing_child = Layer::Create(); + root->AddChild(front_facing_child); + auto back_facing_child = Layer::Create(); + root->AddChild(back_facing_child); + auto front_facing_surface = Layer::Create(); + root->AddChild(front_facing_surface); + auto back_facing_surface = Layer::Create(); + root->AddChild(back_facing_surface); + auto front_facing_child_of_front_facing_surface = Layer::Create(); + front_facing_surface->AddChild(front_facing_child_of_front_facing_surface); + auto back_facing_child_of_front_facing_surface = Layer::Create(); + front_facing_surface->AddChild(back_facing_child_of_front_facing_surface); + auto front_facing_child_of_back_facing_surface = Layer::Create(); + back_facing_surface->AddChild(front_facing_child_of_back_facing_surface); + auto back_facing_child_of_back_facing_surface = Layer::Create(); + back_facing_surface->AddChild(back_facing_child_of_back_facing_surface); + + // Nothing is double-sided + front_facing_child->SetDoubleSided(false); + back_facing_child->SetDoubleSided(false); + front_facing_surface->SetDoubleSided(false); + back_facing_surface->SetDoubleSided(false); + front_facing_child_of_front_facing_surface->SetDoubleSided(false); + back_facing_child_of_front_facing_surface->SetDoubleSided(false); + front_facing_child_of_back_facing_surface->SetDoubleSided(false); + back_facing_child_of_back_facing_surface->SetDoubleSided(false); + + // Everything draws content. + front_facing_child->SetIsDrawable(true); + back_facing_child->SetIsDrawable(true); + front_facing_surface->SetIsDrawable(true); + back_facing_surface->SetIsDrawable(true); + front_facing_child_of_front_facing_surface->SetIsDrawable(true); + back_facing_child_of_front_facing_surface->SetIsDrawable(true); + front_facing_child_of_back_facing_surface->SetIsDrawable(true); + back_facing_child_of_back_facing_surface->SetIsDrawable(true); + + gfx::Transform backface_matrix; + backface_matrix.Translate(50.0, 50.0); + backface_matrix.RotateAboutYAxis(180.0); + backface_matrix.Translate(-50.0, -50.0); + + root->SetBounds(gfx::Size(100, 100)); + front_facing_child->SetBounds(gfx::Size(100, 100)); + back_facing_child->SetBounds(gfx::Size(100, 100)); + front_facing_surface->SetBounds(gfx::Size(100, 100)); + back_facing_surface->SetBounds(gfx::Size(100, 100)); + front_facing_child_of_front_facing_surface->SetBounds(gfx::Size(100, 100)); + back_facing_child_of_front_facing_surface->SetBounds(gfx::Size(100, 100)); + front_facing_child_of_back_facing_surface->SetBounds(gfx::Size(100, 100)); + back_facing_child_of_back_facing_surface->SetBounds(gfx::Size(100, 100)); + + front_facing_surface->SetForceRenderSurfaceForTesting(true); + back_facing_surface->SetForceRenderSurfaceForTesting(true); + + back_facing_child->SetTransform(backface_matrix); + back_facing_surface->SetTransform(backface_matrix); + back_facing_child_of_front_facing_surface->SetTransform(backface_matrix); + back_facing_child_of_back_facing_surface->SetTransform(backface_matrix); + + // Note: No layers preserve 3d. According to current W3C CSS gfx::Transforms + // spec, these layers should blindly use their own local transforms to + // determine back-face culling. + CommitAndActivate(); + + // Verify which render surfaces were created. + EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child), + GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child), + GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(front_facing_surface), + GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), + GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), + GetRenderSurfaceImpl(front_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child_of_front_facing_surface), + GetRenderSurfaceImpl(front_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child_of_front_facing_surface), + GetRenderSurfaceImpl(front_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child_of_back_facing_surface), + GetRenderSurfaceImpl(back_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child_of_back_facing_surface), + GetRenderSurfaceImpl(back_facing_surface)); + + EXPECT_EQ(3u, update_layer_impl_list().size()); + EXPECT_TRUE(UpdateLayerImplListContains(front_facing_child->id())); + EXPECT_TRUE(UpdateLayerImplListContains(front_facing_surface->id())); + EXPECT_TRUE(UpdateLayerImplListContains( + front_facing_child_of_front_facing_surface->id())); +} + +// Verify the behavior of back-face culling when preserves-3d transform style +// is used. +TEST_F(PropertyTreeBuilderTest, BackFaceCullingWithPreserves3d) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto front_facing_child = Layer::Create(); + root->AddChild(front_facing_child); + auto back_facing_child = Layer::Create(); + root->AddChild(back_facing_child); + auto front_facing_surface = Layer::Create(); + root->AddChild(front_facing_surface); + auto back_facing_surface = Layer::Create(); + root->AddChild(back_facing_surface); + auto front_facing_child_of_front_facing_surface = Layer::Create(); + front_facing_surface->AddChild(front_facing_child_of_front_facing_surface); + auto back_facing_child_of_front_facing_surface = Layer::Create(); + front_facing_surface->AddChild(back_facing_child_of_front_facing_surface); + auto front_facing_child_of_back_facing_surface = Layer::Create(); + back_facing_surface->AddChild(front_facing_child_of_back_facing_surface); + auto back_facing_child_of_back_facing_surface = Layer::Create(); + back_facing_surface->AddChild(back_facing_child_of_back_facing_surface); + // Opacity will not force creation of render surfaces in this case because of + // the preserve-3d transform style. Instead, an example of when a surface + // would be created with preserve-3d is when there is a mask layer. + FakeContentLayerClient client; + auto front_facing_mask = PictureLayer::Create(&client); + front_facing_surface->SetMaskLayer(front_facing_mask); + auto back_facing_mask = PictureLayer::Create(&client); + back_facing_surface->SetMaskLayer(back_facing_mask); + + // Nothing is double-sided + front_facing_child->SetDoubleSided(false); + back_facing_child->SetDoubleSided(false); + front_facing_surface->SetDoubleSided(false); + back_facing_surface->SetDoubleSided(false); + front_facing_child_of_front_facing_surface->SetDoubleSided(false); + back_facing_child_of_front_facing_surface->SetDoubleSided(false); + front_facing_child_of_back_facing_surface->SetDoubleSided(false); + back_facing_child_of_back_facing_surface->SetDoubleSided(false); + + // Everything draws content. + front_facing_child->SetIsDrawable(true); + back_facing_child->SetIsDrawable(true); + front_facing_surface->SetIsDrawable(true); + back_facing_surface->SetIsDrawable(true); + front_facing_child_of_front_facing_surface->SetIsDrawable(true); + back_facing_child_of_front_facing_surface->SetIsDrawable(true); + front_facing_child_of_back_facing_surface->SetIsDrawable(true); + back_facing_child_of_back_facing_surface->SetIsDrawable(true); + front_facing_mask->SetIsDrawable(true); + back_facing_mask->SetIsDrawable(true); + + gfx::Transform backface_matrix; + backface_matrix.Translate(50.0, 50.0); + backface_matrix.RotateAboutYAxis(180.0); + backface_matrix.Translate(-50.0, -50.0); + + root->SetBounds(gfx::Size(100, 100)); + front_facing_child->SetBounds(gfx::Size(100, 100)); + back_facing_child->SetBounds(gfx::Size(100, 100)); + front_facing_surface->SetBounds(gfx::Size(100, 100)); + back_facing_surface->SetBounds(gfx::Size(100, 100)); + front_facing_child_of_front_facing_surface->SetBounds(gfx::Size(100, 100)); + back_facing_child_of_front_facing_surface->SetBounds(gfx::Size(100, 100)); + front_facing_child_of_back_facing_surface->SetBounds(gfx::Size(100, 100)); + back_facing_child_of_back_facing_surface->SetBounds(gfx::Size(100, 100)); + front_facing_mask->SetBounds(gfx::Size(100, 100)); + back_facing_mask->SetBounds(gfx::Size(100, 100)); + + back_facing_child->SetTransform(backface_matrix); + back_facing_surface->SetTransform(backface_matrix); + back_facing_child_of_front_facing_surface->SetTransform(backface_matrix); + back_facing_child_of_back_facing_surface->SetTransform(backface_matrix); + + // Each surface creates its own new 3d rendering context (as defined by W3C + // spec). According to current W3C CSS gfx::Transforms spec, layers in a 3d + // rendering context should use the transform with respect to that context. + // This 3d rendering context occurs when (a) parent's transform style is flat + // and (b) the layer's transform style is preserve-3d. + front_facing_surface->SetShouldFlattenTransform(false); + front_facing_surface->Set3dSortingContextId(1); + back_facing_surface->SetShouldFlattenTransform(false); + back_facing_surface->Set3dSortingContextId(1); + front_facing_child_of_front_facing_surface->Set3dSortingContextId(1); + back_facing_child_of_front_facing_surface->Set3dSortingContextId(1); + front_facing_child_of_back_facing_surface->Set3dSortingContextId(1); + back_facing_child_of_back_facing_surface->Set3dSortingContextId(1); + + CommitAndActivate(); + + // Verify which render surfaces were created and used. + EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child), + GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child), + GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(front_facing_surface), + GetRenderSurfaceImpl(root)); + // We expect that a render surface was created but not used. + EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), + GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), + GetRenderSurfaceImpl(front_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child_of_front_facing_surface), + GetRenderSurfaceImpl(front_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child_of_front_facing_surface), + GetRenderSurfaceImpl(front_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(front_facing_child_of_back_facing_surface), + GetRenderSurfaceImpl(back_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(back_facing_child_of_back_facing_surface), + GetRenderSurfaceImpl(back_facing_surface)); + + EXPECT_EQ(4u, update_layer_impl_list().size()); + + EXPECT_TRUE(UpdateLayerImplListContains(front_facing_child->id())); + EXPECT_TRUE(UpdateLayerImplListContains(front_facing_surface->id())); + EXPECT_TRUE(UpdateLayerImplListContains(front_facing_mask->id())); + EXPECT_TRUE(UpdateLayerImplListContains( + front_facing_child_of_front_facing_surface->id())); +} + +// Verify that layers are appropriately culled when their back face is showing +// and they are not double sided, while animations are going on. +// Even layers that are animating get culled if their back face is showing and +// they are not double sided. +TEST_F(PropertyTreeBuilderTest, BackFaceCullingWithAnimatingTransforms) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto child = Layer::Create(); + root->AddChild(child); + auto animating_surface = Layer::Create(); + root->AddChild(animating_surface); + auto child_of_animating_surface = Layer::Create(); + animating_surface->AddChild(child_of_animating_surface); + auto animating_child = Layer::Create(); + root->AddChild(animating_child); + auto child2 = Layer::Create(); + root->AddChild(child2); + + // Nothing is double-sided + child->SetDoubleSided(false); + child2->SetDoubleSided(false); + animating_surface->SetDoubleSided(false); + child_of_animating_surface->SetDoubleSided(false); + animating_child->SetDoubleSided(false); + + // Everything draws content. + child->SetIsDrawable(true); + child2->SetIsDrawable(true); + animating_surface->SetIsDrawable(true); + child_of_animating_surface->SetIsDrawable(true); + animating_child->SetIsDrawable(true); + + gfx::Transform backface_matrix; + backface_matrix.Translate(50.0, 50.0); + backface_matrix.RotateAboutYAxis(180.0); + backface_matrix.Translate(-50.0, -50.0); + + host()->SetElementIdsForTesting(); + + // Animate the transform on the render surface. + AddAnimatedTransformToElementWithAnimation(animating_surface->element_id(), + timeline(), 10.0, 30, 0); + // This is just an animating layer, not a surface. + AddAnimatedTransformToElementWithAnimation(animating_child->element_id(), + timeline(), 10.0, 30, 0); + + root->SetBounds(gfx::Size(100, 100)); + child->SetBounds(gfx::Size(100, 100)); + child->SetTransform(backface_matrix); + animating_surface->SetBounds(gfx::Size(100, 100)); + animating_surface->SetTransform(backface_matrix); + animating_surface->SetForceRenderSurfaceForTesting(true); + child_of_animating_surface->SetBounds(gfx::Size(100, 100)); + child_of_animating_surface->SetTransform(backface_matrix); + animating_child->SetBounds(gfx::Size(100, 100)); + animating_child->SetTransform(backface_matrix); + child2->SetBounds(gfx::Size(100, 100)); + + CommitAndActivate(); + + EXPECT_EQ(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(root)); + EXPECT_TRUE(GetRenderSurfaceImpl(animating_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(child_of_animating_surface), + GetRenderSurfaceImpl(animating_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(animating_child), GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(child2), GetRenderSurfaceImpl(root)); + + EXPECT_EQ(1u, update_layer_impl_list().size()); + + // The back facing layers are culled from the layer list, and have an empty + // visible rect. + EXPECT_TRUE(UpdateLayerImplListContains(child2->id())); + EXPECT_TRUE(ImplOf(child)->visible_layer_rect().IsEmpty()); + EXPECT_TRUE(ImplOf(animating_surface)->visible_layer_rect().IsEmpty()); + EXPECT_TRUE( + ImplOf(child_of_animating_surface)->visible_layer_rect().IsEmpty()); + EXPECT_TRUE(ImplOf(animating_child)->visible_layer_rect().IsEmpty()); + + EXPECT_EQ(gfx::Rect(100, 100), ImplOf(child2)->visible_layer_rect()); +} + +// Verify the behavior of back-face culling for a render surface that is +// created when it flattens its subtree, and its parent has preserves-3d. +TEST_F(PropertyTreeBuilderTest, + BackFaceCullingWithPreserves3dForFlatteningSurface) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto front_facing_surface = Layer::Create(); + root->AddChild(front_facing_surface); + auto back_facing_surface = Layer::Create(); + root->AddChild(back_facing_surface); + auto child1 = Layer::Create(); + front_facing_surface->AddChild(child1); + auto child2 = Layer::Create(); + back_facing_surface->AddChild(child2); + + // RenderSurfaces are not double-sided + front_facing_surface->SetDoubleSided(false); + back_facing_surface->SetDoubleSided(false); + + // Everything draws content. + front_facing_surface->SetIsDrawable(true); + back_facing_surface->SetIsDrawable(true); + child1->SetIsDrawable(true); + child2->SetIsDrawable(true); + + gfx::Transform backface_matrix; + backface_matrix.Translate(50.0, 50.0); + backface_matrix.RotateAboutYAxis(180.0); + backface_matrix.Translate(-50.0, -50.0); + + root->SetBounds(gfx::Size(100, 100)); + front_facing_surface->SetBounds(gfx::Size(100, 100)); + front_facing_surface->SetForceRenderSurfaceForTesting(true); + back_facing_surface->SetBounds(gfx::Size(100, 100)); + back_facing_surface->SetTransform(backface_matrix); + back_facing_surface->SetForceRenderSurfaceForTesting(true); + child1->SetBounds(gfx::Size(100, 100)); + child2->SetBounds(gfx::Size(100, 100)); + + front_facing_surface->Set3dSortingContextId(1); + back_facing_surface->Set3dSortingContextId(1); + + CommitAndActivate(); + + // Verify which render surfaces were created and used. + EXPECT_TRUE(GetRenderSurfaceImpl(front_facing_surface)); + + // We expect the render surface to have been created, but remain unused. + EXPECT_NE(GetRenderSurfaceImpl(back_facing_surface), + GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(child1), + GetRenderSurfaceImpl(front_facing_surface)); + EXPECT_EQ(GetRenderSurfaceImpl(child2), + GetRenderSurfaceImpl(back_facing_surface)); + + EXPECT_EQ(2u, update_layer_impl_list().size()); + EXPECT_TRUE(UpdateLayerImplListContains(front_facing_surface->id())); + EXPECT_TRUE(UpdateLayerImplListContains(child1->id())); +} + +TEST_F(PropertyTreeBuilderTest, + CreateRenderSurfaceWhenFlattenInsideRenderingContext) { + // Verifies that Render Surfaces are created at the edge of rendering context. + + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto child1 = Layer::Create(); + root->AddChild(child1); + auto child2 = Layer::Create(); + child1->AddChild(child2); + auto child3 = Layer::Create(); + child2->AddChild(child3); + root->SetIsDrawable(true); + + gfx::Size bounds(100, 100); + + root->SetBounds(bounds); + child1->SetBounds(bounds); + child1->SetIsDrawable(true); + child1->SetShouldFlattenTransform(false); + child1->Set3dSortingContextId(1); + child2->SetBounds(bounds); + child2->SetIsDrawable(true); + child2->Set3dSortingContextId(1); + child3->SetBounds(bounds); + child3->SetIsDrawable(true); + child3->Set3dSortingContextId(1); + + CommitAndActivate(); + + // Verify which render surfaces were created. + EXPECT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(child1), GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(child2), GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(child3), GetRenderSurfaceImpl(child2)); +} + +TEST_F(PropertyTreeBuilderTest, DoNotIncludeBackfaceInvisibleSurfaces) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto back_facing = Layer::Create(); + root->AddChild(back_facing); + + auto render_surface1 = Layer::Create(); + back_facing->AddChild(render_surface1); + auto child1 = Layer::Create(); + render_surface1->AddChild(child1); + + auto flattener = Layer::Create(); + back_facing->AddChild(flattener); + auto render_surface2 = Layer::Create(); + flattener->AddChild(render_surface2); + auto child2 = Layer::Create(); + render_surface2->AddChild(child2); + + child1->SetIsDrawable(true); + child2->SetIsDrawable(true); + + root->SetBounds(gfx::Size(50, 50)); + back_facing->SetBounds(gfx::Size(50, 50)); + back_facing->SetShouldFlattenTransform(false); + + render_surface1->SetBounds(gfx::Size(30, 30)); + render_surface1->SetShouldFlattenTransform(false); + render_surface1->SetForceRenderSurfaceForTesting(true); + render_surface1->SetDoubleSided(false); + child1->SetBounds(gfx::Size(20, 20)); + + flattener->SetBounds(gfx::Size(30, 30)); + render_surface2->SetBounds(gfx::Size(30, 30)); + render_surface2->SetShouldFlattenTransform(false); + render_surface2->SetForceRenderSurfaceForTesting(true); + render_surface2->SetDoubleSided(false); + child2->SetBounds(gfx::Size(20, 20)); + + CommitAndActivate(); + + EXPECT_EQ(3u, GetRenderSurfaceList().size()); + EXPECT_EQ(2, GetRenderSurfaceList().at(0)->num_contributors()); + EXPECT_EQ(1, GetRenderSurfaceList().at(1)->num_contributors()); + + gfx::Transform rotation_transform; + rotation_transform.RotateAboutXAxis(180.0); + back_facing->SetTransform(rotation_transform); + + CommitAndActivate(); + + // render_surface1 is in the same 3d rendering context as back_facing and is + // not double sided, so it should not be in RSLL. render_surface2 is also not + // double-sided, but will still be in RSLL as it's in a different 3d rendering + // context. + EXPECT_EQ(2u, GetRenderSurfaceList().size()); + EXPECT_EQ(1, GetRenderSurfaceList().at(0)->num_contributors()); +} + +TEST_F(PropertyTreeBuilderTest, DoNotIncludeBackfaceInvisibleLayers) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto child = Layer::Create(); + root->AddChild(child); + auto grand_child = Layer::Create(); + child->AddChild(grand_child); + + root->SetBounds(gfx::Size(50, 50)); + root->SetShouldFlattenTransform(false); + child->SetBounds(gfx::Size(30, 30)); + child->SetDoubleSided(false); + child->SetShouldFlattenTransform(false); + grand_child->SetBounds(gfx::Size(20, 20)); + grand_child->SetIsDrawable(true); + grand_child->SetUseParentBackfaceVisibility(true); + grand_child->SetShouldFlattenTransform(false); + + CommitAndActivate(); + + EXPECT_EQ(1u, GetRenderSurfaceList().size()); + EXPECT_TRUE(ImplOf(grand_child)->contributes_to_drawn_render_surface()); + + // A ll layers with invisible backfgaces should be checked. + EXPECT_FALSE(ImplOf(root)->should_check_backface_visibility()); + EXPECT_TRUE(ImplOf(child)->should_check_backface_visibility()); + EXPECT_TRUE(ImplOf(grand_child)->should_check_backface_visibility()); + + gfx::Transform rotation_transform; + rotation_transform.RotateAboutXAxis(180.0); + + child->SetTransform(rotation_transform); + child->Set3dSortingContextId(1); + grand_child->Set3dSortingContextId(1); + + CommitAndActivate(); + + EXPECT_EQ(1u, GetRenderSurfaceList().size()); + EXPECT_EQ(0, GetRenderSurfaceList().at(0)->num_contributors()); + + // We should check for backface visibilty of child as it has a rotation + // transform. We should also check for grand_child as it uses the backface + // visibility of its parent. + EXPECT_FALSE(ImplOf(root)->should_check_backface_visibility()); + EXPECT_TRUE(ImplOf(child)->should_check_backface_visibility()); + EXPECT_TRUE(ImplOf(grand_child)->should_check_backface_visibility()); + + grand_child->SetUseParentBackfaceVisibility(false); + grand_child->SetDoubleSided(false); + + CommitAndActivate(); + + EXPECT_EQ(1u, GetRenderSurfaceList().size()); + EXPECT_EQ(0, GetRenderSurfaceList().at(0)->num_contributors()); + + // We should check the backface visibility of child as it has a rotation + // transform and for grand_child as it is in a 3d rendering context and not + // the root of it. + EXPECT_FALSE(ImplOf(root)->should_check_backface_visibility()); + EXPECT_TRUE(ImplOf(child)->should_check_backface_visibility()); + EXPECT_TRUE(ImplOf(grand_child)->should_check_backface_visibility()); +} + +// Verify that having animated opacity but current opacity 1 still creates +// a render surface. +TEST_F(PropertyTreeBuilderTest, AnimatedOpacityCreatesRenderSurface) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto child = Layer::Create(); + root->AddChild(child); + auto grandchild = Layer::Create(); + child->AddChild(grandchild); + + root->SetBounds(gfx::Size(50, 50)); + child->SetBounds(gfx::Size(50, 50)); + child->SetIsDrawable(true); + grandchild->SetBounds(gfx::Size(50, 50)); + grandchild->SetIsDrawable(true); + + host()->SetElementIdsForTesting(); + AddOpacityTransitionToElementWithAnimation(child->element_id(), timeline(), + 10.0, 1.f, 0.2f, false); + CommitAndActivate(); + + EXPECT_EQ(1.f, ImplOf(child)->Opacity()); + EXPECT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(grandchild), GetRenderSurfaceImpl(child)); +} + +static bool FilterIsAnimating(LayerImpl* layer) { + MutatorHost* host = layer->layer_tree_impl()->mutator_host(); + return host->IsAnimatingFilterProperty(layer->element_id(), + layer->GetElementTypeForAnimation()); +} + +// Verify that having an animated filter (but no current filter, as these +// are mutually exclusive) correctly creates a render surface. +TEST_F(PropertyTreeBuilderTest, AnimatedFilterCreatesRenderSurface) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto child = Layer::Create(); + root->AddChild(child); + auto grandchild = Layer::Create(); + child->AddChild(grandchild); + + root->SetBounds(gfx::Size(50, 50)); + child->SetBounds(gfx::Size(50, 50)); + grandchild->SetBounds(gfx::Size(50, 50)); + + host()->SetElementIdsForTesting(); + AddAnimatedFilterToElementWithAnimation(child->element_id(), timeline(), 10.0, + 0.1f, 0.2f); + CommitAndActivate(); + + EXPECT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(grandchild), GetRenderSurfaceImpl(child)); + + EXPECT_TRUE(GetRenderSurfaceImpl(root)->Filters().IsEmpty()); + EXPECT_TRUE(GetRenderSurfaceImpl(child)->Filters().IsEmpty()); + + EXPECT_FALSE(FilterIsAnimating(ImplOf(root))); + EXPECT_TRUE(FilterIsAnimating(ImplOf(child))); + EXPECT_FALSE(FilterIsAnimating(ImplOf(grandchild))); +} + +bool HasPotentiallyRunningFilterAnimation(const LayerImpl& layer) { + MutatorHost* host = layer.layer_tree_impl()->mutator_host(); + return host->HasPotentiallyRunningFilterAnimation( + layer.element_id(), layer.GetElementTypeForAnimation()); +} + +// Verify that having a filter animation with a delayed start time creates a +// render surface. +TEST_F(PropertyTreeBuilderTest, DelayedFilterAnimationCreatesRenderSurface) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto child = Layer::Create(); + root->AddChild(child); + auto grandchild = Layer::Create(); + child->AddChild(grandchild); + + root->SetBounds(gfx::Size(50, 50)); + child->SetBounds(gfx::Size(50, 50)); + grandchild->SetBounds(gfx::Size(50, 50)); + + host()->SetElementIdsForTesting(); + + std::unique_ptr<KeyframedFilterAnimationCurve> curve( + KeyframedFilterAnimationCurve::Create()); + FilterOperations start_filters; + start_filters.Append(FilterOperation::CreateBrightnessFilter(0.1f)); + FilterOperations end_filters; + end_filters.Append(FilterOperation::CreateBrightnessFilter(0.3f)); + curve->AddKeyframe( + FilterKeyframe::Create(base::TimeDelta(), start_filters, nullptr)); + curve->AddKeyframe(FilterKeyframe::Create( + base::TimeDelta::FromMilliseconds(100), end_filters, nullptr)); + std::unique_ptr<KeyframeModel> keyframe_model = + KeyframeModel::Create(std::move(curve), 0, 1, TargetProperty::FILTER); + keyframe_model->set_fill_mode(KeyframeModel::FillMode::NONE); + keyframe_model->set_time_offset(base::TimeDelta::FromMilliseconds(-1000)); + + AddKeyframeModelToElementWithAnimation(child->element_id(), timeline(), + std::move(keyframe_model)); + CommitAndActivate(); + + EXPECT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_NE(GetRenderSurfaceImpl(child), GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(grandchild), GetRenderSurfaceImpl(child)); + + EXPECT_TRUE(GetRenderSurfaceImpl(root)->Filters().IsEmpty()); + EXPECT_TRUE(GetRenderSurfaceImpl(child)->Filters().IsEmpty()); + + EXPECT_FALSE(FilterIsAnimating(ImplOf(root))); + EXPECT_FALSE(HasPotentiallyRunningFilterAnimation(*ImplOf(root))); + EXPECT_FALSE(FilterIsAnimating(ImplOf(child))); + EXPECT_TRUE(HasPotentiallyRunningFilterAnimation(*ImplOf(child))); + EXPECT_FALSE(FilterIsAnimating(ImplOf(grandchild))); + EXPECT_FALSE(HasPotentiallyRunningFilterAnimation(*ImplOf(grandchild))); +} + +TEST_F(PropertyTreeBuilderTest, ChangingAxisAlignmentTriggersRebuild) { + gfx::Transform translate; + gfx::Transform rotate; + + translate.Translate(10, 10); + rotate.Rotate(45); + + scoped_refptr<Layer> root = Layer::Create(); + root->SetBounds(gfx::Size(800, 800)); + + host()->SetRootLayer(root); + + UpdateMainDrawProperties(); + EXPECT_FALSE(host()->property_trees()->needs_rebuild); + + root->SetTransform(translate); + EXPECT_FALSE(host()->property_trees()->needs_rebuild); + + root->SetTransform(rotate); + EXPECT_TRUE(host()->property_trees()->needs_rebuild); +} + +TEST_F(PropertyTreeBuilderTest, ResetPropertyTreeIndices) { + scoped_refptr<Layer> root = Layer::Create(); + root->SetBounds(gfx::Size(800, 800)); + + gfx::Transform translate_z; + translate_z.Translate3d(0, 0, 10); + + scoped_refptr<Layer> child = Layer::Create(); + child->SetTransform(translate_z); + child->SetBounds(gfx::Size(100, 100)); + + root->AddChild(child); + + host()->SetRootLayer(root); + + UpdateMainDrawProperties(); + EXPECT_NE(-1, child->transform_tree_index()); + + child->RemoveFromParent(); + + UpdateMainDrawProperties(); + EXPECT_EQ(-1, child->transform_tree_index()); +} + +TEST_F(PropertyTreeBuilderTest, RenderSurfaceClipsSubtree) { + // Ensure that a Clip Node is added when a render surface applies clip. + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto significant_transform = Layer::Create(); + root->AddChild(significant_transform); + auto layer_clips_subtree = Layer::Create(); + significant_transform->AddChild(layer_clips_subtree); + auto render_surface = Layer::Create(); + layer_clips_subtree->AddChild(render_surface); + auto test_layer = Layer::Create(); + render_surface->AddChild(test_layer); + + // This transform should be a significant one so that a transform node is + // formed for it. + gfx::Transform transform1; + transform1.RotateAboutYAxis(45); + transform1.RotateAboutXAxis(30); + // This transform should be a 3d transform as we want the render surface + // to flatten the transform + gfx::Transform transform2; + transform2.Translate3d(10, 10, 10); + + root->SetBounds(gfx::Size(30, 30)); + significant_transform->SetTransform(transform1); + significant_transform->SetBounds(gfx::Size(30, 30)); + layer_clips_subtree->SetBounds(gfx::Size(30, 30)); + layer_clips_subtree->SetMasksToBounds(true); + layer_clips_subtree->SetForceRenderSurfaceForTesting(true); + render_surface->SetTransform(transform2); + render_surface->SetBounds(gfx::Size(30, 30)); + render_surface->SetForceRenderSurfaceForTesting(true); + test_layer->SetBounds(gfx::Size(30, 30)); + test_layer->SetIsDrawable(true); + + CommitAndActivate(); + + EXPECT_TRUE(GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(significant_transform), + GetRenderSurfaceImpl(root)); + EXPECT_TRUE(GetRenderSurfaceImpl(layer_clips_subtree)); + EXPECT_NE(GetRenderSurfaceImpl(render_surface), GetRenderSurfaceImpl(root)); + EXPECT_EQ(GetRenderSurfaceImpl(test_layer), + GetRenderSurfaceImpl(render_surface)); + + EXPECT_EQ(gfx::Rect(30, 20), ImplOf(test_layer)->visible_layer_rect()); +} + +TEST_F(PropertyTreeBuilderTest, PropertyTreesRebuildWithOpacityChanges) { + scoped_refptr<Layer> root = Layer::Create(); + scoped_refptr<Layer> child = Layer::Create(); + child->SetIsDrawable(true); + root->AddChild(child); + host()->SetRootLayer(root); + + root->SetBounds(gfx::Size(100, 100)); + child->SetBounds(gfx::Size(20, 20)); + UpdateMainDrawProperties(); + + // Changing the opacity from 1 to non-1 value should trigger rebuild of + // property trees as a new effect node will be created. + child->SetOpacity(0.5f); + PropertyTrees* property_trees = host()->property_trees(); + EXPECT_TRUE(property_trees->needs_rebuild); + + UpdateMainDrawProperties(); + EXPECT_NE(child->effect_tree_index(), root->effect_tree_index()); + + // child already has an effect node. Changing its opacity shouldn't trigger + // a property trees rebuild. + child->SetOpacity(0.8f); + property_trees = host()->property_trees(); + EXPECT_FALSE(property_trees->needs_rebuild); + + UpdateMainDrawProperties(); + EXPECT_NE(child->effect_tree_index(), root->effect_tree_index()); + + // Changing the opacity from non-1 value to 1 should trigger a rebuild of + // property trees as the effect node may no longer be needed. + child->SetOpacity(1.f); + property_trees = host()->property_trees(); + EXPECT_TRUE(property_trees->needs_rebuild); + + UpdateMainDrawProperties(); + EXPECT_EQ(child->effect_tree_index(), root->effect_tree_index()); +} + +TEST_F(PropertyTreeBuilderTest, RenderSurfaceListForTrilinearFiltering) { + auto root = Layer::Create(); + host()->SetRootLayer(root); + auto parent = Layer::Create(); + root->AddChild(parent); + auto child1 = Layer::Create(); + parent->AddChild(child1); + auto child2 = Layer::Create(); + parent->AddChild(child2); + + gfx::Transform scale_matrix; + scale_matrix.Scale(.25f, .25f); + + root->SetBounds(gfx::Size(200, 200)); + parent->SetTransform(scale_matrix); + parent->SetTrilinearFiltering(true); + child1->SetBounds(gfx::Size(50, 50)); + child1->SetIsDrawable(true); + child1->SetForceRenderSurfaceForTesting(true); + child2->SetPosition(gfx::PointF(50, 50)); + child2->SetBounds(gfx::Size(50, 50)); + child2->SetIsDrawable(true); + child2->SetForceRenderSurfaceForTesting(true); + + CommitAndActivate(); + + ASSERT_TRUE(GetRenderSurfaceImpl(parent)); + EXPECT_EQ(2, GetRenderSurfaceImpl(parent)->num_contributors()); + EXPECT_EQ(4U, GetRenderSurfaceList().size()); + + // The rectangle enclosing child1 and child2 (0,0 100x100), scaled by the + // scale matrix to (0,0 25x25). + EXPECT_EQ(gfx::RectF(0, 0, 25, 25), + GetRenderSurfaceImpl(parent)->DrawableContentRect()); +} + +TEST_F(PropertyTreeBuilderTest, RoundedCornerBounds) { + // Layer Tree: + // +root + // +--render surface + // +----rounded corner layer 1 [should trigger render surface] + // +----layer 1 + // +--rounded corner layer 2 [should trigger render surface] + // +----layer 2 + // +------rounded corner layer 3 [should trigger render surface] + // +--------rounded corner layer 4 [should trigger render surface] + + constexpr int kRoundedCorner1Radius = 2; + constexpr int kRoundedCorner2Radius = 5; + constexpr int kRoundedCorner3Radius = 1; + constexpr int kRoundedCorner4Radius = 1; + + constexpr gfx::RectF kRoundedCornerLayer1Bound(15.f, 15.f, 20.f, 20.f); + constexpr gfx::RectF kRoundedCornerLayer2Bound(40.f, 40.f, 60.f, 60.f); + constexpr gfx::RectF kRoundedCornerLayer3Bound(0.f, 15.f, 5.f, 5.f); + constexpr gfx::RectF kRoundedCornerLayer4Bound(1.f, 1.f, 3.f, 3.f); + + constexpr float kDeviceScale = 1.6f; + + scoped_refptr<Layer> root = Layer::Create(); + scoped_refptr<Layer> render_surface = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); + scoped_refptr<Layer> layer_1 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_2 = Layer::Create(); + scoped_refptr<Layer> layer_2 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_3 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_4 = Layer::Create(); + + // Set up layer tree + root->AddChild(render_surface); + root->AddChild(rounded_corner_layer_2); + + render_surface->AddChild(rounded_corner_layer_1); + render_surface->AddChild(layer_1); + + rounded_corner_layer_2->AddChild(layer_2); + + layer_2->AddChild(rounded_corner_layer_3); + + rounded_corner_layer_3->AddChild(rounded_corner_layer_4); + + // Set the root layer on host. + host()->SetRootLayer(root); + + // Set layer positions. + render_surface->SetPosition(gfx::PointF(0, 0)); + rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); + layer_1->SetPosition(gfx::PointF(10.f, 10.f)); + rounded_corner_layer_2->SetPosition(kRoundedCornerLayer2Bound.origin()); + layer_2->SetPosition(gfx::PointF(30.f, 30.f)); + rounded_corner_layer_3->SetPosition(kRoundedCornerLayer3Bound.origin()); + rounded_corner_layer_4->SetPosition(kRoundedCornerLayer4Bound.origin()); + + // Set up layer bounds. + root->SetBounds(gfx::Size(100, 100)); + render_surface->SetBounds(gfx::Size(50, 50)); + rounded_corner_layer_1->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); + layer_1->SetBounds(gfx::Size(10, 10)); + rounded_corner_layer_2->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); + layer_2->SetBounds(gfx::Size(25, 25)); + rounded_corner_layer_3->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer3Bound.size())); + rounded_corner_layer_4->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer4Bound.size())); + + // Add Layer transforms. + gfx::Transform layer_2_transform; + constexpr gfx::Vector2dF kLayer2Translation(10.f, 10.f); + layer_2_transform.Translate(kLayer2Translation); + layer_2->SetTransform(layer_2_transform); + + gfx::Transform rounded_corner_layer_3_transform; + constexpr float kRoundedCorner3Scale = 2.f; + rounded_corner_layer_3_transform.Scale(kRoundedCorner3Scale, + kRoundedCorner3Scale); + rounded_corner_layer_3->SetTransform(rounded_corner_layer_3_transform); + + // Set the layer properties + render_surface->SetForceRenderSurfaceForTesting(true); + + root->SetIsDrawable(true); + render_surface->SetIsDrawable(true); + rounded_corner_layer_1->SetIsDrawable(true); + layer_1->SetIsDrawable(true); + rounded_corner_layer_2->SetIsDrawable(true); + layer_2->SetIsDrawable(true); + rounded_corner_layer_3->SetIsDrawable(true); + rounded_corner_layer_4->SetIsDrawable(true); + + // Set Rounded corners + rounded_corner_layer_1->SetRoundedCorner( + {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, + kRoundedCorner1Radius}); + rounded_corner_layer_2->SetRoundedCorner( + {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, + kRoundedCorner2Radius}); + rounded_corner_layer_3->SetRoundedCorner( + {kRoundedCorner3Radius, kRoundedCorner3Radius, kRoundedCorner3Radius, + kRoundedCorner3Radius}); + rounded_corner_layer_4->SetRoundedCorner( + {kRoundedCorner4Radius, kRoundedCorner4Radius, kRoundedCorner4Radius, + kRoundedCorner4Radius}); + + UpdateMainDrawProperties(kDeviceScale); + + // Since this effect node has no descendants that draw and no descendant that + // has a rounded corner, it does not need a render surface. + const EffectNode* effect_node = GetEffectNode(rounded_corner_layer_1.get()); + gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), + kRoundedCorner1Radius); + EXPECT_EQ(rounded_corner_bounds_1.rect(), + gfx::RectF(kRoundedCornerLayer1Bound.size())); + + // Since this node has descendants with roudned corners, it needs a render + // surface. It also has 2 descendants that draw. + effect_node = GetEffectNode(rounded_corner_layer_2.get()); + gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; + EXPECT_TRUE(effect_node->HasRenderSurface()); + EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), + kRoundedCorner2Radius); + EXPECT_EQ(rounded_corner_bounds_2.rect(), + gfx::RectF(kRoundedCornerLayer2Bound.size())); + + // Since this node has a descendant that has a rounded corner, it will trigger + // the creation of a render surface. + effect_node = GetEffectNode(rounded_corner_layer_3.get()); + gfx::RRectF rounded_corner_bounds_3 = effect_node->rounded_corner_bounds; + EXPECT_TRUE(effect_node->HasRenderSurface()); + EXPECT_FLOAT_EQ(rounded_corner_bounds_3.GetSimpleRadius(), + kRoundedCorner3Radius); + EXPECT_EQ(rounded_corner_bounds_3.rect(), + gfx::RectF(kRoundedCornerLayer3Bound.size())); + + // Since this node has no descendants that draw nor any descendant that has a + // rounded corner, it does not need a render surface. + effect_node = GetEffectNode(rounded_corner_layer_4.get()); + gfx::RRectF rounded_corner_bounds_4 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_FLOAT_EQ(rounded_corner_bounds_4.GetSimpleRadius(), + kRoundedCorner4Radius); + EXPECT_EQ(rounded_corner_bounds_4.rect(), + gfx::RectF(kRoundedCornerLayer4Bound.size())); + + CommitAndActivate(kDeviceScale); + LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); + + // Get the layer impl for each Layer. + LayerImpl* rounded_corner_layer_1_impl = + layer_tree_impl->LayerById(rounded_corner_layer_1->id()); + LayerImpl* rounded_corner_layer_2_impl = + layer_tree_impl->LayerById(rounded_corner_layer_2->id()); + LayerImpl* rounded_corner_layer_3_impl = + layer_tree_impl->LayerById(rounded_corner_layer_3->id()); + LayerImpl* rounded_corner_layer_4_impl = + layer_tree_impl->LayerById(rounded_corner_layer_4->id()); + + EXPECT_EQ(kDeviceScale, layer_tree_impl->device_scale_factor()); + + // Rounded corner layer 1 + // The render target for this layer is |render_surface|, hence its target + // bounds are relative to |render_surface|. + // The offset from the origin of the render target is [15, 15] and the device + // scale factor is 1.6 thus giving the target space origin of [24, 24]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_rrect_1 = + rounded_corner_layer_1_impl->draw_properties().rounded_corner_bounds; + gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_rrect_1.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_rrect_1.GetSimpleRadius(), + kRoundedCorner1Radius * kDeviceScale); + + // Rounded corner layer 2 + // The render target for this layer is |root|. + // The offset from the origin of the render target is [40, 40] and the device + // scale factor is 1.6 thus giving the target space origin of [64, 64]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_2 = + rounded_corner_layer_2_impl->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(actual_self_rrect_2.IsEmpty()); + + bounds_in_target_space = kRoundedCornerLayer2Bound; + bounds_in_target_space.Scale(kDeviceScale); + const gfx::RRectF actual_render_target_rrect_2 = + rounded_corner_layer_2_impl->render_target()->rounded_corner_bounds(); + EXPECT_EQ(actual_render_target_rrect_2.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_render_target_rrect_2.GetSimpleRadius(), + kRoundedCorner2Radius * kDeviceScale); + + // Rounded corner layer 3 + // The render target for this layer is |rounded_corner_2|. + // The net offset from the origin of the render target is [40, 55] and the + // device scale factor is 1.6 thus giving the target space origin of [64, 88]. + // The corner radius is also scaled by a factor of 1.6 * transform scale. + const gfx::RRectF actual_self_rrect_3 = + rounded_corner_layer_3_impl->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(actual_self_rrect_3.IsEmpty()); + + bounds_in_target_space = kRoundedCornerLayer3Bound; + bounds_in_target_space += + layer_2->position().OffsetFromOrigin() + kLayer2Translation; + bounds_in_target_space.Scale(kDeviceScale); + gfx::SizeF transformed_size = bounds_in_target_space.size(); + transformed_size.Scale(kRoundedCorner3Scale); + bounds_in_target_space.set_size(transformed_size); + + const gfx::RRectF actual_render_target_rrect_3 = + rounded_corner_layer_3_impl->render_target()->rounded_corner_bounds(); + EXPECT_EQ(actual_render_target_rrect_3.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_render_target_rrect_3.GetSimpleRadius(), + kRoundedCorner3Radius * kDeviceScale * kRoundedCorner3Scale); + + // Rounded corner layer 4 + // The render target for this layer is |rounded_corner_3|. + // The net offset from the origin of the render target is [1, 1] and the + // net scale is 1.6 * transform scale = 3.2 thus giving the target space o + // rigin of [3.2, 3.2]. + // The corner radius is also scaled by a factor of 3.2. + const gfx::RRectF actual_rrect_4 = + rounded_corner_layer_4_impl->draw_properties().rounded_corner_bounds; + bounds_in_target_space = kRoundedCornerLayer4Bound; + bounds_in_target_space.Scale(kDeviceScale * kRoundedCorner3Scale); + EXPECT_EQ(actual_rrect_4.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_rrect_4.GetSimpleRadius(), + kRoundedCorner4Radius * kDeviceScale * kRoundedCorner3Scale); +} + +TEST_F(PropertyTreeBuilderTest, RoundedCornerBoundsInterveningRenderTarget) { + // Layer Tree: + // +root + // +--rounded corner layer 1 [should not trigger render surface] + // +----render surface [Does not draw] + // +------rounded corner layer 2 [should not trigger render surface] + + constexpr int kRoundedCorner1Radius = 2; + constexpr int kRoundedCorner2Radius = 5; + + constexpr gfx::RectF kRoundedCornerLayer1Bound(60.f, 0.f, 40.f, 30.f); + constexpr gfx::RectF kRoundedCornerLayer2Bound(0.f, 0.f, 30.f, 20.f); + + constexpr float kDeviceScale = 1.6f; + + scoped_refptr<Layer> root = Layer::Create(); + scoped_refptr<Layer> render_surface = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_2 = Layer::Create(); + + // Set up layer tree + root->AddChild(rounded_corner_layer_1); + rounded_corner_layer_1->AddChild(render_surface); + render_surface->AddChild(rounded_corner_layer_2); + + // Set the root layer on host. + host()->SetRootLayer(root); + + // Set layer positions. + rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); + render_surface->SetPosition(gfx::PointF(0, 0)); + rounded_corner_layer_2->SetPosition(kRoundedCornerLayer2Bound.origin()); + + // Set up layer bounds. + root->SetBounds(gfx::Size(100, 100)); + rounded_corner_layer_1->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); + render_surface->SetBounds(gfx::Size(30, 30)); + rounded_corner_layer_2->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); + + // Set the layer properties + render_surface->SetForceRenderSurfaceForTesting(true); + + root->SetIsDrawable(true); + rounded_corner_layer_1->SetIsDrawable(true); + rounded_corner_layer_2->SetIsDrawable(true); + + // Set Rounded corners + rounded_corner_layer_1->SetRoundedCorner( + {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, + kRoundedCorner1Radius}); + rounded_corner_layer_2->SetRoundedCorner( + {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, + kRoundedCorner2Radius}); + + UpdateMainDrawProperties(kDeviceScale); + + // Since this effect node has only 1 descendant that draws and no descendant + // that has a rounded corner before the render surface, it does not need a + // render surface. + const EffectNode* effect_node = GetEffectNode(rounded_corner_layer_1.get()); + gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), + kRoundedCorner1Radius); + EXPECT_EQ(rounded_corner_bounds_1.rect(), + gfx::RectF(kRoundedCornerLayer1Bound.size())); + + // Since this effect node has no descendants that draw and no descendant that + // has a rounded corner, it does not need a render surface. + effect_node = GetEffectNode(rounded_corner_layer_2.get()); + gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), + kRoundedCorner2Radius); + EXPECT_EQ(rounded_corner_bounds_2.rect(), + gfx::RectF(kRoundedCornerLayer2Bound.size())); + + CommitAndActivate(kDeviceScale); + LayerTreeImpl* layer_tree_impl = host_impl()->active_tree(); + + // Get the layer impl for each Layer. + LayerImpl* rounded_corner_layer_1_impl = + layer_tree_impl->LayerById(rounded_corner_layer_1->id()); + LayerImpl* rounded_corner_layer_2_impl = + layer_tree_impl->LayerById(rounded_corner_layer_2->id()); + + EXPECT_EQ(kDeviceScale, layer_tree_impl->device_scale_factor()); + + // Rounded corner layer 1 + // The render target for this layer is |root|, hence its target + // bounds are relative to |root|. + // The offset from the origin of the render target is [60, 0] and the device + // scale factor is 1.6 thus giving the target space origin of [96, 0]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_rrect_1 = + rounded_corner_layer_1_impl->draw_properties().rounded_corner_bounds; + gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_rrect_1.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_rrect_1.GetSimpleRadius(), + kRoundedCorner1Radius * kDeviceScale); + + // Rounded corner layer 2 + // The render target for this layer is |render_surface|. + // The offset from the origin of the render target is [0, 0]. + const gfx::RRectF actual_rrect_2 = + rounded_corner_layer_2_impl->draw_properties().rounded_corner_bounds; + bounds_in_target_space = kRoundedCornerLayer2Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_rrect_2.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_rrect_2.GetSimpleRadius(), + kRoundedCorner2Radius * kDeviceScale); +} + +TEST_F(PropertyTreeBuilderTest, RoundedCornerBoundsSiblingRenderTarget) { + // Layer Tree: + // +root + // +--rounded corner layer 1 [should trigger render surface] + // +----render surface [Does not draw] + // +----rounded corner layer 2 [should not trigger render surface] + + constexpr int kRoundedCorner1Radius = 2; + constexpr int kRoundedCorner2Radius = 5; + + constexpr gfx::RectF kRoundedCornerLayer1Bound(0.f, 60.f, 30.f, 40.f); + constexpr gfx::RectF kRoundedCornerLayer2Bound(0.f, 0.f, 20.f, 30.f); + + constexpr float kDeviceScale = 1.6f; + + scoped_refptr<Layer> root = Layer::Create(); + scoped_refptr<Layer> render_surface = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_2 = Layer::Create(); + + // Set up layer tree + root->AddChild(rounded_corner_layer_1); + rounded_corner_layer_1->AddChild(render_surface); + rounded_corner_layer_1->AddChild(rounded_corner_layer_2); + + // Set the root layer on host. + host()->SetRootLayer(root); + + // Set layer positions. + rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); + render_surface->SetPosition(gfx::PointF(0, 0)); + rounded_corner_layer_2->SetPosition(kRoundedCornerLayer2Bound.origin()); + + // Set up layer bounds. + root->SetBounds(gfx::Size(100, 100)); + rounded_corner_layer_1->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); + render_surface->SetBounds(gfx::Size(30, 30)); + rounded_corner_layer_2->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); + + // Set the layer properties + render_surface->SetForceRenderSurfaceForTesting(true); + + root->SetIsDrawable(true); + rounded_corner_layer_1->SetIsDrawable(true); + rounded_corner_layer_2->SetIsDrawable(true); + + // Set Rounded corners + rounded_corner_layer_1->SetRoundedCorner( + {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, + kRoundedCorner1Radius}); + rounded_corner_layer_2->SetRoundedCorner( + {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, + kRoundedCorner2Radius}); + + UpdateMainDrawProperties(kDeviceScale); + + // Since this effect node has 1 descendant with a rounded corner without a + // render surface along the chain, it need a render surface. + const EffectNode* effect_node = GetEffectNode(rounded_corner_layer_1.get()); + gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; + EXPECT_TRUE(effect_node->HasRenderSurface()); + EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), + kRoundedCorner1Radius); + EXPECT_EQ(rounded_corner_bounds_1.rect(), + gfx::RectF(kRoundedCornerLayer1Bound.size())); + + // Since this effect node has no descendants that draw and no descendant that + // has a rounded corner, it does not need a render surface. + effect_node = GetEffectNode(rounded_corner_layer_2.get()); + gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), + kRoundedCorner2Radius); + EXPECT_EQ(rounded_corner_bounds_2.rect(), + gfx::RectF(kRoundedCornerLayer2Bound.size())); + + CommitAndActivate(kDeviceScale); + LayerTreeImpl* layer_tree_impl = host_impl()->active_tree(); + + // Get the layer impl for each Layer. + LayerImpl* rounded_corner_layer_1_impl = + layer_tree_impl->LayerById(rounded_corner_layer_1->id()); + LayerImpl* rounded_corner_layer_2_impl = + layer_tree_impl->LayerById(rounded_corner_layer_2->id()); + + EXPECT_EQ(kDeviceScale, layer_tree_impl->device_scale_factor()); + + // Rounded corner layer 1 + // The render target for this layer is |root|, hence its target + // bounds are relative to |root|. + // The offset from the origin of the render target is [0, 60] and the device + // scale factor is 1.6 thus giving the target space origin of [0, 96]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_1 = + rounded_corner_layer_1_impl->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(actual_self_rrect_1.IsEmpty()); + + gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; + bounds_in_target_space.Scale(kDeviceScale); + const gfx::RRectF actual_render_target_rrect_1 = + rounded_corner_layer_1_impl->render_target()->rounded_corner_bounds(); + EXPECT_EQ(actual_render_target_rrect_1.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_render_target_rrect_1.GetSimpleRadius(), + kRoundedCorner1Radius * kDeviceScale); + + // Rounded corner layer 2 + // The render target for this layer is |render_surface|. + // The offset from the origin of the render target is [0, 0]. + const gfx::RRectF actual_rrect_2 = + rounded_corner_layer_2_impl->draw_properties().rounded_corner_bounds; + bounds_in_target_space = kRoundedCornerLayer2Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_rrect_2.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_rrect_2.GetSimpleRadius(), + kRoundedCorner2Radius * kDeviceScale); +} + +TEST_F(PropertyTreeBuilderTest, FastRoundedCornerDoesNotTriggerRenderSurface) { + // Layer Tree: + // +root + // +--fast rounded corner layer [should not trigger render surface] + // +----layer 1 + // +----layer 2 + // +--rounded corner layer [should trigger render surface] + // +----layer 3 + // +----layer 4 + + constexpr int kRoundedCorner1Radius = 2; + constexpr int kRoundedCorner2Radius = 5; + + constexpr gfx::RectF kRoundedCornerLayer1Bound(0.f, 0.f, 50.f, 50.f); + constexpr gfx::RectF kRoundedCornerLayer2Bound(40.f, 40.f, 60.f, 60.f); + + constexpr float kDeviceScale = 1.6f; + + scoped_refptr<Layer> root = Layer::Create(); + scoped_refptr<Layer> fast_rounded_corner_layer = Layer::Create(); + scoped_refptr<Layer> layer_1 = Layer::Create(); + scoped_refptr<Layer> layer_2 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer = Layer::Create(); + scoped_refptr<Layer> layer_3 = Layer::Create(); + scoped_refptr<Layer> layer_4 = Layer::Create(); + + // Set up layer tree + root->AddChild(fast_rounded_corner_layer); + root->AddChild(rounded_corner_layer); + + fast_rounded_corner_layer->AddChild(layer_1); + fast_rounded_corner_layer->AddChild(layer_2); + + rounded_corner_layer->AddChild(layer_3); + rounded_corner_layer->AddChild(layer_4); + + // Set the root layer on host. + host()->SetRootLayer(root); + + // Set layer positions. + fast_rounded_corner_layer->SetPosition(kRoundedCornerLayer1Bound.origin()); + layer_1->SetPosition(gfx::PointF(0.f, 0.f)); + layer_2->SetPosition(gfx::PointF(25.f, 0.f)); + rounded_corner_layer->SetPosition(kRoundedCornerLayer2Bound.origin()); + layer_3->SetPosition(gfx::PointF(0.f, 0.f)); + layer_4->SetPosition(gfx::PointF(30.f, 0.f)); + + // Set up layer bounds. + root->SetBounds(gfx::Size(100, 100)); + fast_rounded_corner_layer->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); + layer_1->SetBounds(gfx::Size(25, 25)); + layer_2->SetBounds(gfx::Size(25, 25)); + rounded_corner_layer->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); + layer_3->SetBounds(gfx::Size(30, 60)); + layer_4->SetBounds(gfx::Size(30, 60)); + + root->SetIsDrawable(true); + fast_rounded_corner_layer->SetIsDrawable(true); + layer_1->SetIsDrawable(true); + layer_2->SetIsDrawable(true); + rounded_corner_layer->SetIsDrawable(true); + layer_3->SetIsDrawable(true); + layer_4->SetIsDrawable(true); + + // Set Rounded corners + fast_rounded_corner_layer->SetRoundedCorner( + {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, + kRoundedCorner1Radius}); + rounded_corner_layer->SetRoundedCorner( + {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, + kRoundedCorner2Radius}); + + fast_rounded_corner_layer->SetIsFastRoundedCorner(true); + + UpdateMainDrawProperties(kDeviceScale); + + // Since this layer has a fast rounded corner, it should not have a render + // surface even though it has 2 layers in the subtree that draws content. + const EffectNode* effect_node = + GetEffectNode(fast_rounded_corner_layer.get()); + gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_TRUE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), + kRoundedCorner1Radius); + EXPECT_EQ(rounded_corner_bounds_1.rect(), + gfx::RectF(kRoundedCornerLayer1Bound.size())); + + // Since this node has 2 descendants that draw, it will have a rounded corner. + effect_node = GetEffectNode(rounded_corner_layer.get()); + gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; + EXPECT_TRUE(effect_node->HasRenderSurface()); + EXPECT_FALSE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), + kRoundedCorner2Radius); + EXPECT_EQ(rounded_corner_bounds_2.rect(), + gfx::RectF(kRoundedCornerLayer2Bound.size())); + + CommitAndActivate(kDeviceScale); + LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); + + // Get the layer impl for each Layer. + LayerImpl* fast_rounded_corner_layer_impl = + layer_tree_impl->LayerById(fast_rounded_corner_layer->id()); + LayerImpl* layer_1_impl = layer_tree_impl->LayerById(layer_1->id()); + LayerImpl* layer_2_impl = layer_tree_impl->LayerById(layer_2->id()); + LayerImpl* rounded_corner_layer_impl = + layer_tree_impl->LayerById(rounded_corner_layer->id()); + LayerImpl* layer_3_impl = layer_tree_impl->LayerById(layer_3->id()); + LayerImpl* layer_4_impl = layer_tree_impl->LayerById(layer_4->id()); + + EXPECT_EQ(kDeviceScale, layer_tree_impl->device_scale_factor()); + + // Fast rounded corner layer. + // The render target for this layer is |root|, hence its target bounds are + // relative to |root|. + // The offset from the origin of the render target is [0, 0] and the device + // scale factor is 1.6. + const gfx::RRectF actual_rrect_1 = + fast_rounded_corner_layer_impl->draw_properties().rounded_corner_bounds; + gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_rrect_1.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_rrect_1.GetSimpleRadius(), + kRoundedCorner1Radius * kDeviceScale); + + // Layer 1 and layer 2 rounded corner bounds + // This should have the same rounded corner boudns as fast rounded corner + // layer. + const gfx::RRectF layer_1_rrect = + layer_1_impl->draw_properties().rounded_corner_bounds; + const gfx::RRectF layer_2_rrect = + layer_2_impl->draw_properties().rounded_corner_bounds; + EXPECT_EQ(actual_rrect_1, layer_1_rrect); + EXPECT_EQ(actual_rrect_1, layer_2_rrect); + + // Rounded corner layer + // The render target for this layer is |root|. + // The offset from the origin of the render target is [40, 40] and the device + // scale factor is 1.6 thus giving the target space origin of [64, 64]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_2 = + rounded_corner_layer_impl->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(actual_self_rrect_2.IsEmpty()); + + bounds_in_target_space = kRoundedCornerLayer2Bound; + bounds_in_target_space.Scale(kDeviceScale); + const gfx::RRectF actual_render_target_rrect_2 = + rounded_corner_layer_impl->render_target()->rounded_corner_bounds(); + EXPECT_EQ(actual_render_target_rrect_2.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_render_target_rrect_2.GetSimpleRadius(), + kRoundedCorner2Radius * kDeviceScale); + + // Layer 3 and layer 4 should have no rounded corner bounds set as their + // parent is a render surface. + const gfx::RRectF layer_3_rrect = + layer_3_impl->draw_properties().rounded_corner_bounds; + const gfx::RRectF layer_4_rrect = + layer_4_impl->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(layer_3_rrect.IsEmpty()); + EXPECT_TRUE(layer_4_rrect.IsEmpty()); +} + +TEST_F(PropertyTreeBuilderTest, + FastRoundedCornerTriggersRenderSurfaceInAncestor) { + // Layer Tree: + // +root + // +--rounded corner layer [1] [should trigger render surface] + // +----fast rounded corner layer [2] [should not trigger render surface] + // +--rounded corner layer [3] [should trigger render surface] + // +----rounded corner layer [4] [should not trigger render surface] + + constexpr int kRoundedCorner1Radius = 2; + constexpr int kRoundedCorner2Radius = 5; + constexpr int kRoundedCorner3Radius = 1; + constexpr int kRoundedCorner4Radius = 3; + + constexpr gfx::RectF kRoundedCornerLayer1Bound(5.f, 5.f, 50.f, 50.f); + constexpr gfx::RectF kRoundedCornerLayer2Bound(0.f, 0.f, 25.f, 25.f); + constexpr gfx::RectF kRoundedCornerLayer3Bound(40.f, 40.f, 60.f, 60.f); + constexpr gfx::RectF kRoundedCornerLayer4Bound(30.f, 0.f, 30.f, 60.f); + + constexpr float kDeviceScale = 1.6f; + + scoped_refptr<Layer> root = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); + scoped_refptr<Layer> fast_rounded_corner_layer_2 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_3 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_4 = Layer::Create(); + + // Set up layer tree + root->AddChild(rounded_corner_layer_1); + root->AddChild(rounded_corner_layer_3); + + rounded_corner_layer_1->AddChild(fast_rounded_corner_layer_2); + + rounded_corner_layer_3->AddChild(rounded_corner_layer_4); + + // Set the root layer on host. + host()->SetRootLayer(root); + + // Set layer positions. + rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); + fast_rounded_corner_layer_2->SetPosition(kRoundedCornerLayer2Bound.origin()); + rounded_corner_layer_3->SetPosition(kRoundedCornerLayer3Bound.origin()); + rounded_corner_layer_4->SetPosition(kRoundedCornerLayer4Bound.origin()); + + // Set up layer bounds. + root->SetBounds(gfx::Size(100, 100)); + rounded_corner_layer_1->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); + fast_rounded_corner_layer_2->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); + rounded_corner_layer_3->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer3Bound.size())); + rounded_corner_layer_4->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer4Bound.size())); + + root->SetIsDrawable(true); + rounded_corner_layer_1->SetIsDrawable(true); + fast_rounded_corner_layer_2->SetIsDrawable(true); + rounded_corner_layer_3->SetIsDrawable(true); + rounded_corner_layer_4->SetIsDrawable(true); + + // Set Rounded corners + rounded_corner_layer_1->SetRoundedCorner( + {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, + kRoundedCorner1Radius}); + fast_rounded_corner_layer_2->SetRoundedCorner( + {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, + kRoundedCorner2Radius}); + rounded_corner_layer_3->SetRoundedCorner( + {kRoundedCorner3Radius, kRoundedCorner3Radius, kRoundedCorner3Radius, + kRoundedCorner3Radius}); + rounded_corner_layer_4->SetRoundedCorner( + {kRoundedCorner4Radius, kRoundedCorner4Radius, kRoundedCorner4Radius, + kRoundedCorner4Radius}); + + fast_rounded_corner_layer_2->SetIsFastRoundedCorner(true); + + UpdateMainDrawProperties(kDeviceScale); + + // Since this layer has a descendant that has rounded corner, this node will + // require a render surface. + const EffectNode* effect_node = GetEffectNode(rounded_corner_layer_1.get()); + gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; + EXPECT_TRUE(effect_node->HasRenderSurface()); + EXPECT_FALSE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), + kRoundedCorner1Radius); + EXPECT_EQ(rounded_corner_bounds_1.rect(), + gfx::RectF(kRoundedCornerLayer1Bound.size())); + + // Since this layer has no descendant with rounded corner or drawable, it will + // not have a render surface. + effect_node = GetEffectNode(fast_rounded_corner_layer_2.get()); + gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_TRUE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), + kRoundedCorner2Radius); + EXPECT_EQ(rounded_corner_bounds_2.rect(), + gfx::RectF(kRoundedCornerLayer2Bound.size())); + + // Since this layer has 1 descendant with a rounded corner, it should have a + // render surface. + effect_node = GetEffectNode(rounded_corner_layer_3.get()); + gfx::RRectF rounded_corner_bounds_3 = effect_node->rounded_corner_bounds; + EXPECT_TRUE(effect_node->HasRenderSurface()); + EXPECT_FALSE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_3.GetSimpleRadius(), + kRoundedCorner3Radius); + EXPECT_EQ(rounded_corner_bounds_3.rect(), + gfx::RectF(kRoundedCornerLayer3Bound.size())); + + // Since this layer no descendants, it would no thave a render pass. + effect_node = GetEffectNode(rounded_corner_layer_4.get()); + gfx::RRectF rounded_corner_bounds_4 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_FALSE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_4.GetSimpleRadius(), + kRoundedCorner4Radius); + EXPECT_EQ(rounded_corner_bounds_4.rect(), + gfx::RectF(kRoundedCornerLayer4Bound.size())); + + CommitAndActivate(kDeviceScale); + LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); + + // Get the layer impl for each Layer. + LayerImpl* rounded_corner_layer_impl_1 = + layer_tree_impl->LayerById(rounded_corner_layer_1->id()); + LayerImpl* fast_rounded_corner_layer_impl_2 = + layer_tree_impl->LayerById(fast_rounded_corner_layer_2->id()); + LayerImpl* rounded_corner_layer_impl_3 = + layer_tree_impl->LayerById(rounded_corner_layer_3->id()); + LayerImpl* rounded_corner_layer_impl_4 = + layer_tree_impl->LayerById(rounded_corner_layer_4->id()); + + EXPECT_EQ(kDeviceScale, layer_tree_impl->device_scale_factor()); + + // Rounded corner layer 1. + // The render target for this layer is |root|, hence its target bounds are + // relative to |root|. + // The offset from the origin of the render target is [5, 5] and the device + // scale factor is 1.6 giving a total offset of [8, 8]. + const gfx::RRectF actual_self_rrect_1 = + rounded_corner_layer_impl_1->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(actual_self_rrect_1.IsEmpty()); + + gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; + bounds_in_target_space.Scale(kDeviceScale); + const gfx::RRectF actual_render_target_rrect_1 = + rounded_corner_layer_impl_1->render_target()->rounded_corner_bounds(); + EXPECT_EQ(actual_render_target_rrect_1.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_render_target_rrect_1.GetSimpleRadius(), + kRoundedCorner1Radius * kDeviceScale); + + // Fast rounded corner layer 2 + // The render target for this layer is |rounded_corner_layer_1|. + // The offset from the origin of the render target is [0, 0] and the device + // scale factor is 1.6. The corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_2 = + fast_rounded_corner_layer_impl_2->draw_properties().rounded_corner_bounds; + bounds_in_target_space = kRoundedCornerLayer2Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_self_rrect_2.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_self_rrect_2.GetSimpleRadius(), + kRoundedCorner2Radius * kDeviceScale); + + // Rounded corner layer 3 + // The render target for this layer is |root|. + // The offset from the origin of the render target is [40, 40] and the device + // scale factor is 1.6 thus giving the target space origin of [64, 64]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_3 = + rounded_corner_layer_impl_3->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(actual_self_rrect_3.IsEmpty()); + + bounds_in_target_space = kRoundedCornerLayer3Bound; + bounds_in_target_space.Scale(kDeviceScale); + const gfx::RRectF actual_render_target_rrect_3 = + rounded_corner_layer_impl_3->render_target()->rounded_corner_bounds(); + EXPECT_EQ(actual_render_target_rrect_3.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_render_target_rrect_3.GetSimpleRadius(), + kRoundedCorner3Radius * kDeviceScale); + + // Rounded corner layer 4 + // The render target for this layer is |rounded_corner_layer_3|. + // The offset from the origin of the render target is [30, 0] and the device + // scale factor is 1.6 thus giving the target space origin of [48, 0]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_4 = + rounded_corner_layer_impl_4->draw_properties().rounded_corner_bounds; + bounds_in_target_space = kRoundedCornerLayer4Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_self_rrect_4.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_self_rrect_4.GetSimpleRadius(), + kRoundedCorner4Radius * kDeviceScale); +} + +TEST_F(PropertyTreeBuilderTest, + FastRoundedCornerDoesNotTriggerRenderSurfaceFromSubtree) { + // Layer Tree: + // +root + // +--fast rounded corner layer 1 [should trigger render surface] + // +----rounded corner layer 1 [should not trigger render surface] + // +--rounded corner layer 2 [should trigger render surface] + // +----rounded corner layer 3 [should not trigger render surface] + constexpr int kRoundedCorner1Radius = 2; + constexpr int kRoundedCorner2Radius = 5; + constexpr int kRoundedCorner3Radius = 4; + constexpr int kRoundedCorner4Radius = 5; + + constexpr gfx::RectF kRoundedCornerLayer1Bound(10.f, 5.f, 45.f, 50.f); + constexpr gfx::RectF kRoundedCornerLayer2Bound(5.f, 5.f, 20.f, 20.f); + constexpr gfx::RectF kRoundedCornerLayer3Bound(60.f, 5.f, 40.f, 25.f); + constexpr gfx::RectF kRoundedCornerLayer4Bound(0.f, 10.f, 10.f, 20.f); + + constexpr float kDeviceScale = 1.6f; + + scoped_refptr<Layer> root = Layer::Create(); + scoped_refptr<Layer> fast_rounded_corner_layer_1 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_1 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_2 = Layer::Create(); + scoped_refptr<Layer> rounded_corner_layer_3 = Layer::Create(); + + // Set up layer tree + root->AddChild(fast_rounded_corner_layer_1); + root->AddChild(rounded_corner_layer_2); + + fast_rounded_corner_layer_1->AddChild(rounded_corner_layer_1); + rounded_corner_layer_2->AddChild(rounded_corner_layer_3); + + // Set the root layer on host. + host()->SetRootLayer(root); + + // Set layer positions. + fast_rounded_corner_layer_1->SetPosition(kRoundedCornerLayer1Bound.origin()); + rounded_corner_layer_1->SetPosition(kRoundedCornerLayer2Bound.origin()); + rounded_corner_layer_2->SetPosition(kRoundedCornerLayer3Bound.origin()); + rounded_corner_layer_3->SetPosition(kRoundedCornerLayer4Bound.origin()); + + // Set up layer bounds. + root->SetBounds(gfx::Size(100, 100)); + fast_rounded_corner_layer_1->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer1Bound.size())); + rounded_corner_layer_1->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer2Bound.size())); + rounded_corner_layer_2->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer3Bound.size())); + rounded_corner_layer_3->SetBounds( + gfx::ToRoundedSize(kRoundedCornerLayer4Bound.size())); + + root->SetIsDrawable(true); + fast_rounded_corner_layer_1->SetIsDrawable(true); + rounded_corner_layer_1->SetIsDrawable(true); + rounded_corner_layer_2->SetIsDrawable(true); + rounded_corner_layer_3->SetIsDrawable(true); + + // Set Rounded corners + fast_rounded_corner_layer_1->SetRoundedCorner( + {kRoundedCorner1Radius, kRoundedCorner1Radius, kRoundedCorner1Radius, + kRoundedCorner1Radius}); + rounded_corner_layer_1->SetRoundedCorner( + {kRoundedCorner2Radius, kRoundedCorner2Radius, kRoundedCorner2Radius, + kRoundedCorner2Radius}); + rounded_corner_layer_2->SetRoundedCorner( + {kRoundedCorner3Radius, kRoundedCorner3Radius, kRoundedCorner3Radius, + kRoundedCorner3Radius}); + rounded_corner_layer_3->SetRoundedCorner( + {kRoundedCorner4Radius, kRoundedCorner4Radius, kRoundedCorner4Radius, + kRoundedCorner4Radius}); + + fast_rounded_corner_layer_1->SetIsFastRoundedCorner(true); + + UpdateMainDrawProperties(kDeviceScale); + + // Since this layer has a descendant with rounded corner, it needs a render + // surface. + const EffectNode* effect_node = + GetEffectNode(fast_rounded_corner_layer_1.get()); + gfx::RRectF rounded_corner_bounds_1 = effect_node->rounded_corner_bounds; + EXPECT_TRUE(effect_node->HasRenderSurface()); + EXPECT_TRUE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_1.GetSimpleRadius(), + kRoundedCorner1Radius); + EXPECT_EQ(rounded_corner_bounds_1.rect(), + gfx::RectF(kRoundedCornerLayer1Bound.size())); + + // Since this layer has no descendant with rounded corner or drawable, it will + // not have a render surface. + effect_node = GetEffectNode(rounded_corner_layer_1.get()); + gfx::RRectF rounded_corner_bounds_2 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_FALSE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_2.GetSimpleRadius(), + kRoundedCorner2Radius); + EXPECT_EQ(rounded_corner_bounds_2.rect(), + gfx::RectF(kRoundedCornerLayer2Bound.size())); + + // Since this layer has a descendant with rounded corner, it should have a + // render surface. + effect_node = GetEffectNode(rounded_corner_layer_2.get()); + gfx::RRectF rounded_corner_bounds_3 = effect_node->rounded_corner_bounds; + EXPECT_TRUE(effect_node->HasRenderSurface()); + EXPECT_FALSE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_3.GetSimpleRadius(), + kRoundedCorner3Radius); + EXPECT_EQ(rounded_corner_bounds_3.rect(), + gfx::RectF(kRoundedCornerLayer3Bound.size())); + + // Since this layer has no descendant, it does not need a render surface. + effect_node = GetEffectNode(rounded_corner_layer_3.get()); + gfx::RRectF rounded_corner_bounds_4 = effect_node->rounded_corner_bounds; + EXPECT_FALSE(effect_node->HasRenderSurface()); + EXPECT_FALSE(effect_node->is_fast_rounded_corner); + EXPECT_FLOAT_EQ(rounded_corner_bounds_4.GetSimpleRadius(), + kRoundedCorner4Radius); + EXPECT_EQ(rounded_corner_bounds_4.rect(), + gfx::RectF(kRoundedCornerLayer4Bound.size())); + + CommitAndActivate(kDeviceScale); + LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree(); + + // Get the layer impl for each Layer. + LayerImpl* fast_rounded_corner_layer_impl_1 = + layer_tree_impl->LayerById(fast_rounded_corner_layer_1->id()); + LayerImpl* rounded_corner_layer_impl_1 = + layer_tree_impl->LayerById(rounded_corner_layer_1->id()); + LayerImpl* rounded_corner_layer_impl_2 = + layer_tree_impl->LayerById(rounded_corner_layer_2->id()); + LayerImpl* rounded_corner_layer_impl_3 = + layer_tree_impl->LayerById(rounded_corner_layer_3->id()); + + EXPECT_EQ(kDeviceScale, layer_tree_impl->device_scale_factor()); + + // Fast rounded corner layer 1. + // The render target for this layer is |root|, hence its target bounds are + // relative to |root|. + // The offset from the origin of the render target is [5, 5] and the device + // scale factor is 1.6. + const gfx::RRectF actual_self_rrect_1 = + fast_rounded_corner_layer_impl_1->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(actual_self_rrect_1.IsEmpty()); + + gfx::RectF bounds_in_target_space = kRoundedCornerLayer1Bound; + bounds_in_target_space.Scale(kDeviceScale); + const gfx::RRectF actual_render_target_rrect_1 = + fast_rounded_corner_layer_impl_1->render_target() + ->rounded_corner_bounds(); + EXPECT_EQ(actual_render_target_rrect_1.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_render_target_rrect_1.GetSimpleRadius(), + kRoundedCorner1Radius * kDeviceScale); + + // Rounded corner layer 1 + // The render target for this layer is |fast_rounded_corner_layer_1|. + // The offset from the origin of the render target is [0, 0] and the device + // scale factor is 1.6. The corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_2 = + rounded_corner_layer_impl_1->draw_properties().rounded_corner_bounds; + bounds_in_target_space = kRoundedCornerLayer2Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_self_rrect_2.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_self_rrect_2.GetSimpleRadius(), + kRoundedCorner2Radius * kDeviceScale); + + // Rounded corner layer 3 + // The render target for this layer is |root|. + // The offset from the origin of the render target is [5, 5] and the device + // scale factor is 1.6 thus giving the target space origin of [8, 8]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_3 = + rounded_corner_layer_impl_2->draw_properties().rounded_corner_bounds; + EXPECT_TRUE(actual_self_rrect_3.IsEmpty()); + + bounds_in_target_space = kRoundedCornerLayer3Bound; + bounds_in_target_space.Scale(kDeviceScale); + const gfx::RRectF actual_render_target_rrect_3 = + rounded_corner_layer_impl_2->render_target()->rounded_corner_bounds(); + EXPECT_EQ(actual_render_target_rrect_3.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_render_target_rrect_3.GetSimpleRadius(), + kRoundedCorner3Radius * kDeviceScale); + + // Rounded corner layer 4 + // The render target for this layer is |rounded_corner_layer_2|. + // The offset from the origin of the render target is [0, 5] and the device + // scale factor is 1.6 thus giving the target space origin of [0, 8]. The + // corner radius is also scaled by a factor of 1.6. + const gfx::RRectF actual_self_rrect_4 = + rounded_corner_layer_impl_3->draw_properties().rounded_corner_bounds; + bounds_in_target_space = kRoundedCornerLayer4Bound; + bounds_in_target_space.Scale(kDeviceScale); + EXPECT_EQ(actual_self_rrect_4.rect(), bounds_in_target_space); + EXPECT_FLOAT_EQ(actual_self_rrect_4.GetSimpleRadius(), + kRoundedCorner4Radius * kDeviceScale); +} + +} // namespace +} // namespace cc
diff --git a/cc/trees/proxy_common.cc b/cc/trees/proxy_common.cc index f80fd35..a04796a 100644 --- a/cc/trees/proxy_common.cc +++ b/cc/trees/proxy_common.cc
@@ -5,6 +5,7 @@ #include "cc/trees/proxy_common.h" #include "cc/trees/layer_tree_host.h" +#include "cc/trees/scroll_and_scale_set.h" namespace cc {
diff --git a/cc/trees/proxy_common.h b/cc/trees/proxy_common.h index e4de8308..3d363b2 100644 --- a/cc/trees/proxy_common.h +++ b/cc/trees/proxy_common.h
@@ -9,11 +9,12 @@ #include "base/callback_forward.h" #include "cc/cc_export.h" -#include "cc/trees/layer_tree_host_common.h" #include "components/viz/common/frame_sinks/begin_frame_args.h" namespace cc { +struct ScrollAndScaleSet; + struct CC_EXPORT BeginMainFrameAndCommitState { BeginMainFrameAndCommitState(); ~BeginMainFrameAndCommitState();
diff --git a/cc/trees/proxy_impl.cc b/cc/trees/proxy_impl.cc index 636f21d..6a63c04f 100644 --- a/cc/trees/proxy_impl.cc +++ b/cc/trees/proxy_impl.cc
@@ -24,6 +24,7 @@ #include "cc/trees/mutator_host.h" #include "cc/trees/proxy_main.h" #include "cc/trees/render_frame_metadata_observer.h" +#include "cc/trees/scroll_and_scale_set.h" #include "cc/trees/task_runner_provider.h" #include "components/viz/common/frame_sinks/delay_based_time_source.h" #include "components/viz/common/frame_timing_details.h"
diff --git a/cc/trees/proxy_main.h b/cc/trees/proxy_main.h index 515f1e1..cfef4ce 100644 --- a/cc/trees/proxy_main.h +++ b/cc/trees/proxy_main.h
@@ -7,6 +7,7 @@ #include "cc/cc_export.h" #include "cc/input/browser_controls_state.h" +#include "cc/trees/layer_tree_host.h" #include "cc/trees/proxy.h" #include "cc/trees/proxy_common.h"
diff --git a/cc/trees/scroll_and_scale_set.cc b/cc/trees/scroll_and_scale_set.cc new file mode 100644 index 0000000..e2d08c83 --- /dev/null +++ b/cc/trees/scroll_and_scale_set.cc
@@ -0,0 +1,22 @@ +// Copyright 2011 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 "cc/trees/scroll_and_scale_set.h" + +#include "cc/trees/swap_promise.h" + +namespace cc { + +ScrollAndScaleSet::ScrollAndScaleSet() + : page_scale_delta(1.f), + is_pinch_gesture_active(false), + top_controls_delta(0.f), + browser_controls_constraint(BrowserControlsState::kBoth), + browser_controls_constraint_changed(false), + scroll_gesture_did_end(false), + manipulation_info(kManipulationInfoNone) {} + +ScrollAndScaleSet::~ScrollAndScaleSet() = default; + +} // namespace cc
diff --git a/cc/trees/scroll_and_scale_set.h b/cc/trees/scroll_and_scale_set.h new file mode 100644 index 0000000..41687918 --- /dev/null +++ b/cc/trees/scroll_and_scale_set.h
@@ -0,0 +1,93 @@ +// Copyright 2011 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 CC_TREES_SCROLL_AND_SCALE_SET_H_ +#define CC_TREES_SCROLL_AND_SCALE_SET_H_ + +#include <vector> + +#include "cc/cc_export.h" +#include "cc/input/browser_controls_state.h" +#include "cc/paint/element_id.h" +#include "cc/trees/layer_tree_host_client.h" +#include "ui/gfx/geometry/scroll_offset.h" +#include "ui/gfx/geometry/vector2d.h" +#include "ui/gfx/transform.h" + +namespace cc { + +class SwapPromise; + +struct CC_EXPORT ScrollAndScaleSet { + ScrollAndScaleSet(); + ScrollAndScaleSet(const ScrollAndScaleSet&) = delete; + ~ScrollAndScaleSet(); + + ScrollAndScaleSet& operator=(const ScrollAndScaleSet&) = delete; + + struct CC_EXPORT ScrollUpdateInfo { + ElementId element_id; + gfx::ScrollOffset scroll_delta; + + bool operator==(const ScrollUpdateInfo& other) const { + return element_id == other.element_id && + scroll_delta == other.scroll_delta; + } + }; + + // The inner viewport scroll delta is kept separate since it's special. + // Because the inner (visual) viewport's maximum offset depends on the + // current page scale, the two must be committed at the same time to prevent + // clamping. + ScrollUpdateInfo inner_viewport_scroll; + + std::vector<ScrollUpdateInfo> scrolls; + float page_scale_delta; + bool is_pinch_gesture_active; + + // Elastic overscroll effect offset delta. This is used only on Mac and shows + // the pixels that the page is rubber-banned/stretched by. + gfx::Vector2dF elastic_overscroll_delta; + + // Unconsumed scroll delta used to send overscroll events to the latched + // element on the main thread; + gfx::Vector2dF overscroll_delta; + + // The element id of the node to which scrolling is latched. This is used to + // send overscroll/scrollend DOM events to proper targets whenever needed. + ElementId scroll_latched_element_id; + + float top_controls_delta; + + // Used to communicate scrollbar visibility from Impl thread to Blink. + // Scrollbar input is handled by Blink but the compositor thread animates + // opacity on scrollbars to fade them out when they're overlay. Blink needs + // to be told when they're faded out so it can stop handling input for + // invisible scrollbars. + struct CC_EXPORT ScrollbarsUpdateInfo { + ElementId element_id; + bool hidden = true; + + bool operator==(const ScrollbarsUpdateInfo& other) const { + return element_id == other.element_id && hidden == other.hidden; + } + }; + std::vector<ScrollbarsUpdateInfo> scrollbars; + + std::vector<std::unique_ptr<SwapPromise>> swap_promises; + BrowserControlsState browser_controls_constraint; + bool browser_controls_constraint_changed; + + // Set to true when a scroll gesture being handled on the compositor has + // ended. + bool scroll_gesture_did_end; + + // Tracks different methods of scrolling (e.g. wheel, touch, precision + // touchpad, etc.). + ManipulationInfo manipulation_info; +}; + +} // namespace cc + +#endif // CC_TREES_SCROLL_AND_SCALE_SET_H_
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc index 11d8044..1df41a6 100644 --- a/cc/trees/single_thread_proxy.cc +++ b/cc/trees/single_thread_proxy.cc
@@ -19,12 +19,12 @@ #include "cc/trees/latency_info_swap_promise.h" #include "cc/trees/layer_tree_frame_sink.h" #include "cc/trees/layer_tree_host.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_host_single_thread_client.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/mutator_host.h" #include "cc/trees/render_frame_metadata_observer.h" #include "cc/trees/scoped_abort_remaining_swap_promises.h" +#include "cc/trees/scroll_and_scale_set.h" #include "components/viz/common/frame_sinks/delay_based_time_source.h" #include "components/viz/common/frame_timing_details.h" #include "components/viz/common/gpu/context_provider.h"
diff --git a/cc/trees/tree_synchronizer_unittest.cc b/cc/trees/tree_synchronizer_unittest.cc index b383409..5f1a8f09 100644 --- a/cc/trees/tree_synchronizer_unittest.cc +++ b/cc/trees/tree_synchronizer_unittest.cc
@@ -27,7 +27,7 @@ #include "cc/test/stub_layer_tree_host_single_thread_client.h" #include "cc/test/test_task_graph_runner.h" #include "cc/trees/effect_node.h" -#include "cc/trees/layer_tree_host_common.h" +#include "cc/trees/scroll_and_scale_set.h" #include "cc/trees/scroll_node.h" #include "cc/trees/single_thread_proxy.h" #include "cc/trees/task_runner_provider.h" @@ -140,7 +140,7 @@ host_impl->ActivateSyncTree(); ExpectTreesAreIdentical(layer_tree_root.get(), - host_impl->active_tree()->root_layer_for_testing(), + host_impl->active_tree()->root_layer(), host_impl->active_tree()); return scroll_layer; @@ -165,7 +165,7 @@ TEST_F(TreeSynchronizerTest, SyncNullTree) { TreeSynchronizer::SynchronizeTrees(static_cast<Layer*>(nullptr), host_->pending_tree()); - EXPECT_TRUE(!host_->pending_tree()->root_layer_for_testing()); + EXPECT_TRUE(!host_->pending_tree()->root_layer()); } // Constructs a very simple tree and synchronizes it without trying to reuse any @@ -181,12 +181,12 @@ TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), host_->pending_tree()); - LayerImpl* root = host_->pending_tree()->root_layer_for_testing(); + LayerImpl* root = host_->pending_tree()->root_layer(); EXPECT_TRUE(base::Contains( host_->pending_tree()->LayersThatShouldPushProperties(), root)); ExpectTreesAreIdentical(layer_tree_root.get(), - host_->pending_tree()->root_layer_for_testing(), + host_->pending_tree()->root_layer(), host_->pending_tree()); } @@ -207,12 +207,12 @@ // First time the main thread layers are synced to pending tree, and all the // layers are created on pending tree and they all need to push properties to // active tree. - LayerImpl* root = host_->pending_tree()->root_layer_for_testing(); + LayerImpl* root = host_->pending_tree()->root_layer(); EXPECT_TRUE(base::Contains( host_->pending_tree()->LayersThatShouldPushProperties(), root)); ExpectTreesAreIdentical(layer_tree_root.get(), - host_->pending_tree()->root_layer_for_testing(), + host_->pending_tree()->root_layer(), host_->pending_tree()); // Push properties to make pending tree have valid property tree index. @@ -257,8 +257,7 @@ TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), host_->pending_tree()); - LayerImpl* layer_impl_tree_root = - host_->pending_tree()->root_layer_for_testing(); + LayerImpl* layer_impl_tree_root = host_->pending_tree()->root_layer(); EXPECT_TRUE( base::Contains(host_->pending_tree()->LayersThatShouldPushProperties(), layer_impl_tree_root)); @@ -281,7 +280,7 @@ host_->BuildPropertyTreesForTesting(); TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), host_->pending_tree()); - layer_impl_tree_root = host_->pending_tree()->root_layer_for_testing(); + layer_impl_tree_root = host_->pending_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->pending_tree()); @@ -312,8 +311,7 @@ host_->BuildPropertyTreesForTesting(); TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), host_->active_tree()); - LayerImpl* layer_impl_tree_root = - host_->active_tree()->root_layer_for_testing(); + LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -329,7 +327,7 @@ host_->BuildPropertyTreesForTesting(); TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), host_->active_tree()); - layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); + layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -372,8 +370,7 @@ host_->BuildPropertyTreesForTesting(); TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), host_->active_tree()); - LayerImpl* layer_impl_tree_root = - host_->active_tree()->root_layer_for_testing(); + LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -420,8 +417,7 @@ TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), host_->active_tree()); - LayerImpl* layer_impl_tree_root = - host_->active_tree()->root_layer_for_testing(); + LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -448,7 +444,7 @@ host_->BuildPropertyTreesForTesting(); TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), host_->active_tree()); - layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); + layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -478,8 +474,7 @@ host_->BuildPropertyTreesForTesting(); TreeSynchronizer::SynchronizeTrees(old_layer_tree_root.get(), host_->active_tree()); - LayerImpl* layer_impl_tree_root = - host_->active_tree()->root_layer_for_testing(); + LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(old_layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -498,7 +493,7 @@ host_->BuildPropertyTreesForTesting(); TreeSynchronizer::SynchronizeTrees(new_layer_tree_root.get(), host_->active_tree()); - layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); + layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(new_layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -528,8 +523,7 @@ host_->BuildPropertyTreesForTesting(); host_->CommitAndCreateLayerImplTree(); - LayerImpl* layer_impl_tree_root = - host_->active_tree()->root_layer_for_testing(); + LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -538,15 +532,15 @@ host_->BuildPropertyTreesForTesting(); host_->CommitAndCreateLayerImplTree(); - layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); + layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); - layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); + layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); - layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); + layer_impl_tree_root = host_->active_tree()->root_layer(); ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, host_->active_tree()); @@ -579,7 +573,7 @@ host_impl->ActivateSyncTree(); ExpectTreesAreIdentical(layer_tree_root.get(), - host_impl->active_tree()->root_layer_for_testing(), + host_impl->active_tree()->root_layer(), host_impl->active_tree()); ScrollNode* scroll_node = @@ -631,7 +625,7 @@ host_impl->ActivateSyncTree(); ExpectTreesAreIdentical(layer_tree_root.get(), - host_impl->active_tree()->root_layer_for_testing(), + host_impl->active_tree()->root_layer(), host_impl->active_tree()); // After the initial commit, scroll_offset_map in scroll_tree is expected to
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index d847d9e..649763c 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -1770,11 +1770,9 @@ } } +# Public webview targets don't work with non-public sdks. +# https://crbug.com/1000763 if (public_android_sdk) { - # Can't defined monochrome_public_apk without public_android_sdk or else the - # shared_resources_whitelist_target will not be applied, and R8 -checkdiscards - # will fail. - # https://crbug.com/1000763 monochrome_public_apk_or_module_tmpl("monochrome_public_apk") { version_code = monochrome_version_code version_name = chrome_version_name @@ -2134,6 +2132,8 @@ android_test_apk_name = "ChromeSmokeTest" } +# Public webview targets don't work with non-public sdks. +# https://crbug.com/1000763 if (public_android_sdk) { instrumentation_test_runner("monochrome_public_smoke_test") { apk_under_test = ":monochrome_public_apk" @@ -2183,35 +2183,39 @@ extra_args = _bundle_smoke_test_extra_args } -instrumentation_test_runner("monochrome_public_bundle_smoke_test") { - apk_under_test = "//chrome/android:monochrome_public_bundle_apks" - android_test_apk = ":chrome_bundle_smoke_test_apk" - android_test_apk_name = "ChromeBundleSmokeTest" - never_incremental = true - modules = [ "test_dummy" ] - extra_args = _bundle_smoke_test_extra_args -} +# Public webview targets don't work with non-public sdks. +# https://crbug.com/1000763 +if (public_android_sdk) { + instrumentation_test_runner("monochrome_public_bundle_smoke_test") { + apk_under_test = "//chrome/android:monochrome_public_bundle_apks" + android_test_apk = ":chrome_bundle_smoke_test_apk" + android_test_apk_name = "ChromeBundleSmokeTest" + never_incremental = true + modules = [ "test_dummy" ] + extra_args = _bundle_smoke_test_extra_args + } -if (public_android_sdk && defined(expected_static_initializer_count)) { - action_with_pydeps("monochrome_static_initializers") { - script = "//build/android/gyp/assert_static_initializers.py" - inputs = [ - "$root_build_dir/apks/MonochromePublic.apk", - ] - outputs = [ - "$target_gen_dir/$target_name.stamp", - ] - deps = [ - ":monochrome_public_apk", - ] - args = [ - "--expected-count=$expected_static_initializer_count", - "--tool-prefix", - rebase_path(android_tool_prefix, root_build_dir), - "--touch", - rebase_path(outputs[0], root_build_dir), - rebase_path(inputs[0], root_build_dir), - ] + if (defined(expected_static_initializer_count)) { + action_with_pydeps("monochrome_static_initializers") { + script = "//build/android/gyp/assert_static_initializers.py" + inputs = [ + "$root_build_dir/apks/MonochromePublic.apk", + ] + outputs = [ + "$target_gen_dir/$target_name.stamp", + ] + deps = [ + ":monochrome_public_apk", + ] + args = [ + "--expected-count=$expected_static_initializer_count", + "--tool-prefix", + rebase_path(android_tool_prefix, root_build_dir), + "--touch", + rebase_path(outputs[0], root_build_dir), + rebase_path(inputs[0], root_build_dir), + ] + } } } @@ -2331,70 +2335,77 @@ } } -monochrome_or_trichrome_public_bundle_tmpl("monochrome_public_bundle") { - bundle_suffix = "" +# Public webview targets don't work with non-public sdks. +# https://crbug.com/1000763 +if (public_android_sdk) { + monochrome_or_trichrome_public_bundle_tmpl("monochrome_public_bundle") { + bundle_suffix = "" - # Having //clank present causes different flags because of how play services - # is wired up. - # The channel is required because manifest entries vary based on channel. - if (!enable_chrome_android_internal && android_channel == "stable") { - verify_android_configuration = true - } -} - -if (is_official_build) { - # Used for binary size monitoring. - create_app_bundle_minimal_apks("monochrome_public_minimal_apks") { - deps = [ - ":monochrome_public_bundle", - ] - bundle_path = "$root_build_dir/apks/MonochromePublic.aab" - } - android_resource_sizes_test("resource_sizes_monochrome_public_minimal_apks") { - file_path = "$root_build_dir/apks/MonochromePublic.minimal.apks" - data_deps = [ - ":monochrome_public_minimal_apks", - ] - } -} - -monochrome_or_trichrome_public_bundle_tmpl("trichrome_chrome_bundle") { - bundle_suffix = "" - use_trichrome_library = true -} - -if (android_64bit_target_cpu) { - monochrome_or_trichrome_public_bundle_tmpl("monochrome_64_public_bundle") { - bundle_suffix = "64" - is_64_bit_browser = true - if (build_apk_secondary_abi) { - include_32_bit_webview = false + # Having //clank present causes different flags because of how play services + # is wired up. + # The channel is required because manifest entries vary based on channel. + if (!enable_chrome_android_internal && android_channel == "stable") { + verify_android_configuration = true } } - monochrome_or_trichrome_public_bundle_tmpl("monochrome_64_32_public_bundle") { - bundle_suffix = "6432" - is_64_bit_browser = true - if (build_apk_secondary_abi) { - include_32_bit_webview = true + if (is_official_build) { + # Used for binary size monitoring. + create_app_bundle_minimal_apks("monochrome_public_minimal_apks") { + deps = [ + ":monochrome_public_bundle", + ] + bundle_path = "$root_build_dir/apks/MonochromePublic.aab" + } + android_resource_sizes_test( + "resource_sizes_monochrome_public_minimal_apks") { + file_path = "$root_build_dir/apks/MonochromePublic.minimal.apks" + data_deps = [ + ":monochrome_public_minimal_apks", + ] } } - monochrome_or_trichrome_public_bundle_tmpl("trichrome_chrome_64_bundle") { - bundle_suffix = "64" - is_64_bit_browser = true + monochrome_or_trichrome_public_bundle_tmpl("trichrome_chrome_bundle") { + bundle_suffix = "" use_trichrome_library = true - if (build_apk_secondary_abi) { - include_32_bit_webview = false - } } - monochrome_or_trichrome_public_bundle_tmpl("trichrome_chrome_64_32_bundle") { - bundle_suffix = "6432" - is_64_bit_browser = true - use_trichrome_library = true - if (build_apk_secondary_abi) { - include_32_bit_webview = true + if (android_64bit_target_cpu) { + monochrome_or_trichrome_public_bundle_tmpl("monochrome_64_public_bundle") { + bundle_suffix = "64" + is_64_bit_browser = true + if (build_apk_secondary_abi) { + include_32_bit_webview = false + } + } + + monochrome_or_trichrome_public_bundle_tmpl( + "monochrome_64_32_public_bundle") { + bundle_suffix = "6432" + is_64_bit_browser = true + if (build_apk_secondary_abi) { + include_32_bit_webview = true + } + } + + monochrome_or_trichrome_public_bundle_tmpl("trichrome_chrome_64_bundle") { + bundle_suffix = "64" + is_64_bit_browser = true + use_trichrome_library = true + if (build_apk_secondary_abi) { + include_32_bit_webview = false + } + } + + monochrome_or_trichrome_public_bundle_tmpl( + "trichrome_chrome_64_32_bundle") { + bundle_suffix = "6432" + is_64_bit_browser = true + use_trichrome_library = true + if (build_apk_secondary_abi) { + include_32_bit_webview = true + } } } }
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java index 70ab0918..c2c0ec8 100644 --- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java +++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java
@@ -106,6 +106,12 @@ mTabNumCap = 0; } assertTrue(FeatureUtilities.isTabToGtsAnimationEnabled()); + + CriteriaHelper.pollUiThread(Criteria.equals(true, + mActivityTestRule.getActivity() + .getTabModelSelector() + .getTabModelFilterProvider() + .getCurrentTabModelFilter()::isTabModelRestored)); } @Test
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java index 4501645..724e0576 100644 --- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java +++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
@@ -4,6 +4,10 @@ package org.chromium.chrome.features.start_surface; +import static android.support.test.espresso.Espresso.onView; +import static android.support.test.espresso.action.ViewActions.click; +import static android.support.test.espresso.matcher.ViewMatchers.withId; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; @@ -17,15 +21,16 @@ import android.graphics.Bitmap; import android.os.Build; import android.provider.Settings; +import android.support.annotation.Nullable; import android.support.test.InstrumentationRegistry; -import android.support.test.espresso.Espresso; -import android.support.test.espresso.action.ViewActions; +import android.support.test.espresso.NoMatchingViewException; +import android.support.test.espresso.ViewAssertion; import android.support.test.espresso.contrib.RecyclerViewActions; -import android.support.test.espresso.matcher.ViewMatchers; import android.support.test.filters.MediumTest; +import android.support.test.filters.SmallTest; +import android.support.v7.widget.RecyclerView; import android.text.TextUtils; - -import androidx.annotation.Nullable; +import android.view.View; import org.junit.Assert; import org.junit.Before; @@ -75,7 +80,6 @@ "force-fieldtrials=Study/Group"}) @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public class StartSurfaceLayoutTest { - private static final String TAG = "SSLayoutTest"; private static final String BASE_PARAMS = "force-fieldtrial-params=" + "Study.Group:soft-cleanup-delay/0/cleanup-delay/0/skip-slow-zooming/false" + "/zooming-min-sdk-version/19/zooming-min-memory-mb/512"; @@ -96,6 +100,7 @@ @Before public void setUp() throws InterruptedException { FeatureUtilities.setGridTabSwitcherEnabledForTesting(true); + EmbeddedTestServer testServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); mActivityTestRule.startMainActivityFromLauncher(); @@ -113,6 +118,12 @@ mActivityTestRule.getActivity().getTabContentManager().setCaptureMinRequestTimeForTesting( 0); + + CriteriaHelper.pollUiThread(Criteria.equals(true, + mActivityTestRule.getActivity() + .getTabModelSelector() + .getTabModelFilterProvider() + .getCurrentTabModelFilter()::isTabModelRestored)); } @Test @@ -340,8 +351,9 @@ if (mActivityTestRule.getActivity() .getTabContentManager() .getPendingReadbacksForTesting() - > 0) + > 0) { break; + } // Restart Chrome. // Although we're destroying the activity, the Application will still live on since its @@ -415,9 +427,8 @@ waitForCaptureRateControl(); } int count = getCaptureCount(); - Espresso.onView(ViewMatchers.withId(org.chromium.chrome.tab_ui.R.id.tab_list_view)) - .perform(RecyclerViewActions.actionOnItemAtPosition( - targetIndex, ViewActions.click())); + onView(withId(org.chromium.chrome.tab_ui.R.id.tab_list_view)) + .perform(RecyclerViewActions.actionOnItemAtPosition(targetIndex, click())); CriteriaHelper.pollUiThread(() -> { boolean doneHiding = !mActivityTestRule.getActivity().getLayoutManager().overviewVisible(); @@ -532,14 +543,57 @@ Assert.assertEquals(0, mAllBitmaps.size() - count); } + @Test + @SmallTest + @CommandLineFlags.Add({BASE_PARAMS}) + public void testIncognitoEnterGts() throws Exception { + mActivityTestRule.newIncognitoTabFromMenu(); + onView(withId(org.chromium.chrome.R.id.tab_switcher_button)).perform(click()); + + onView(withId(org.chromium.chrome.tab_ui.R.id.tab_list_view)) + .check(TabCountAssertion.havingTabCount(1)); + + onView(withId(org.chromium.chrome.tab_ui.R.id.tab_list_view)) + .perform(RecyclerViewActions.actionOnItemAtPosition(0, click())); + + CriteriaHelper.pollInstrumentationThread( + () -> !mActivityTestRule.getActivity().getLayoutManager().overviewVisible()); + + onView(withId(org.chromium.chrome.R.id.tab_switcher_button)).perform(click()); + + onView(withId(org.chromium.chrome.tab_ui.R.id.tab_list_view)) + .check(TabCountAssertion.havingTabCount(1)); + } + + private static class TabCountAssertion implements ViewAssertion { + private int mExpectedCount; + + public static TabCountAssertion havingTabCount(int tabCount) { + return new TabCountAssertion(tabCount); + } + + public TabCountAssertion(int expectedCount) { + mExpectedCount = expectedCount; + } + + @Override + public void check(View view, NoMatchingViewException noMatchException) { + if (noMatchException != null) throw noMatchException; + + RecyclerView.Adapter adapter = ((RecyclerView) view).getAdapter(); + assertEquals(mExpectedCount, adapter.getItemCount()); + } + } + private void enterGTS() throws InterruptedException { Tab currentTab = mActivityTestRule.getActivity().getTabModelSelector().getCurrentTab(); // Native tabs need to be invalidated first to trigger thumbnail taking, so skip them. boolean checkThumbnail = !currentTab.isNativePage(); - if (checkThumbnail) + if (checkThumbnail) { mActivityTestRule.getActivity().getTabContentManager().removeTabThumbnail( currentTab.getId()); + } int count = getCaptureCount(); waitForCaptureRateControl();
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java index 89eaf472..9657a526 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java
@@ -101,7 +101,7 @@ * group. */ private class TabGroup { - private final static int INVALID_GROUP_ID = -1; + private static final int INVALID_GROUP_ID = -1; private final Set<Integer> mTabIds; private int mLastShownTabId; private int mGroupId; @@ -174,7 +174,6 @@ private int mActualGroupCount; private Tab mAbsentSelectedTab; private boolean mShouldRecordUma = true; - private boolean mTabRestoreCompleted; private boolean mIsResetting; public TabGroupModelFilter(TabModel tabModel) { @@ -188,7 +187,6 @@ RecordHistogram.recordCountHistogram("TabGroups.UserGroupCount", mActualGroupCount); Tab currentTab = TabModelUtils.getCurrentTab(getTabModel()); if (currentTab != null) recordSessionsCount(currentTab); - mTabRestoreCompleted = true; removeObserver(this); } }); @@ -654,7 +652,7 @@ public void didMoveTab(Tab tab, int newIndex, int curIndex) { // Ignore didMoveTab calls in tab restoring stage. For incognito mode, bypass this check // since there is no restoring stage. - if (!mTabRestoreCompleted && !isIncognito()) return; + if (!isTabModelRestored()) return; // Need to cache the flags before resetting the internal data map. boolean isMergeTabToGroup = isMergeTabToGroup(tab); boolean isMoveTabOutOfGroup = isMoveTabOutOfGroup(tab);
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java index 3123116..62631c0 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -739,7 +739,13 @@ * The selected border should re-appear in the final fading-in stage. */ void prepareOverview() { - if (!FeatureUtilities.isTabToGtsAnimationEnabled()) return; + if (!FeatureUtilities.isTabToGtsAnimationEnabled() + || !mTabModelSelector.getTabModelFilterProvider() + .getCurrentTabModelFilter() + .isTabModelRestored()) { + return; + } + assert mVisible; int count = 0; for (int i = 0; i < mModel.size(); i++) { @@ -816,7 +822,7 @@ } /** - * @see GridTabSwitcherMediator.ResetHandler#softCleanup + * @see TabSwitcherMediator.ResetHandler#softCleanup */ void softCleanup() { assert !mVisible;
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java index 33b37345..cf2876e 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java
@@ -119,7 +119,7 @@ private boolean mShouldIgnoreNextSelect; private int mModelIndexWhenShown; - private int mTabIdwhenShown; + private int mTabIdWhenShown; private int mIndexInNewModelWhenSwitched; private boolean mIsSelectingInTabSwitcher; @@ -225,6 +225,15 @@ onTabSelecting(tab.getId()); } } + + @Override + public void restoreCompleted() { + if (!mContainerViewModel.get(IS_VISIBLE)) return; + + mResetHandler.resetWithTabList( + mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), + false, mShowTabsInMruOrder); + } }; mFullscreenManager.addListener(mFullscreenListener); @@ -335,7 +344,7 @@ Tab fromTab = TabModelUtils.getTabById(mTabModelSelector.getCurrentModel(), lastId); assert fromTab != null; if (mModelIndexWhenShown == mTabModelSelector.getCurrentModelIndex()) { - if (tab.getId() == mTabIdwhenShown) { + if (tab.getId() == mTabIdWhenShown) { RecordUserAction.record("MobileTabReturnedToCurrentTab"); RecordHistogram.recordSparseHistogram( "Tabs.TabOffsetOfSwitch." + TabSwitcherCoordinator.COMPONENT_NAME, 0); @@ -411,7 +420,10 @@ mHandler.removeCallbacks(mSoftClearTabListRunnable); mHandler.removeCallbacks(mClearTabListRunnable); boolean quick = false; - if (FeatureUtilities.isTabToGtsAnimationEnabled()) { + if (FeatureUtilities.isTabToGtsAnimationEnabled() + && mTabModelSelector.getTabModelFilterProvider() + .getCurrentTabModelFilter() + .isTabModelRestored()) { quick = mResetHandler.resetWithTabList( mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), false, mShowTabsInMruOrder); @@ -429,13 +441,17 @@ @Override public void showOverview(boolean animate) { - mResetHandler.resetWithTabList( - mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), - FeatureUtilities.isTabToGtsAnimationEnabled(), mShowTabsInMruOrder); + if (mTabModelSelector.getTabModelFilterProvider() + .getCurrentTabModelFilter() + .isTabModelRestored()) { + mResetHandler.resetWithTabList( + mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), + FeatureUtilities.isTabToGtsAnimationEnabled(), mShowTabsInMruOrder); + } if (!animate) mContainerViewModel.set(ANIMATE_VISIBILITY_CHANGES, false); setVisibility(true); mModelIndexWhenShown = mTabModelSelector.getCurrentModelIndex(); - mTabIdwhenShown = mTabModelSelector.getCurrentTabId(); + mTabIdWhenShown = mTabModelSelector.getCurrentTabId(); mContainerViewModel.set(ANIMATE_VISIBILITY_CHANGES, true); if (mIphProvider != null) { mIphProvider.maybeShowIPH(mTabModelSelector.isIncognitoSelected());
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java index 8d15da7..7233aa9 100644 --- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java +++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java
@@ -272,6 +272,23 @@ } @Test + // TODO(mattsimmons): This is actually testing behavior of the superclass but there's no unit + // tests for the superclass today. If one ever exists, this should move to that test. + public void isTabModelRestored() { + setupTabGroupModelFilter(false, false); + assertThat(mTabGroupModelFilter.isTabModelRestored(), equalTo(false)); + + setupTabGroupModelFilter(true, false); + assertThat(mTabGroupModelFilter.isTabModelRestored(), equalTo(true)); + + setupTabGroupModelFilter(false, true); + assertThat(mTabGroupModelFilter.isTabModelRestored(), equalTo(true)); + + setupTabGroupModelFilter(true, true); + assertThat(mTabGroupModelFilter.isTabModelRestored(), equalTo(true)); + } + + @Test public void addTab_ToExistingGroup() { Tab newTab = prepareTab(NEW_TAB_ID, NEW_TAB_ID, TAB1_ID); doReturn(TabLaunchType.FROM_CHROME_UI).when(newTab).getLaunchType();
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediatorUnitTest.java index 0aa57f3..5fbe3fa 100644 --- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediatorUnitTest.java +++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediatorUnitTest.java
@@ -434,6 +434,60 @@ } @Test + public void updatesResetHandlerOnRestoreCompleted() { + initAndAssertAllProperties(); + mMediator.showOverview(true); + assertThat(mModel.get(TabListContainerProperties.IS_VISIBLE), equalTo(true)); + + mTabModelObserverCaptor.getValue().restoreCompleted(); + + // MRU will be false unless the start surface is enabled. + verify(mResetHandler).resetWithTabList(mTabModelFilter, false, false); + } + + @Test + public void showOverviewDoesNotUpdateResetHandlerBeforeRestoreCompleted() { + initAndAssertAllProperties(); + doReturn(false).when(mTabModelFilter).isTabModelRestored(); + mMediator.showOverview(true); + + // MRU will be false unless the start surface is enabled. + verify(mResetHandler, never()).resetWithTabList(mTabModelFilter, true, false); + } + + @Test + public void prepareOverviewDoesNotUpdateResetHandlerBeforeRestoreCompleted() { + initAndAssertAllProperties(); + doReturn(false).when(mTabModelFilter).isTabModelRestored(); + mMediator.prepareOverview(); + + // MRU will be false unless the start surface is enabled. + verify(mResetHandler, never()).resetWithTabList(mTabModelFilter, false, false); + } + + @Test + public void showOverviewUpdatesResetHandlerAfterRestoreCompleted() { + initAndAssertAllProperties(); + doReturn(true).when(mTabModelFilter).isTabModelRestored(); + + mMediator.showOverview(true); + + // MRU will be false unless the start surface is enabled. + verify(mResetHandler).resetWithTabList(mTabModelFilter, true, false); + } + + @Test + public void prepareOverviewUpdatesResetHandlerAfterRestoreCompleted() { + initAndAssertAllProperties(); + doReturn(true).when(mTabModelFilter).isTabModelRestored(); + + mMediator.prepareOverview(); + + // MRU will be false unless the start surface is enabled. + verify(mResetHandler).resetWithTabList(mTabModelFilter, false, false); + } + + @Test @DisableFeatures(ChromeFeatureList.TAB_GROUPS_UI_IMPROVEMENTS_ANDROID) public void openDialogButton_FlagDisabled() { FeatureUtilities.setTabGroupsAndroidEnabledForTesting(false);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppIndexingUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/AppIndexingUtil.java index 4c9b002..2410690c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/AppIndexingUtil.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/AppIndexingUtil.java
@@ -55,14 +55,16 @@ } AppIndexingUtil(@Nullable TabModelSelector mTabModelSelectorImpl) { - if (mTabModelSelectorImpl != null) { + if (mTabModelSelectorImpl != null && isEnabledForDevice()) { mObserver = new TabModelSelectorTabObserver(mTabModelSelectorImpl) { @Override public void onPageLoadFinished(final Tab tab, String url) { extractCopylessPasteMetadata(tab); - if (!SysUtils.isLowEndDevice()) { - getAppIndexingReporter().reportWebPageView(url, tab.getTitle()); - } + } + + @Override + public void didFirstVisuallyNonEmptyPaint(Tab tab) { + reportPageView(tab); } }; } @@ -79,17 +81,14 @@ */ @VisibleForTesting void extractCopylessPasteMetadata(final Tab tab) { - final String url = tab.getUrl(); - boolean isHttpOrHttps = UrlUtilities.isHttpOrHttps(url); - if (!isEnabledForDevice() || tab.isIncognito() || !isHttpOrHttps) { - return; - } + if (!isEnabledForTab(tab)) return; // There are three conditions that can occur with respect to the cache. // 1. Cache hit, and an entity was found previously. // 2. Cache hit, but no entity was found. Ignore. // 3. Cache miss, we need to parse the page. // Note that page view is reported unconditionally. + final String url = tab.getUrl(); if (wasPageVisitedRecently(url)) { if (lastPageVisitContainedEntity(url)) { // Condition 1 @@ -121,6 +120,12 @@ } @VisibleForTesting + void reportPageView(Tab tab) { + if (!isEnabledForTab(tab)) return; + getAppIndexingReporter().reportWebPageView(tab.getUrl(), tab.getTitle()); + } + + @VisibleForTesting static void setCallbackForTesting(Callback<WebPage> callback) { sCallbackForTesting = callback; } @@ -178,10 +183,18 @@ return SystemClock.elapsedRealtime(); } + @VisibleForTesting boolean isEnabledForDevice() { return !SysUtils.isLowEndDevice(); } + @VisibleForTesting + boolean isEnabledForTab(Tab tab) { + final String url = tab.getUrl(); + boolean isHttpOrHttps = UrlUtilities.isHttpOrHttps(url); + return isEnabledForDevice() && !tab.isIncognito() && isHttpOrHttps; + } + private LruCache<String, CacheEntry> getPageCache() { if (mPageCache == null) { mPageCache = new LruCache<String, CacheEntry>(CACHE_SIZE);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadBroadcastManager.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadBroadcastManager.java index 3b2f499..dee0866 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadBroadcastManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadBroadcastManager.java
@@ -198,7 +198,8 @@ DownloadStartupUtils.ensureDownloadSystemInitialized( BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER) - .isFullBrowserStarted()); + .isFullBrowserStarted(), + IntentUtils.safeGetBooleanExtra(intent, EXTRA_IS_OFF_THE_RECORD, false)); propagateInteraction(intent); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadStartupUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadStartupUtils.java index 2ed1c3d6..88188fa9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadStartupUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadStartupUtils.java
@@ -14,13 +14,16 @@ /** * Initializes the downloads system if not already initialized. * @param isFullBrowserStarted Whether full browser process has been started. + * @param isIncognito Whether the system is for incognito profile. */ - public static void ensureDownloadSystemInitialized(boolean isFullBrowserStarted) { - DownloadStartupUtilsJni.get().ensureDownloadSystemInitialized(isFullBrowserStarted); + public static void ensureDownloadSystemInitialized( + boolean isFullBrowserStarted, boolean isIncognito) { + DownloadStartupUtilsJni.get().ensureDownloadSystemInitialized( + isFullBrowserStarted, isIncognito); } @NativeMethods interface Natives { - void ensureDownloadSystemInitialized(boolean isFullBrowserStarted); + void ensureDownloadSystemInitialized(boolean isFullBrowserStarted, boolean isInCognito); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java index 61cbcf8..dfd5de1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java
@@ -38,6 +38,7 @@ private boolean mPageIsOffline; private boolean mShowStatusIconWhenUrlFocused; private boolean mIsSecurityButtonShown; + private boolean mIsSearchEngineStateSetup; private boolean mIsSearchEngineGoogle; private boolean mShouldCancelCustomFavicon; @@ -298,8 +299,16 @@ || mPageIsOffline; } + /** + * Called when the search engine status icon needs updating. + * + * @param shouldShowSearchEngineLogo True if the search engine icon should be shown. + * @param isSearchEngineGoogle True if the default search engine is google. + * @param searchEngineUrl The URL for the search engine icon. + */ public void updateSearchEngineStatusIcon(boolean shouldShowSearchEngineLogo, boolean isSearchEngineGoogle, String searchEngineUrl) { + mIsSearchEngineStateSetup = true; mIsSearchEngineGoogle = isSearchEngineGoogle; updateLocationBarIcon(); } @@ -335,7 +344,7 @@ && mToolbarCommonPropertiesModel.getDisplaySearchTerms() != null && SearchEngineLogoUtils.doesUrlMatchDefaultSearchEngine( mToolbarCommonPropertiesModel.getCurrentUrl()); - if (SearchEngineLogoUtils.shouldShowSearchEngineLogo() + if (SearchEngineLogoUtils.shouldShowSearchEngineLogo() && mIsSearchEngineStateSetup && (showFocused || showUnfocusedNewTabPage || showUnfocusedSearchResultsPage)) { mShouldCancelCustomFavicon = false; mModel.set(StatusProperties.STATUS_ICON_TINT_RES, 0);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelFilter.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelFilter.java index 06ec0d0..fa2b5ac0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelFilter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelFilter.java
@@ -26,6 +26,7 @@ Collections.unmodifiableList(new ArrayList<Tab>()); private TabModel mTabModel; protected ObserverList<TabModelObserver> mFilteredObservers = new ObserverList<>(); + private boolean mTabRestoreCompleted; public TabModelFilter(TabModel tabModel) { mTabModel = tabModel; @@ -88,7 +89,7 @@ * @return An unmodifiable list of {@link Tab}s that are not related to any tabs */ @NonNull - final public List<Tab> getTabsWithNoOtherRelatedTabs() { + public final List<Tab> getTabsWithNoOtherRelatedTabs() { List<Tab> tabs = new ArrayList<>(); for (int i = 0; i < mTabModel.getCount(); i++) { Tab tab = mTabModel.getTabAt(i); @@ -141,6 +142,13 @@ protected abstract void resetFilterStateInternal(); /** + * @return Whether the tab model is fully restored. + */ + public boolean isTabModelRestored() { + return mTabRestoreCompleted || isIncognito(); + } + + /** * Concrete class requires to define what's the behavior when {@link TabModel} removed a * {@link Tab}. * @param tab {@link Tab} had removed. @@ -264,6 +272,8 @@ @Override public void restoreCompleted() { + mTabRestoreCompleted = true; + if (getCount() != 0) reorder(); for (TabModelObserver observer : mFilteredObservers) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java index 1dcc13d..3c8d25f1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java
@@ -8,11 +8,7 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.net.Uri; import android.os.Build; -import android.support.v7.app.AlertDialog; import android.view.Gravity; import android.view.View; import android.view.accessibility.AccessibilityManager; @@ -21,10 +17,7 @@ import org.chromium.base.ApplicationStatus; import org.chromium.base.ApplicationStatus.ActivityStateListener; import org.chromium.base.ContextUtils; -import org.chromium.base.PackageUtils; import org.chromium.base.TraceEvent; -import org.chromium.chrome.R; -import org.chromium.ui.UiUtils; import org.chromium.ui.widget.Toast; import java.util.List; @@ -33,21 +26,6 @@ * Exposes information about the current accessibility state */ public class AccessibilityUtil { - // Whether we've already shown an alert that they have an old version of TalkBack running. - private static boolean sOldTalkBackVersionAlertShown; - - // The link to download or update TalkBack from the Play Store. - private static final String TALKBACK_MARKET_LINK = - "market://search?q=pname:com.google.android.marvin.talkback"; - - // The package name for TalkBack, an Android accessibility service. - private static final String TALKBACK_PACKAGE_NAME = - "com.google.android.marvin.talkback"; - - // The minimum TalkBack version that we support. This is the version that shipped with - // KitKat, from fall 2013. Versions older than that should be updated. - private static final int MIN_TALKBACK_VERSION = 105; - private static Boolean sIsAccessibilityEnabled; private static ActivityStateListener sActivityStateListener; @@ -115,7 +93,7 @@ } /** - * Checks whether the given {@link AccesibilityServiceInfo} can perform gestures. + * Checks whether the given {@link AccessibilityServiceInfo} can perform gestures. * @param service The service to check. * @return Whether the {@code service} can perform gestures. On N+, this relies on the * capabilities the service can perform. On L & M, this looks specifically for @@ -134,69 +112,6 @@ } /** - * Checks to see if an old version of TalkBack is running that Chrome doesn't support, - * and if so, shows an alert dialog prompting the user to update the app. - * @param context A {@link Context} instance. - * @return True if the dialog was shown. - */ - public static boolean showWarningIfOldTalkbackRunning(Context context) { - AccessibilityManager manager = (AccessibilityManager) - context.getSystemService(Context.ACCESSIBILITY_SERVICE); - if (manager == null) return false; - - boolean isTalkbackRunning = false; - try { - List<AccessibilityServiceInfo> services = - manager.getEnabledAccessibilityServiceList( - AccessibilityServiceInfo.FEEDBACK_SPOKEN); - for (AccessibilityServiceInfo service : services) { - if (service.getId().contains(TALKBACK_PACKAGE_NAME)) isTalkbackRunning = true; - } - } catch (NullPointerException e) { - // getEnabledAccessibilityServiceList() can throw an NPE due to a bad - // AccessibilityService. - } - if (!isTalkbackRunning) return false; - - if (PackageUtils.getPackageVersion(context, TALKBACK_PACKAGE_NAME) < MIN_TALKBACK_VERSION - && !sOldTalkBackVersionAlertShown) { - showOldTalkbackVersionAlertOnce(context); - return true; - } - - return false; - } - - private static void showOldTalkbackVersionAlertOnce(final Context context) { - if (sOldTalkBackVersionAlertShown) return; - sOldTalkBackVersionAlertShown = true; - - AlertDialog.Builder builder = - new UiUtils - .CompatibleAlertDialogBuilder(context, R.style.Theme_Chromium_AlertDialog) - .setTitle(R.string.old_talkback_title) - .setPositiveButton(R.string.update_from_market, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - Uri marketUri = Uri.parse(TALKBACK_MARKET_LINK); - Intent marketIntent = - new Intent(Intent.ACTION_VIEW, marketUri); - context.startActivity(marketIntent); - } - }) - .setNegativeButton(R.string.cancel_talkback_alert, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - // Do nothing, this alert is only shown once either way. - } - }); - AlertDialog dialog = builder.create(); - dialog.show(); - } - - /** * Shows the content description toast for items on the toolbar. * @param context The context to use for the toast. * @param view The view to anchor the toast.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java index 5833a2e..004832c3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
@@ -1040,7 +1040,7 @@ if (mContainerHeight <= 0) return 0; float customFullRatio = mSheetContent != null ? mSheetContent.getCustomFullRatio() : INVALID_HEIGHT_RATIO; - return customFullRatio < 0 ? mContainerHeight / (mContainerHeight + mToolbarShadowHeight) + return customFullRatio < 0 ? (mContainerHeight + mToolbarShadowHeight) / mContainerHeight : customFullRatio; } @@ -1333,7 +1333,7 @@ public boolean isSmallScreen() { // A small screen is defined by there being less than 160dp between half and full states. - float fullHeightRatio = mContainerHeight / (mContainerHeight + mToolbarShadowHeight); + float fullHeightRatio = (mContainerHeight + mToolbarShadowHeight) / mContainerHeight; float fullToHalfDiff = (fullHeightRatio - HALF_HEIGHT_RATIO) * mContainerHeight; return fullToHalfDiff < mMinHalfFullDistance; }
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index c336e4d..66f11c55 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -2203,17 +2203,6 @@ A </message> - <!-- TalkBack upgrade --> - <message name="IDS_OLD_TALKBACK_TITLE" desc="Title of dialog notifying user that the version of TalkBack they're running is too old."> - You need to update TalkBack to a newer version. - </message> - <message name="IDS_UPDATE_FROM_MARKET" desc="Title of button that will direct the user to update TalkBack from the market (Play Store)"> - Update - </message> - <message name="IDS_CANCEL_TALKBACK_ALERT" desc="Title of button that will cancel the TalkBack alert dialog dialog."> - Cancel - </message> - <!-- Android NFC Beam strings --> <message name="IDS_NFC_BEAM_ERROR_OVERLAY_ACTIVE" desc="Android Beam error - a tab is not in the foreground [CHAR-LIMIT=40]"> Select a tab to beam @@ -3724,6 +3713,11 @@ <message name="IDS_AR_IMMERSIVE_MODE_CONSENT_BUTTON" desc="Confirm button for dialog shown when a site requests consent for starting an augmented reality session."> Enter AR </message> + + <!-- App upgrade from Play Store --> + <message name="IDS_UPDATE_FROM_MARKET" desc="Title of button that will direct the user to update an app from the market (Play Store)"> + Update + </message> </if> <!-- Dynamic feature modules -->
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeTest.java index 1b2d259..99436c2a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tasks/ReturnToChromeTest.java
@@ -4,11 +4,11 @@ package org.chromium.chrome.browser.tasks; +import static org.junit.Assert.assertEquals; + import static org.chromium.chrome.browser.tasks.ReturnToChromeExperimentsUtil.TAB_SWITCHER_ON_RETURN_MS; import android.app.Activity; -import android.content.Context; -import android.os.SystemClock; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; @@ -22,13 +22,20 @@ import org.chromium.base.ApplicationStatus; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeTabbedActivity; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.chrome.test.util.MenuUtils; +import org.chromium.content_public.browser.test.util.Criteria; +import org.chromium.content_public.browser.test.util.CriteriaHelper; +import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.TimeoutException; @@ -37,6 +44,7 @@ * has passed. */ @RunWith(ChromeJUnit4ClassRunner.class) +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public class ReturnToChromeTest { @Rule public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); @@ -45,10 +53,12 @@ @Before public void setUp() throws Exception { - Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); + FeatureUtilities.setGridTabSwitcherEnabledForTesting(true); mActivityTestRule.startMainActivityFromLauncher(); mActivity = mActivityTestRule.getActivity(); + + setupTabs(); } /** @@ -64,7 +74,7 @@ "force-fieldtrial-params=FakeStudyName.Enabled:" + TAB_SWITCHER_ON_RETURN_MS + "/100000"}) public void - testObserverModeNotTriggeredWithoutDelay() throws Exception { + testTabSwitcherModeNotTriggeredWithinThreshold() throws Exception { finishActivityCompletely(); mActivityTestRule.startMainActivityFromLauncher(); @@ -73,25 +83,51 @@ Assert.assertFalse(mActivity.getLayoutManager().overviewVisible()); } + /** + * Test that overview mode is triggered if the delay is shorter than the interval between + * stop and start. + */ @Test @SmallTest @Feature({"ReturnToChrome"}) - @DisabledTest(message = "crbug.com/955436") @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "enable-features=" + ChromeFeatureList.TAB_SWITCHER_ON_RETURN + "<FakeStudyName", "force-fieldtrials=FakeStudyName/Enabled", - "force-fieldtrial-params=FakeStudyName.Enabled:" + TAB_SWITCHER_ON_RETURN_MS + "/1"}) + "force-fieldtrial-params=FakeStudyName.Enabled:" + TAB_SWITCHER_ON_RETURN_MS + "/0"}) public void - testObserverModeTriggeredWithDelay() throws Exception { + testTabSwitcherModeTriggeredBeyondThreshold() throws Exception { finishActivityCompletely(); - // Sleep past the timeout. - SystemClock.sleep(30); - mActivityTestRule.startMainActivityFromLauncher(); mActivity = mActivityTestRule.getActivity(); Assert.assertTrue(mActivity.getLayoutManager().overviewVisible()); + + CriteriaHelper.pollUiThread(Criteria.equals(true, + mActivityTestRule.getActivity() + .getTabModelSelector() + .getTabModelFilterProvider() + .getCurrentTabModelFilter()::isTabModelRestored)); + + assertEquals(2, mActivityTestRule.getActivity().getTabModelSelector().getTotalTabCount()); + } + + private void setupTabs() throws InterruptedException { + TestThreadUtils.runOnUiThreadBlocking( + () -> mActivityTestRule.getActivity().getTabModelSelector().closeAllTabs()); + EmbeddedTestServer testServer = + EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); + final String url = testServer.getURL("/chrome/test/data/android/navigate/simple.html"); + + // Add 2 tabs. + MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), + mActivity, org.chromium.chrome.R.id.new_tab_menu_id); + mActivityTestRule.loadUrl(url); + MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), + mActivity, org.chromium.chrome.R.id.new_tab_menu_id); + mActivityTestRule.loadUrl(url); + + assertEquals(2, mActivity.getTabModelSelector().getTotalTabCount()); } private void finishActivityCompletely() throws InterruptedException, TimeoutException {
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/AppIndexingUtilTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/AppIndexingUtilTest.java index 60350c0..8c3b3a5 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/AppIndexingUtilTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/AppIndexingUtilTest.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; @@ -69,19 +70,27 @@ } @Test - public void testNoCacheHit() { + public void testExtractCopylessPasteMetadata_Incognito() { + doReturn(true).when(mTab).isIncognito(); + + mUtil.extractCopylessPasteMetadata(mTab); + verify(mCopylessPaste, never()).getEntities(any()); + verify(mReporter, never()).reportWebPage(any()); + } + + @Test + public void testExtractCopylessPasteMetadata_NoCacheHit() { mUtil.extractCopylessPasteMetadata(mTab); verify(mCopylessPaste).getEntities(any(CopylessPaste.GetEntitiesResponse.class)); verify(mReporter).reportWebPage(any(WebPage.class)); } @Test - public void testCacheHit() { + public void testExtractCopylessPasteMetadata_CacheHit() { mUtil.extractCopylessPasteMetadata(mTab); verify(mCopylessPaste).getEntities(any(CopylessPaste.GetEntitiesResponse.class)); verify(mCopylessPaste).close(); verify(mReporter).reportWebPage(any(WebPage.class)); - verify(mReporter, never()).reportWebPageView(any(String.class), any(String.class)); doReturn(1L).when(mUtil).getElapsedTime(); mUtil.extractCopylessPasteMetadata(mTab); @@ -90,7 +99,7 @@ } @Test - public void testCacheHit_expired() { + public void testExtractCopylessPasteMetadata_CacheHit_Expired() { mUtil.extractCopylessPasteMetadata(mTab); doReturn(60 * 60 * 1000L + 1).when(mUtil).getElapsedTime(); @@ -99,7 +108,7 @@ } @Test - public void testCacheHit_noEntity() { + public void testExtractCopylessPasteMetadata_CacheHit_NoEntity() { doAnswer(invocation -> { CopylessPaste.GetEntitiesResponse callback = (CopylessPaste.GetEntitiesResponse) invocation.getArguments()[0]; @@ -114,6 +123,20 @@ verifyNoMoreInteractions(mReporter); } + @Test + public void testReportPageView_Incognito() { + doReturn(true).when(mTab).isIncognito(); + + mUtil.reportPageView(mTab); + verify(mReporter, never()).reportWebPageView(any(), any()); + } + + @Test + public void testReportPageView() { + mUtil.reportPageView(mTab); + verify(mReporter).reportWebPageView(eq("http://www.test.com"), eq("My neat website")); + } + private Url createUrl(String s) { Url url = new Url(); url.url = s;
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index a5c44a6a..f4b3899 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2520,6 +2520,12 @@ flag_descriptions::kPassiveEventListenersDueToFlingName, flag_descriptions::kPassiveEventListenersDueToFlingDescription, kOsAll, FEATURE_VALUE_TYPE(features::kPassiveEventListenersDueToFling)}, +#if defined(OS_WIN) + {"enable-experimental-fling-animation", + flag_descriptions::kExperimentalFlingAnimationName, + flag_descriptions::kExperimentalFlingAnimationDescription, kOsWin, + FEATURE_VALUE_TYPE(features::kExperimentalFlingAnimation)}, +#endif {"per-method-can-make-payment-quota", flag_descriptions::kPerMethodCanMakePaymentQuotaName, flag_descriptions::kPerMethodCanMakePaymentQuotaDescription, kOsAll, @@ -3006,6 +3012,11 @@ flag_descriptions::kTabOutlinesInLowContrastThemesDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kTabOutlinesInLowContrastThemes)}, + {"prominent-dark-mode-active-tab-title", + flag_descriptions::kProminentDarkModeActiveTabTitleName, + flag_descriptions::kProminentDarkModeActiveTabTitleDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kProminentDarkModeActiveTabTitle)}, + #if defined(OS_ANDROID) {"enable-reader-mode-in-cct", flag_descriptions::kReaderModeInCCTName, flag_descriptions::kReaderModeInCCTDescription, kOsAndroid, @@ -4146,12 +4157,6 @@ flag_descriptions::kCookiesWithoutSameSiteMustBeSecureDescription, kOsAll, FEATURE_VALUE_TYPE(net::features::kCookiesWithoutSameSiteMustBeSecure)}, - {"omnibox-ui-show-placeholder-when-caret-showing", - flag_descriptions::kOmniboxUIShowPlaceholderWhenCaretShowingName, - flag_descriptions::kOmniboxUIShowPlaceholderWhenCaretShowingDescription, - kOsDesktop, - FEATURE_VALUE_TYPE(omnibox::kUIExperimentShowPlaceholderWhenCaretShowing)}, - #if !defined(OS_ANDROID) {"enterprise-reporting-in-browser", flag_descriptions::kEnterpriseReportingInBrowserName,
diff --git a/chrome/browser/android/download/download_manager_service.cc b/chrome/browser/android/download/download_manager_service.cc index 0e33d87..d151afd 100644 --- a/chrome/browser/android/download/download_manager_service.cc +++ b/chrome/browser/android/download/download_manager_service.cc
@@ -205,9 +205,13 @@ bool is_full_browser_started) { java_ref_.Reset(env, obj); if (is_full_browser_started) { + DownloadStartupUtils::EnsureDownloadSystemInitialized( + true /* is_full_browser_started */, false /* is_incognito */); OnFullBrowserStarted(env, obj); } else { - DownloadStartupUtils::EnsureDownloadSystemInitialized(false); + // In reduced mode, only non-incognito downloads should be loaded. + DownloadStartupUtils::EnsureDownloadSystemInitialized( + false /* is_full_browser_started */, false /* is_incognito */); ResetCoordinatorIfNeeded( ProfileKeyStartupAccessor::GetInstance()->profile_key()); }
diff --git a/chrome/browser/android/download/download_manager_service_unittest.cc b/chrome/browser/android/download/download_manager_service_unittest.cc index d6ff2f6..cf36f90 100644 --- a/chrome/browser/android/download/download_manager_service_unittest.cc +++ b/chrome/browser/android/download/download_manager_service_unittest.cc
@@ -27,7 +27,7 @@ public: DownloadManagerServiceTest() : service_(new DownloadManagerService()), - coordinator_(base::NullCallback()), + coordinator_(base::NullCallback(), false), finished_(false), success_(false) { ON_CALL(manager_, GetDownloadByGuid(_))
diff --git a/chrome/browser/android/download/download_startup_utils.cc b/chrome/browser/android/download/download_startup_utils.cc index c680ee0..406199bb 100644 --- a/chrome/browser/android/download/download_startup_utils.cc +++ b/chrome/browser/android/download/download_startup_utils.cc
@@ -7,46 +7,39 @@ #include <jni.h> #include <utility> -#include "base/android/path_utils.h" #include "chrome/android/chrome_jni_headers/DownloadStartupUtils_jni.h" -#include "chrome/browser/android/chrome_feature_list.h" -#include "chrome/browser/android/download/download_controller.h" #include "chrome/browser/android/profile_key_startup_accessor.h" #include "chrome/browser/download/download_manager_utils.h" -#include "chrome/browser/download/download_offline_content_provider.h" -#include "chrome/browser/download/download_offline_content_provider_factory.h" -#include "chrome/browser/download/download_target_determiner.h" -#include "chrome/browser/download/simple_download_manager_coordinator_factory.h" -#include "chrome/browser/profiles/profile_key.h" +#include "chrome/browser/profiles/profile_manager.h" #include "components/download/public/common/in_progress_download_manager.h" -#include "components/download/public/common/simple_download_manager_coordinator.h" static void JNI_DownloadStartupUtils_EnsureDownloadSystemInitialized( JNIEnv* env, - jboolean is_full_browser_started) { - DownloadStartupUtils::EnsureDownloadSystemInitialized( - is_full_browser_started); + jboolean is_full_browser_started, + jboolean is_incognito) { + DownloadStartupUtils::EnsureDownloadSystemInitialized(is_full_browser_started, + is_incognito); } // static void DownloadStartupUtils::EnsureDownloadSystemInitialized( - bool is_full_browser_started) { - if (is_full_browser_started) - return; - - auto* profile_key = ProfileKeyStartupAccessor::GetInstance()->profile_key(); - download::InProgressDownloadManager* in_progress_manager = - DownloadManagerUtils::GetInProgressDownloadManager(profile_key); - in_progress_manager->set_download_start_observer( - DownloadControllerBase::Get()); - in_progress_manager->set_intermediate_path_cb( - base::BindRepeating(&DownloadTargetDeterminer::GetCrDownloadPath)); - base::FilePath download_dir; - base::android::GetDownloadsDirectory(&download_dir); - in_progress_manager->set_default_download_dir(download_dir); - download::SimpleDownloadManagerCoordinator* coordinator = - SimpleDownloadManagerCoordinatorFactory::GetForKey(profile_key); - auto* download_provider = - DownloadOfflineContentProviderFactory::GetForKey(profile_key); - download_provider->SetSimpleDownloadManagerCoordinator(coordinator); + bool is_full_browser_started, + bool is_incognito) { + DCHECK(is_full_browser_started || !is_incognito) + << "Incognito mode must load full browser."; + ProfileKey* profile_key = nullptr; + if (is_full_browser_started) { + Profile* profile = + ProfileManager::GetActiveUserProfile()->GetOriginalProfile(); + if (is_incognito) { + if (profile->HasOffTheRecordProfile()) + profile = profile->GetOffTheRecordProfile(); + else + return; + } + profile_key = profile->GetProfileKey(); + } else { + profile_key = ProfileKeyStartupAccessor::GetInstance()->profile_key(); + } + DownloadManagerUtils::GetInProgressDownloadManager(profile_key); }
diff --git a/chrome/browser/android/download/download_startup_utils.h b/chrome/browser/android/download/download_startup_utils.h index fc89fae..4569ca56 100644 --- a/chrome/browser/android/download/download_startup_utils.h +++ b/chrome/browser/android/download/download_startup_utils.h
@@ -8,7 +8,10 @@ // Native side of DownloadStartupUtils.java. class DownloadStartupUtils { public: - static void EnsureDownloadSystemInitialized(bool is_full_browser_started); + // Ensures that the download system is initialized for the targeted profile. + // If the corresponding profile is not created, this method will do nothing. + static void EnsureDownloadSystemInitialized(bool is_full_browser_started, + bool is_incognito); }; #endif // CHROME_BROWSER_ANDROID_DOWNLOAD_DOWNLOAD_STARTUP_UTILS_H_
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc index 6e708e09..ac3fd16 100644 --- a/chrome/browser/apps/guest_view/web_view_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -3531,6 +3531,12 @@ "web_view/load_webview_accessible_resource", NEEDS_TEST_SERVER); } +// Tests that a WebView can be navigated to a WebView accessible resource. +IN_PROC_BROWSER_TEST_F(WebViewTest, NavigateGuestToWebviewAccessibleResource) { + TestHelper("testNavigateGuestToWebviewAccessibleResource", + "web_view/load_webview_accessible_resource", NO_TEST_SERVER); +} + // Tests that a WebView can reload a WebView accessible resource. See // https://crbug.com/691941. IN_PROC_BROWSER_TEST_F(WebViewTest, ReloadWebviewAccessibleResource) {
diff --git a/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc b/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc index 6930d54..e16afe6 100644 --- a/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc +++ b/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc
@@ -293,6 +293,8 @@ case PickerAction::CHROME_PRESSED: case PickerAction::CHROME_PREFERRED_PRESSED: return Platform::CHROME; + case PickerAction::DEVICE_PRESSED: + return Platform::DEVICE; case PickerAction::PREFERRED_ACTIVITY_FOUND: case PickerAction::OBSOLETE_ALWAYS_PRESSED: case PickerAction::OBSOLETE_JUST_ONCE_PRESSED: @@ -439,6 +441,7 @@ case IntentPickerCloseReason::OPEN_APP: switch (entry_type) { case PickerEntryType::kUnknown: + NOTREACHED(); return PickerAction::INVALID; case PickerEntryType::kArc: return should_persist ? PickerAction::ARC_APP_PREFERRED_PRESSED @@ -446,7 +449,7 @@ case PickerEntryType::kWeb: return PickerAction::PWA_APP_PRESSED; case PickerEntryType::kDevice: - NOTREACHED(); + return PickerAction::DEVICE_PRESSED; } }
diff --git a/chrome/browser/apps/intent_helper/apps_navigation_throttle.h b/chrome/browser/apps/intent_helper/apps_navigation_throttle.h index 8e58b3d4..73dd713d 100644 --- a/chrome/browser/apps/intent_helper/apps_navigation_throttle.h +++ b/chrome/browser/apps/intent_helper/apps_navigation_throttle.h
@@ -103,8 +103,8 @@ protected: // These enums are used to define the buckets for an enumerated UMA histogram - // and need to be synced with histograms.xml. This enum class should also be - // treated as append-only. + // and need to be synced with the ArcIntentHandlerAction enum in enums.xml. + // This enum class should also be treated as append-only. enum class PickerAction : int { // Picker errors occurring after the picker is shown. ERROR_AFTER_PICKER = 0, @@ -130,17 +130,20 @@ // Picker errors occurring before the picker is shown. ERROR_BEFORE_PICKER = 10, INVALID = 11, - kMaxValue = INVALID, + DEVICE_PRESSED = 12, + kMaxValue = DEVICE_PRESSED, }; // As for PickerAction, these define the buckets for an UMA histogram, so this // must be treated in an append-only fashion. This helps especify where a - // navigation will continue. + // navigation will continue. Must be kept in sync with the + // ArcIntentHandlerDestinationPlatform enum in enums.xml. enum class Platform : int { ARC = 0, CHROME = 1, PWA = 2, - kMaxValue = PWA, + DEVICE = 3, + kMaxValue = DEVICE, }; // These enums are used to define the intent picker show state, whether the
diff --git a/chrome/browser/apps/intent_helper/apps_navigation_throttle_unittest.cc b/chrome/browser/apps/intent_helper/apps_navigation_throttle_unittest.cc index 808cbd3..891f8163 100644 --- a/chrome/browser/apps/intent_helper/apps_navigation_throttle_unittest.cc +++ b/chrome/browser/apps/intent_helper/apps_navigation_throttle_unittest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "chrome/browser/apps/intent_helper/apps_navigation_throttle.h" +#include "base/test/gtest_util.h" #include "chrome/browser/apps/intent_helper/apps_navigation_types.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -230,25 +231,28 @@ // Expect PREFERRED depending on the value of |should_persist|, and // INVALID/ARC to be chosen if reason is OPEN_APP. - EXPECT_EQ(AppsNavigationThrottle::PickerAction::INVALID, - AppsNavigationThrottle::GetPickerAction( - PickerEntryType::kUnknown, IntentPickerCloseReason::OPEN_APP, - /*should_persist=*/true)); + EXPECT_DCHECK_DEATH(AppsNavigationThrottle::GetPickerAction( + PickerEntryType::kUnknown, IntentPickerCloseReason::OPEN_APP, + /*should_persist=*/true)); EXPECT_EQ(AppsNavigationThrottle::PickerAction::ARC_APP_PREFERRED_PRESSED, AppsNavigationThrottle::GetPickerAction( PickerEntryType::kArc, IntentPickerCloseReason::OPEN_APP, /*should_persist=*/true)); - EXPECT_EQ(AppsNavigationThrottle::PickerAction::INVALID, - AppsNavigationThrottle::GetPickerAction( - PickerEntryType::kUnknown, IntentPickerCloseReason::OPEN_APP, - /*should_persist=*/false)); + EXPECT_DCHECK_DEATH(AppsNavigationThrottle::GetPickerAction( + PickerEntryType::kUnknown, IntentPickerCloseReason::OPEN_APP, + /*should_persist=*/false)); EXPECT_EQ(AppsNavigationThrottle::PickerAction::ARC_APP_PRESSED, AppsNavigationThrottle::GetPickerAction( PickerEntryType::kArc, IntentPickerCloseReason::OPEN_APP, /*should_persist=*/false)); + + EXPECT_EQ(AppsNavigationThrottle::PickerAction::DEVICE_PRESSED, + AppsNavigationThrottle::GetPickerAction( + PickerEntryType::kDevice, IntentPickerCloseReason::OPEN_APP, + /*should_persist=*/false)); } TEST(AppsNavigationThrottleTest, TestGetDestinationPlatform) {
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 8d7c0c1..1b7cc04 100644 --- a/chrome/browser/chromeos/apps/apk_web_app_installer_browsertest.cc +++ b/chrome/browser/chromeos/apps/apk_web_app_installer_browsertest.cc
@@ -8,6 +8,7 @@ #include <utility> #include <vector> +#include "ash/public/cpp/shelf_model.h" #include "base/macros.h" #include "base/optional.h" #include "base/run_loop.h" @@ -20,6 +21,7 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_test.h" +#include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" #include "components/arc/arc_util.h" @@ -36,6 +38,10 @@ const char kAppTitle[] = "Google Maps"; const char kAppUrl[] = "https://www.google.com/maps/"; const char kAppScope[] = "https://www.google.com/"; +constexpr char kLastAppId[] = "last_app_id"; +const char kAppActivity[] = "test.app.activity"; +const char kAppActivity1[] = "test.app1.activity"; +const char kPackageName1[] = "com.test.app"; const std::vector<uint8_t> GetFakeIconBytes() { auto fake_app_instance = @@ -183,6 +189,23 @@ void TearDownOnMainThread() override {} }; +class ApkWebAppInstallerWithLauncherControllerBrowserTest + : public ApkWebAppInstallerBrowserTest { + public: + // ApkWebAppInstallerBrowserTest + void SetUpOnMainThread() override { + EnableArc(); + launcher_controller_ = ChromeLauncherController::instance(); + ASSERT_TRUE(launcher_controller_); + } + + // ApkWebAppInstallerBrowserTest + void TearDownOnMainThread() override { DisableArc(); } + + protected: + ChromeLauncherController* launcher_controller_; +}; + // Test the full installation and uninstallation flow. IN_PROC_BROWSER_TEST_F(ApkWebAppInstallerBrowserTest, InstallAndUninstall) { ScopedObserver<extensions::ExtensionRegistry, @@ -371,4 +394,90 @@ } } +IN_PROC_BROWSER_TEST_F(ApkWebAppInstallerWithLauncherControllerBrowserTest, + CheckPinStateAfterUpdate) { + ScopedObserver<extensions::ExtensionRegistry, + extensions::ExtensionRegistryObserver> + observer(this); + observer.Add(extensions::ExtensionRegistry::Get(browser()->profile())); + ApkWebAppService* service = apk_web_app_service(); + service->SetArcAppListPrefsForTesting(arc_app_list_prefs_); + app_instance_->SendPackageAdded(GetArcAppPackage(kPackageName, kAppTitle)); + const std::string arc_app_id = + ArcAppListPrefs::GetAppId(kPackageName, kAppActivity); + + /// Create an app and add to the package. + arc::mojom::AppInfo app; + app.name = kAppTitle; + app.package_name = kPackageName; + app.activity = kAppActivity; + app.sticky = true; + app_instance_->SendPackageAppListRefreshed(kPackageName, {app}); + + EXPECT_FALSE(installed_extension_); + EXPECT_TRUE(uninstalled_extension_id_.empty()); + EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id)); + + // Pin the app to the shelf. + launcher_controller_->PinAppWithID(arc_app_id); + EXPECT_TRUE(launcher_controller_->IsAppPinned(arc_app_id)); + + int pin_index = launcher_controller_->PinnedItemIndexByAppID(arc_app_id); + + arc_app_list_prefs_->SetPackagePrefs(kPackageName, kLastAppId, + base::Value(arc_app_id)); + + std::string keep_web_app_id; + // Update ARC app to web app and check that the pinned app has + // been updated. + { + base::RunLoop run_loop; + service->SetWebAppInstalledCallbackForTesting(base::BindLambdaForTesting( + [&](const std::string& package_name, const web_app::AppId& web_app_id) { + keep_web_app_id = web_app_id; + EXPECT_TRUE(installed_extension_); + EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id)); + EXPECT_TRUE(launcher_controller_->IsAppPinned(keep_web_app_id)); + int new_index = + launcher_controller_->PinnedItemIndexByAppID(keep_web_app_id); + EXPECT_EQ(pin_index, new_index); + run_loop.Quit(); + })); + + app_instance_->SendPackageAdded(GetWebAppPackage(kPackageName, kAppTitle)); + run_loop.Run(); + } + + // Move the pin location of the app. + app_instance_->SendPackageAdded(GetArcAppPackage(kPackageName1, kAppTitle)); + const std::string arc_app_id1 = + ArcAppListPrefs::GetAppId(kPackageName1, kAppActivity1); + launcher_controller_->PinAppAtIndex(arc_app_id1, pin_index); + EXPECT_EQ(pin_index, + launcher_controller_->PinnedItemIndexByAppID(arc_app_id1)); + + // The app that was previously pinned will be shifted one to the right. + pin_index += 1; + EXPECT_EQ(pin_index, + launcher_controller_->PinnedItemIndexByAppID(keep_web_app_id)); + + // Update to ARC app and check the pinned app has updated. + { + base::RunLoop run_loop; + service->SetWebAppUninstalledCallbackForTesting(base::BindLambdaForTesting( + [&](const std::string& package_name, const web_app::AppId& web_app_id) { + EXPECT_FALSE(uninstalled_extension_id_.empty()); + EXPECT_FALSE(launcher_controller_->IsAppPinned(web_app_id)); + EXPECT_TRUE(launcher_controller_->IsAppPinned(arc_app_id)); + int new_index = + launcher_controller_->PinnedItemIndexByAppID(arc_app_id); + EXPECT_EQ(pin_index, new_index); + EXPECT_FALSE(launcher_controller_->IsAppPinned(keep_web_app_id)); + run_loop.Quit(); + })); + app_instance_->SendPackageAdded(GetArcAppPackage(kPackageName, kAppTitle)); + run_loop.Run(); + } +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/apps/apk_web_app_service.cc b/chrome/browser/chromeos/apps/apk_web_app_service.cc index 1cd231a0..7b59561b 100644 --- a/chrome/browser/chromeos/apps/apk_web_app_service.cc +++ b/chrome/browser/chromeos/apps/apk_web_app_service.cc
@@ -400,6 +400,7 @@ // when the container starts up again. dict_update->SetPath({web_app_id, kShouldRemoveKey}, base::Value(false)); + // For testing. if (web_app_installed_callback_) std::move(web_app_installed_callback_).Run(package_name, web_app_id); }
diff --git a/chrome/browser/chromeos/apps/intent_helper/chromeos_apps_navigation_throttle.cc b/chrome/browser/chromeos/apps/intent_helper/chromeos_apps_navigation_throttle.cc index ce574bd8..35277a2 100644 --- a/chrome/browser/chromeos/apps/intent_helper/chromeos_apps_navigation_throttle.cc +++ b/chrome/browser/chromeos/apps/intent_helper/chromeos_apps_navigation_throttle.cc
@@ -164,6 +164,7 @@ case PickerAction::OBSOLETE_ALWAYS_PRESSED: case PickerAction::OBSOLETE_JUST_ONCE_PRESSED: case PickerAction::INVALID: + case PickerAction::DEVICE_PRESSED: break; } return apps::AppsNavigationThrottle::GetDestinationPlatform(
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc index dfe8941..3902b04 100644 --- a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc +++ b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc
@@ -12,7 +12,6 @@ #include "base/memory/ref_counted.h" #include "base/metrics/histogram_functions.h" #include "chrome/app/vector_icons/vector_icons.h" -#include "chrome/browser/apps/intent_helper/apps_navigation_types.h" #include "chrome/browser/apps/intent_helper/page_transition_util.h" #include "chrome/browser/chromeos/apps/intent_helper/chromeos_apps_navigation_throttle.h" #include "chrome/browser/chromeos/arc/arc_web_contents_data.h" @@ -481,10 +480,14 @@ IntentPickerTabHelper::SetShouldShowIcon(web_contents, false); if (entry_type == apps::PickerEntryType::kDevice) { + DCHECK_EQ(apps::IntentPickerCloseReason::OPEN_APP, reason); + DCHECK(!should_persist); HandleDeviceSelection(web_contents, selected_app_package, url); - bool protocol_accepted = - (reason == apps::IntentPickerCloseReason::OPEN_APP) ? true : false; - RecordUmaDialogAction(Scheme::TEL, protocol_accepted, should_persist); + RecordUmaDialogAction(Scheme::TEL, entry_type, /*accepted=*/true, + should_persist); + chromeos::ChromeOsAppsNavigationThrottle::RecordUma( + selected_app_package, entry_type, reason, + apps::Source::kExternalProtocol, should_persist); return; } @@ -575,7 +578,8 @@ auto scheme_it = string_to_scheme.find(scheme); if (scheme_it != string_to_scheme.end()) url_scheme = scheme_it->second; - RecordUmaDialogAction(url_scheme, protocol_accepted, should_persist); + RecordUmaDialogAction(url_scheme, entry_type, protocol_accepted, + should_persist); chromeos::ChromeOsAppsNavigationThrottle::RecordUma( selected_app_package, entry_type, reason, apps::Source::kExternalProtocol, @@ -785,8 +789,12 @@ return IsChromeAnAppCandidate(handlers); } -void RecordUmaDialogAction(Scheme scheme, bool accepted, bool persisted) { - ProtocolAction action = GetProtocolAction(scheme, accepted, persisted); +void RecordUmaDialogAction(Scheme scheme, + apps::PickerEntryType entry_type, + bool accepted, + bool persisted) { + ProtocolAction action = + GetProtocolAction(scheme, entry_type, accepted, persisted); if (accepted) { base::UmaHistogramEnumeration( "ChromeOS.Apps.ExternalProtocolDialog.Accepted", action, @@ -798,7 +806,16 @@ } } -ProtocolAction GetProtocolAction(Scheme scheme, bool accepted, bool persisted) { +ProtocolAction GetProtocolAction(Scheme scheme, + apps::PickerEntryType entry_type, + bool accepted, + bool persisted) { + if (entry_type == apps::PickerEntryType::kDevice) { + DCHECK_EQ(Scheme::TEL, scheme); + DCHECK(accepted); + DCHECK(!persisted); + return ProtocolAction::TEL_DEVICE_SELECTED; + } switch (scheme) { case Scheme::OTHER: if (!accepted)
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h index 455c4245..c7cadba 100644 --- a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h +++ b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h
@@ -8,6 +8,7 @@ #include <utility> #include <vector> +#include "chrome/browser/apps/intent_helper/apps_navigation_types.h" #include "components/arc/intent_helper/arc_intent_helper_bridge.h" #include "components/arc/mojom/intent_helper.mojom.h" #include "ui/base/page_transition_types.h" @@ -94,7 +95,8 @@ WEBCAL_ACCEPTED_PERSISTED = 45, WEBCAL_ACCEPTED_NOT_PERSISTED = 46, WEBCAL_REJECTED = 47, - kMaxValue = WEBCAL_REJECTED + TEL_DEVICE_SELECTED = 48, + kMaxValue = TEL_DEVICE_SELECTED }; // Possible schemes for recording external protocol dialog metrics @@ -141,9 +143,15 @@ bool IsChromeAnAppCandidateForTesting( const std::vector<mojom::IntentHandlerInfoPtr>& handlers); -void RecordUmaDialogAction(Scheme scheme, bool accepted, bool persisted); +void RecordUmaDialogAction(Scheme scheme, + apps::PickerEntryType entry_type, + bool accepted, + bool persisted); -ProtocolAction GetProtocolAction(Scheme scheme, bool accepted, bool persisted); +ProtocolAction GetProtocolAction(Scheme scheme, + apps::PickerEntryType entry_type, + bool accepted, + bool persisted); } // namespace arc
diff --git a/chrome/browser/chromeos/crostini/crostini_export_import.cc b/chrome/browser/chromeos/crostini/crostini_export_import.cc index 431d188..6b93aca 100644 --- a/chrome/browser/chromeos/crostini/crostini_export_import.cc +++ b/chrome/browser/chromeos/crostini/crostini_export_import.cc
@@ -160,6 +160,9 @@ ContainerId container_id, base::FilePath path, CrostiniManager::CrostiniResultCallback callback) { + if (!IsCrostiniExportImportUIAllowedForProfile(profile_)) { + return std::move(callback).Run(CrostiniResult::NOT_ALLOWED); + } auto* notification = CrostiniExportImportNotification::Create( profile_, type, GetUniqueNotificationId(), path, container_id);
diff --git a/chrome/browser/chromeos/crostini/crostini_export_import_unittest.cc b/chrome/browser/chromeos/crostini/crostini_export_import_unittest.cc index 6008ad05..2924581 100644 --- a/chrome/browser/chromeos/crostini/crostini_export_import_unittest.cc +++ b/chrome/browser/chromeos/crostini/crostini_export_import_unittest.cc
@@ -7,6 +7,8 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/strings/utf_string_conversions.h" +#include "chrome/browser/chromeos/crostini/crostini_pref_names.h" +#include "chrome/browser/chromeos/crostini/crostini_test_helper.h" #include "chrome/browser/chromeos/crostini/crostini_util.h" #include "chrome/browser/chromeos/file_manager/path_util.h" #include "chrome/browser/chromeos/guest_os/guest_os_share_path.h" @@ -15,6 +17,7 @@ #include "chromeos/dbus/fake_cicerone_client.h" #include "chromeos/dbus/fake_seneschal_client.h" #include "chromeos/dbus/seneschal/seneschal_service.pb.h" +#include "components/prefs/pref_service.h" #include "content/public/test/browser_task_environment.h" #include "storage/browser/fileapi/external_mount_points.h" #include "testing/gtest/include/gtest/gtest.h" @@ -86,8 +89,12 @@ void SetUp() override { profile_ = std::make_unique<TestingProfile>(); crostini_export_import_ = std::make_unique<CrostiniExportImport>(profile()); + test_helper_ = std::make_unique<CrostiniTestHelper>(profile_.get()); CrostiniManager::GetForProfile(profile())->AddRunningVmForTesting( kCrostiniDefaultVmName); + CrostiniManager::GetForProfile(profile())->set_skip_restart_for_testing(); + profile()->GetPrefs()->SetBoolean( + crostini::prefs::kUserCrostiniExportImportUIAllowedByPolicy, true); container_id_ = ContainerId(kCrostiniDefaultVmName, kCrostiniDefaultContainerName); @@ -109,6 +116,7 @@ guest_os::GuestOsSharePath::GetForProfile(profile())->Shutdown(); task_environment_.RunUntilIdle(); base::DeleteFile(tarball_, false); + test_helper_.reset(); profile_.reset(); } @@ -121,6 +129,8 @@ std::unique_ptr<TestingProfile> profile_; std::unique_ptr<CrostiniExportImport> crostini_export_import_; + std::unique_ptr<CrostiniTestHelper> test_helper_; + ContainerId container_id_; base::FilePath tarball_; @@ -130,6 +140,19 @@ DISALLOW_COPY_AND_ASSIGN(CrostiniExportImportTest); }; +TEST_F(CrostiniExportImportTest, TestNotAllowed) { + profile()->GetPrefs()->SetBoolean( + crostini::prefs::kUserCrostiniExportImportUIAllowedByPolicy, false); + crostini_export_import_->ExportContainer( + container_id_, tarball_, base::BindOnce([](CrostiniResult result) { + EXPECT_EQ(result, CrostiniResult::NOT_ALLOWED); + })); + crostini_export_import_->ImportContainer( + container_id_, tarball_, base::BindOnce([](CrostiniResult result) { + EXPECT_EQ(result, CrostiniResult::NOT_ALLOWED); + })); +} + // TODO(juwa): remove this once tremplin has been shipped. TEST_F(CrostiniExportImportTest, TestDeprecatedExportSuccess) { crostini_export_import_->FileSelected(
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc index 3e81773..f574e3fa 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
@@ -723,7 +723,15 @@ crostini::CrostiniExportImport::GetForProfile(profile)->ImportContainer( crostini::ContainerId{crostini::kCrostiniDefaultVmName, crostini::kCrostiniDefaultContainerName}, - path, base::DoNothing()); + path, + base::BindOnce( + [](base::FilePath path, crostini::CrostiniResult result) { + if (result != crostini::CrostiniResult::SUCCESS) { + LOG(ERROR) << "Error importing crostini image " << path.value() + << ": " << (int)result; + } + }, + path)); return RespondNow(NoArguments()); }
diff --git a/chrome/browser/download/download_core_service_impl.cc b/chrome/browser/download/download_core_service_impl.cc index 5471b56..799e6b5 100644 --- a/chrome/browser/download/download_core_service_impl.cc +++ b/chrome/browser/download/download_core_service_impl.cc
@@ -72,11 +72,6 @@ new DownloadHistory::HistoryAdapter(history)))); } - DownloadOfflineContentProvider* download_provider = - DownloadOfflineContentProviderFactory::GetForKey( - profile_->GetProfileKey()); - download_provider->SetSimpleDownloadManagerCoordinator(coordinator); - // Pass an empty delegate when constructing the DownloadUIController. The // default delegate does all the notifications we need. download_ui_.reset(new DownloadUIController(
diff --git a/chrome/browser/download/download_manager_utils.cc b/chrome/browser/download/download_manager_utils.cc index 986b086b..20c845a 100644 --- a/chrome/browser/download/download_manager_utils.cc +++ b/chrome/browser/download/download_manager_utils.cc
@@ -7,6 +7,8 @@ #include "base/bind.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/download/download_offline_content_provider.h" +#include "chrome/browser/download/download_offline_content_provider_factory.h" #include "chrome/browser/download/simple_download_manager_coordinator_factory.h" #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/profiles/profile.h" @@ -19,7 +21,10 @@ #include "content/public/browser/system_connector.h" #if defined(OS_ANDROID) +#include "base/android/path_utils.h" +#include "chrome/browser/android/download/download_controller.h" #include "chrome/browser/android/download/download_manager_service.h" +#include "chrome/browser/download/download_target_determiner.h" #endif namespace { @@ -88,17 +93,29 @@ auto in_progress_manager = std::make_unique<download::InProgressDownloadManager>( nullptr, key->IsOffTheRecord() ? base::FilePath() : key->GetPath(), - key->GetProtoDatabaseProvider(), + key->IsOffTheRecord() ? nullptr : key->GetProtoDatabaseProvider(), base::BindRepeating(&IgnoreOriginSecurityCheck), base::BindRepeating(&content::DownloadRequestUtils::IsURLSafe), connector); download::SimpleDownloadManagerCoordinator* coordinator = SimpleDownloadManagerCoordinatorFactory::GetForKey(key); - coordinator->SetSimpleDownloadManager(in_progress_manager.get(), - key->IsOffTheRecord()); + coordinator->SetSimpleDownloadManager( + in_progress_manager.get(), false /* manages_all_history_downloads */); scoped_refptr<network::SharedURLLoaderFactory> factory = SystemNetworkContextManager::GetInstance()->GetSharedURLLoaderFactory(); in_progress_manager->set_url_loader_factory(std::move(factory)); +#if defined(OS_ANDROID) + in_progress_manager->set_download_start_observer( + DownloadControllerBase::Get()); + in_progress_manager->set_intermediate_path_cb( + base::BindRepeating(&DownloadTargetDeterminer::GetCrDownloadPath)); + base::FilePath download_dir; + base::android::GetDownloadsDirectory(&download_dir); + in_progress_manager->set_default_download_dir(download_dir); +#endif // defined(OS_ANDROID) + auto* download_provider = + DownloadOfflineContentProviderFactory::GetForKey(key); + download_provider->SetSimpleDownloadManagerCoordinator(coordinator); map[key] = std::move(in_progress_manager); } return map[key].get();
diff --git a/chrome/browser/download/download_offline_content_provider.cc b/chrome/browser/download/download_offline_content_provider.cc index be515444..40217cc 100644 --- a/chrome/browser/download/download_offline_content_provider.cc +++ b/chrome/browser/download/download_offline_content_provider.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/download/image_thumbnail_request.h" #include "chrome/browser/download/offline_item_utils.h" #include "chrome/browser/offline_items_collection/offline_content_aggregator_factory.h" +#include "chrome/browser/profiles/profile.h" #include "components/download/public/common/download_item.h" #include "content/public/browser/browser_context.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -50,10 +51,6 @@ !item->GetTargetFilePath().empty(); } -bool FullBrowserStarted() { - return g_browser_process != nullptr; -} - std::unique_ptr<OfflineItemShareInfo> CreateShareInfo( const DownloadItem* item) { auto share_info = std::make_unique<OfflineItemShareInfo>(); @@ -132,9 +129,9 @@ name_space_(name_space), manager_(nullptr), checked_for_externally_removed_downloads_(false), - state_(State::UNINITIALIZED) { + state_(State::UNINITIALIZED), + profile_(nullptr) { aggregator_->RegisterProvider(name_space_, this); - #if defined(OS_ANDROID) all_download_observer_.reset(new AllDownloadObserver(this)); #endif @@ -193,7 +190,7 @@ // TODO(shaktisahu) : Pass DownloadOpenSource. void DownloadOfflineContentProvider::OpenItem(LaunchLocation location, const ContentId& id) { - DCHECK(FullBrowserStarted()); + EnsureDownloadCoreServiceStarted(); if (state_ != State::HISTORY_LOADED) { pending_actions_for_full_browser_.push_back( base::BindOnce(&DownloadOfflineContentProvider::OpenItem, @@ -207,7 +204,7 @@ } void DownloadOfflineContentProvider::RemoveItem(const ContentId& id) { - DCHECK(FullBrowserStarted()); + EnsureDownloadCoreServiceStarted(); if (state_ != State::HISTORY_LOADED) { pending_actions_for_full_browser_.push_back( base::BindOnce(&DownloadOfflineContentProvider::RemoveItem, @@ -265,7 +262,7 @@ void DownloadOfflineContentProvider::GetItemById( const ContentId& id, OfflineContentProvider::SingleItemCallback callback) { - DCHECK(FullBrowserStarted()); + EnsureDownloadCoreServiceStarted(); if (state_ != State::HISTORY_LOADED) { pending_actions_for_full_browser_.push_back(base::BindOnce( &DownloadOfflineContentProvider::GetItemById, @@ -286,7 +283,7 @@ void DownloadOfflineContentProvider::GetAllItems( OfflineContentProvider::MultipleItemCallback callback) { - DCHECK(FullBrowserStarted()); + EnsureDownloadCoreServiceStarted(); if (state_ != State::HISTORY_LOADED) { pending_actions_for_full_browser_.push_back( base::BindOnce(&DownloadOfflineContentProvider::GetAllItems, @@ -339,7 +336,7 @@ void DownloadOfflineContentProvider::GetShareInfoForItem( const ContentId& id, ShareCallback callback) { - DCHECK(FullBrowserStarted()); + EnsureDownloadCoreServiceStarted(); if (state_ != State::HISTORY_LOADED) { pending_actions_for_full_browser_.push_back(base::BindOnce( &DownloadOfflineContentProvider::GetShareInfoForItem, @@ -366,7 +363,7 @@ void DownloadOfflineContentProvider::RenameItem(const ContentId& id, const std::string& name, RenameCallback callback) { - DCHECK(FullBrowserStarted()); + EnsureDownloadCoreServiceStarted(); if (state_ != State::HISTORY_LOADED) { pending_actions_for_full_browser_.push_back(base::BindOnce( &DownloadOfflineContentProvider::RenameItem, @@ -485,6 +482,10 @@ observer.OnItemRemoved(contentId); } +void DownloadOfflineContentProvider::OnProfileCreated(Profile* profile) { + profile_ = profile; +} + void DownloadOfflineContentProvider::AddCompletedDownload(DownloadItem* item) { #if defined(OS_ANDROID) DownloadManagerBridge::AddCompletedDownload( @@ -541,3 +542,8 @@ manager_->CheckForExternallyRemovedDownloads(); #endif } + +void DownloadOfflineContentProvider::EnsureDownloadCoreServiceStarted() { + DCHECK(profile_); + CHECK(content::BrowserContext::GetDownloadManager(profile_)); +}
diff --git a/chrome/browser/download/download_offline_content_provider.h b/chrome/browser/download/download_offline_content_provider.h index 4b266c8..6047469 100644 --- a/chrome/browser/download/download_offline_content_provider.h +++ b/chrome/browser/download/download_offline_content_provider.h
@@ -31,6 +31,7 @@ using UpdateDelta = offline_items_collection::UpdateDelta; using LaunchLocation = offline_items_collection::LaunchLocation; +class Profile; class SkBitmap; // This class handles the task of observing the downloads associated with a @@ -91,6 +92,8 @@ void OnDownloadUpdated(DownloadItem* item) override; void OnDownloadRemoved(DownloadItem* item) override; + void OnProfileCreated(Profile* profile); + private: enum class State { // Download system is not yet initialized. @@ -123,6 +126,9 @@ const base::Optional<UpdateDelta>& update_delta); void CheckForExternallyRemovedDownloads(); + // Ensure that download core service is started. + void EnsureDownloadCoreServiceStarted(); + base::ObserverList<OfflineContentProvider::Observer>::Unchecked observers_; OfflineContentAggregator* aggregator_; std::string name_space_; @@ -135,6 +141,8 @@ base::circular_deque<base::OnceClosure> pending_actions_for_reduced_mode_; base::circular_deque<base::OnceClosure> pending_actions_for_full_browser_; + Profile* profile_; + base::WeakPtrFactory<DownloadOfflineContentProvider> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(DownloadOfflineContentProvider);
diff --git a/chrome/browser/download/download_offline_content_provider_factory.cc b/chrome/browser/download/download_offline_content_provider_factory.cc index 87850d2..66b938c 100644 --- a/chrome/browser/download/download_offline_content_provider_factory.cc +++ b/chrome/browser/download/download_offline_content_provider_factory.cc
@@ -12,9 +12,17 @@ #include "chrome/browser/download/offline_item_utils.h" #include "chrome/browser/offline_items_collection/offline_content_aggregator_factory.h" #include "chrome/browser/profiles/profile_key.h" +#include "chrome/browser/transition_manager/full_browser_transition_manager.h" #include "components/keyed_service/core/simple_dependency_manager.h" #include "components/offline_items_collection/core/offline_content_aggregator.h" +namespace { +void OnProfileCreated(DownloadOfflineContentProvider* provider, + Profile* profile) { + provider->OnProfileCreated(profile); +} +} // namespace + // static DownloadOfflineContentProviderFactory* DownloadOfflineContentProviderFactory::GetInstance() { @@ -43,8 +51,13 @@ std::string name_space = OfflineContentAggregator::CreateUniqueNameSpace( OfflineItemUtils::GetDownloadNamespacePrefix(key->IsOffTheRecord()), key->IsOffTheRecord()); - return std::make_unique<DownloadOfflineContentProvider>(aggregator, - name_space); + + auto provider = + std::make_unique<DownloadOfflineContentProvider>(aggregator, name_space); + auto callback = base::BindOnce(&OnProfileCreated, provider.get()); + FullBrowserTransitionManager::Get()->RegisterCallbackOnProfileCreation( + key, std::move(callback)); + return provider; } SimpleFactoryKey* DownloadOfflineContentProviderFactory::GetKeyToUse(
diff --git a/chrome/browser/download/download_offline_content_provider_unittest.cc b/chrome/browser/download/download_offline_content_provider_unittest.cc index 0390231..fe6d6586 100644 --- a/chrome/browser/download/download_offline_content_provider_unittest.cc +++ b/chrome/browser/download/download_offline_content_provider_unittest.cc
@@ -31,7 +31,7 @@ : task_runner_(new base::TestSimpleTaskRunner), handle_(task_runner_), provider_(&aggregator_, kTestDownloadNamespace), - coordinator_(base::NullCallback()) {} + coordinator_(base::NullCallback(), false) {} ~DownloadOfflineContentProviderTest() override {}
diff --git a/chrome/browser/download/simple_download_manager_coordinator_factory.cc b/chrome/browser/download/simple_download_manager_coordinator_factory.cc index edd2f27..749aaff 100644 --- a/chrome/browser/download/simple_download_manager_coordinator_factory.cc +++ b/chrome/browser/download/simple_download_manager_coordinator_factory.cc
@@ -59,7 +59,8 @@ // Use unretained is safe as the key is associated with the callback. return std::make_unique<download::SimpleDownloadManagerCoordinator>( base::BindRepeating(&DownloadUrlWithDownloadManager, - base::Unretained(key))); + base::Unretained(key)), + key->IsOffTheRecord()); } SimpleFactoryKey* SimpleDownloadManagerCoordinatorFactory::GetKeyToUse(
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc index f079d9ff..1c10e92 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.cc +++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -47,6 +47,7 @@ #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" +#include "chrome/common/url_constants.h" #include "components/update_client/update_client.h" #include "components/version_info/version_info.h" #include "content/public/browser/browser_thread.h" @@ -530,6 +531,14 @@ return ::GetUserAgent(); } +bool ChromeExtensionsBrowserClient::ShouldSchemeBypassNavigationChecks( + const std::string& scheme) const { + if (scheme == chrome::kChromeSearchScheme) + return true; + + return ExtensionsBrowserClient::ShouldSchemeBypassNavigationChecks(scheme); +} + // static void ChromeExtensionsBrowserClient::set_did_chrome_update_for_testing( bool did_update) {
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h index be5ad3a..584a7c729 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.h +++ b/chrome/browser/extensions/chrome_extensions_browser_client.h
@@ -143,6 +143,8 @@ network::mojom::NetworkContext* GetSystemNetworkContext() override; UserScriptListener* GetUserScriptListener() override; std::string GetUserAgent() const override; + bool ShouldSchemeBypassNavigationChecks( + const std::string& scheme) const override; static void set_did_chrome_update_for_testing(bool did_update);
diff --git a/chrome/browser/extensions/extension_navigation_throttle_unittest.cc b/chrome/browser/extensions/extension_navigation_throttle_unittest.cc index e9e37ae..0a1f7b2 100644 --- a/chrome/browser/extensions/extension_navigation_throttle_unittest.cc +++ b/chrome/browser/extensions/extension_navigation_throttle_unittest.cc
@@ -74,6 +74,7 @@ const GURL& extension_url, NavigationThrottle::ThrottleAction expected_will_start_result) { content::MockNavigationHandle test_handle(extension_url, host); + test_handle.set_initiator_origin(host->GetLastCommittedOrigin()); test_handle.set_starting_site_instance(host->GetSiteInstance()); auto throttle = std::make_unique<ExtensionNavigationThrottle>(&test_handle); @@ -168,29 +169,6 @@ NavigationThrottle::PROCEED); } -// Tests that if any of the ancestors are an external web page, we restrict -// the resources. -TEST_F(ExtensionNavigationThrottleUnitTest, WebPageAncestor) { - web_contents_tester()->NavigateAndCommit(GURL("http://example.com")); - content::RenderFrameHost* child = - render_frame_host_tester(main_rfh())->AppendChild("subframe1"); - GURL url = extension()->GetResourceURL(kAccessible); - child = - content::NavigationSimulator::NavigateAndCommitFromDocument(url, child); - content::RenderFrameHost* grand_child = - render_frame_host_tester(child)->AppendChild("grandchild"); - - // Even though the immediate parent is a trusted frame, we should restrict - // to web_accessible_resources since the grand parent is external. - CheckTestCase(grand_child, extension()->GetResourceURL(kPrivate), - NavigationThrottle::BLOCK_REQUEST); - CheckTestCase(grand_child, extension()->GetResourceURL(kAccessible), - NavigationThrottle::PROCEED); - CheckTestCase(grand_child, - extension()->GetResourceURL(kAccessibleDirResource), - NavigationThrottle::PROCEED); -} - // Tests that requests to disabled or non-existent extensions are blocked. TEST_F(ExtensionNavigationThrottleUnitTest, DisabledExtensionChildFrame) { web_contents_tester()->NavigateAndCommit(GURL("http://example.com"));
diff --git a/chrome/browser/extensions/extension_resource_request_policy_apitest.cc b/chrome/browser/extensions/extension_resource_request_policy_apitest.cc index 0d36b28..3b6858b 100644 --- a/chrome/browser/extensions/extension_resource_request_policy_apitest.cc +++ b/chrome/browser/extensions/extension_resource_request_policy_apitest.cc
@@ -15,14 +15,17 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/test/browser_test_utils.h" +#include "content/public/test/test_navigation_observer.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "url/gurl.h" -class ExtensionResourceRequestPolicyTest : public extensions::ExtensionApiTest { +namespace extensions { + +class ExtensionResourceRequestPolicyTest : public ExtensionApiTest { protected: void SetUpOnMainThread() override { - extensions::ExtensionApiTest::SetUpOnMainThread(); + ExtensionApiTest::SetUpOnMainThread(); host_resolver()->AddRule("*", "127.0.0.1"); ASSERT_TRUE(embedded_test_server()->Start()); } @@ -213,7 +216,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, LinkToWebAccessibleResources) { std::string result; - const extensions::Extension* extension = LoadExtension( + const Extension* extension = LoadExtension( test_data_dir_.AppendASCII("extension_resource_request_policy") .AppendASCII("web_accessible")); ASSERT_TRUE(extension); @@ -338,12 +341,12 @@ browser()->tab_strip_model()->GetActiveWebContents(); // Any valid extension that happens to have a web accessible resource. - const extensions::Extension* patsy = LoadExtension( + const Extension* patsy = LoadExtension( test_data_dir_.AppendASCII("extension_resource_request_policy") .AppendASCII("some_accessible")); // An extension with a non-webaccessible resource. - const extensions::Extension* target = LoadExtension( + const Extension* target = LoadExtension( test_data_dir_.AppendASCII("extension_resource_request_policy") .AppendASCII("inaccessible")); @@ -369,3 +372,111 @@ ->GetLastCommittedOrigin() .GetURL()); } + +IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, + WebNavigationToNonWebAccessibleResource_LocalSubframe) { + const Extension* extension = LoadExtension( + test_data_dir_.AppendASCII("extension_resource_request_policy") + .AppendASCII("inaccessible")); + ASSERT_TRUE(extension); + const GURL non_web_accessible_url = + extension->GetResourceURL("inaccessible-iframe-contents.html"); + + GURL main_url = embedded_test_server()->GetURL( + "/frame_tree/page_with_two_frames_remote_and_local.html"); + ui_test_utils::NavigateToURL(browser(), main_url); + + // Attempt to navigate the local frame to a non-web-accessible-resource. + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + content::TestNavigationObserver nav_observer(web_contents, 1); + ASSERT_TRUE(content::ExecJs( + web_contents, content::JsReplace("window.open($1, 'local-frame')", + non_web_accessible_url))); + nav_observer.Wait(); + + // Verify that the navigation has failed. + EXPECT_FALSE(nav_observer.last_navigation_succeeded()); + EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, nav_observer.last_net_error_code()); + + // Tentatively check that the renderer-side validation took place. Without + // renderer-side navigation we would still expect browser-side validation to + // result in ERR_BLOCKED_BY_CLIENT (with a different final URL though) - this + // is why the test assertion below is secondary / not that important. + EXPECT_EQ(GURL("chrome-extension://invalid/"), + nav_observer.last_navigation_url()); +} + +IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, + WebNavigationToNonWebAccessibleResource_RemoteSubframe) { + const Extension* extension = LoadExtension( + test_data_dir_.AppendASCII("extension_resource_request_policy") + .AppendASCII("inaccessible")); + ASSERT_TRUE(extension); + const GURL non_web_accessible_url = + extension->GetResourceURL("inaccessible-iframe-contents.html"); + + GURL main_url = embedded_test_server()->GetURL( + "/frame_tree/page_with_two_frames_remote_and_local.html"); + ui_test_utils::NavigateToURL(browser(), main_url); + + // Attempt to navigate the remote frame to a non-web-accessible-resource. + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + content::TestNavigationObserver nav_observer(web_contents, 1); + ASSERT_TRUE(content::ExecJs( + web_contents, content::JsReplace("window.open($1, 'remote-frame')", + non_web_accessible_url))); + + // TODO(lukasza): https://crbug.com/1003957: Enable this test after removing + // ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL. +#if 0 + nav_observer.Wait(); + + // Verify that the navigation has failed. + EXPECT_FALSE(nav_observer.last_navigation_succeeded()); + EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, nav_observer.last_net_error_code()); +#endif +} + +// This is a regression test for https://crbug.com/442579. +IN_PROC_BROWSER_TEST_F( + ExtensionResourceRequestPolicyTest, + WebNavigationToNonWebAccessibleResource_FormTargetingNewWindow) { + const Extension* extension = LoadExtension( + test_data_dir_.AppendASCII("extension_resource_request_policy") + .AppendASCII("inaccessible")); + ASSERT_TRUE(extension); + const GURL non_web_accessible_url = + extension->GetResourceURL("inaccessible-iframe-contents.html"); + + GURL main_url = embedded_test_server()->GetURL("/title1.html"); + ui_test_utils::NavigateToURL(browser(), main_url); + + // Inject and submit a form that will navigate a new window to a + // non-web-accessible-resource. This replicates the repro steps + // from https://crbug.com/442579 (although a simpler repro might + // exist - window.open(non-war-url, '_blank')). + content::WebContentsAddedObserver new_window_observer; + content::WebContents* old_window = + browser()->tab_strip_model()->GetActiveWebContents(); + const char* kScriptTemplate = R"( + var f = document.createElement('form'); + f.target = "extWindow"; + f.action = $1; + f.method = "post"; + document.body.appendChild(f); + f.submit(); + )"; + ASSERT_TRUE(content::ExecJs( + old_window, content::JsReplace(kScriptTemplate, non_web_accessible_url))); + content::WebContents* new_window = new_window_observer.GetWebContents(); + content::TestNavigationObserver nav_observer(new_window, 1); + nav_observer.Wait(); + + // Verify that the navigation has failed. + EXPECT_FALSE(nav_observer.last_navigation_succeeded()); + EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, nav_observer.last_net_error_code()); +} + +} // namespace extensions
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index cfb3b381..96d637f 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1194,6 +1194,11 @@ "expiry_milestone": 80 }, { + "name": "enable-experimental-fling-animation", + "owners": [ "sarsha@microsoft.com" ], + "expiry_milestone": 80 + }, + { "name": "enable-experimental-kernel-vm-support", "owners": [ "jflat", "zwisler" ], "expiry_milestone": 78 @@ -2679,11 +2684,6 @@ "expiry_milestone": 76 }, { - "name": "omnibox-ui-show-placeholder-when-caret-showing", - "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], - "expiry_milestone": 76 - }, - { "name": "omnibox-ui-show-suggestion-favicons", "owners": [ "ender", "chrome-omnibox-team@google.com" ], "expiry_milestone": 79 @@ -2841,6 +2841,11 @@ "expiry_milestone": 82 }, { + "name": "prominent-dark-mode-active-tab-title", + "owners": [ "dfried" ], + "expiry_milestone": 82 + }, + { "name": "pull-to-refresh", "owners": [ "afakhry" ], "expiry_milestone": 83
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 8954498..4025398e 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1443,12 +1443,6 @@ "updated right when the user presses Enter, the user may go to a " "surprising destination."; -const char kOmniboxUIShowPlaceholderWhenCaretShowingName[] = - "Omnibox UI Show Placeholder When Caret Showing"; -const char kOmniboxUIShowPlaceholderWhenCaretShowingDescription[] = - "Shows the \"Search Google or type a URL\" placeholder text in the " - "omnibox when it's focused / the caret cursor is showing."; - const char kOmniboxUIShowSuggestionFaviconsName[] = "Omnibox UI Show Suggestion Favicons"; const char kOmniboxUIShowSuggestionFaviconsDescription[] = @@ -1622,6 +1616,13 @@ const char kPrintPreviewRegisterPromosDescription[] = "Enable registering unregistered cloud printers from print preview."; +const char kProminentDarkModeActiveTabTitleName[] = + "Prominent Dark Mode Active Tab Titles"; +const char kProminentDarkModeActiveTabTitleDescription[] = + "Makes the active tab title in dark mode bolder so the active tab is " + "easier " + "to identify."; + const char kPullToRefreshName[] = "Pull-to-refresh gesture"; const char kPullToRefreshDescription[] = "Pull-to-refresh gesture in response to vertical overscroll."; @@ -2982,6 +2983,12 @@ "Enables the use of an AppContainer for the GPU sandboxed processes to " "improve security."; +const char kExperimentalFlingAnimationName[] = + "Enable experimental fling animation"; +const char kExperimentalFlingAnimationDescription[] = + "Enables the use of a touch fling curve that is based on the behavior of " + "native apps on Windows."; + const char kGdiTextPrinting[] = "GDI Text Printing"; const char kGdiTextPrintingDescription[] = "Use GDI to print text as simply text";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index f7f0336c..47f99fa5 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -873,9 +873,6 @@ extern const char kOmniboxPreserveDefaultMatchAgainstAsyncUpdateName[]; extern const char kOmniboxPreserveDefaultMatchAgainstAsyncUpdateDescription[]; -extern const char kOmniboxUIShowPlaceholderWhenCaretShowingName[]; -extern const char kOmniboxUIShowPlaceholderWhenCaretShowingDescription[]; - extern const char kOmniboxUIShowSuggestionFaviconsName[]; extern const char kOmniboxUIShowSuggestionFaviconsDescription[]; @@ -973,6 +970,9 @@ extern const char kPrintPreviewRegisterPromosName[]; extern const char kPrintPreviewRegisterPromosDescription[]; +extern const char kProminentDarkModeActiveTabTitleName[]; +extern const char kProminentDarkModeActiveTabTitleDescription[]; + extern const char kPullToRefreshName[]; extern const char kPullToRefreshDescription[]; extern const char kPullToRefreshEnabledTouchscreen[]; @@ -1749,6 +1749,9 @@ extern const char kEnableGpuAppcontainerName[]; extern const char kEnableGpuAppcontainerDescription[]; +extern const char kExperimentalFlingAnimationName[]; +extern const char kExperimentalFlingAnimationDescription[]; + extern const char kGdiTextPrinting[]; extern const char kGdiTextPrintingDescription[];
diff --git a/chrome/browser/performance_manager/decorators/freeze_origin_trial_policy_aggregator.cc b/chrome/browser/performance_manager/decorators/freeze_origin_trial_policy_aggregator.cc index 713023b..86af7a4 100644 --- a/chrome/browser/performance_manager/decorators/freeze_origin_trial_policy_aggregator.cc +++ b/chrome/browser/performance_manager/decorators/freeze_origin_trial_policy_aggregator.cc
@@ -129,7 +129,7 @@ void FreezeOriginTrialPolicyAggregator::OnOriginTrialFreezePolicyChanged( const FrameNode* frame_node, - InterventionPolicy previous_value) { + const InterventionPolicy& previous_value) { if (frame_node->IsCurrent()) { auto* page_node = PageNodeImpl::FromNode(frame_node->GetPageNode()); Data* data = Data::Get(page_node);
diff --git a/chrome/browser/performance_manager/decorators/freeze_origin_trial_policy_aggregator.h b/chrome/browser/performance_manager/decorators/freeze_origin_trial_policy_aggregator.h index f6998f32..35147eb 100644 --- a/chrome/browser/performance_manager/decorators/freeze_origin_trial_policy_aggregator.h +++ b/chrome/browser/performance_manager/decorators/freeze_origin_trial_policy_aggregator.h
@@ -27,7 +27,7 @@ void OnIsCurrentChanged(const FrameNode* frame_node) override; void OnOriginTrialFreezePolicyChanged( const FrameNode* frame_node, - InterventionPolicy previous_value) override; + const InterventionPolicy& previous_value) override; // GraphOwned implementation: void OnPassedToGraph(Graph* graph) override;
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl.h b/chrome/browser/performance_manager/graph/frame_node_impl.h index 4ca87b8..c4fa41a 100644 --- a/chrome/browser/performance_manager/graph/frame_node_impl.h +++ b/chrome/browser/performance_manager/graph/frame_node_impl.h
@@ -144,8 +144,9 @@ void Reset(FrameNodeImpl* frame_node, const GURL& url_in); - ObservedProperty::NotifiesOnlyOnChanges<GURL, - &FrameNodeObserver::OnURLChanged> + ObservedProperty::NotifiesOnlyOnChangesWithPreviousValue< + GURL, + &FrameNodeObserver::OnURLChanged> url; bool has_nonempty_beforeunload = false;
diff --git a/chrome/browser/performance_manager/graph/frame_node_impl_unittest.cc b/chrome/browser/performance_manager/graph/frame_node_impl_unittest.cc index d5120a2..1a247b9 100644 --- a/chrome/browser/performance_manager/graph/frame_node_impl_unittest.cc +++ b/chrome/browser/performance_manager/graph/frame_node_impl_unittest.cc
@@ -98,8 +98,8 @@ class LenientMockObserver : public FrameNodeImpl::Observer { public: - LenientMockObserver() {} - ~LenientMockObserver() override {} + LenientMockObserver() = default; + ~LenientMockObserver() override = default; MOCK_METHOD1(OnFrameNodeAdded, void(const FrameNode*)); MOCK_METHOD1(OnBeforeFrameNodeRemoved, void(const FrameNode*)); @@ -108,24 +108,20 @@ MOCK_METHOD1(OnFrameLifecycleStateChanged, void(const FrameNode*)); MOCK_METHOD2(OnOriginTrialFreezePolicyChanged, void(const FrameNode*, - resource_coordinator::mojom::InterventionPolicy)); - MOCK_METHOD1(OnURLChanged, void(const FrameNode*)); + const resource_coordinator::mojom::InterventionPolicy&)); + MOCK_METHOD2(OnURLChanged, void(const FrameNode*, const GURL&)); MOCK_METHOD1(OnIsAdFrameChanged, void(const FrameNode*)); MOCK_METHOD1(OnNonPersistentNotificationCreated, void(const FrameNode*)); MOCK_METHOD1(OnPriorityAndReasonChanged, void(const FrameNode*)); - void SetNotifiedFrameNode(const FrameNode* frame_node) { - notified_frame_node_ = frame_node; + void SetCreatedFrameNode(const FrameNode* frame_node) { + created_frame_node_ = frame_node; } - const FrameNode* TakeNotifiedFrameNode() { - const FrameNode* node = notified_frame_node_; - notified_frame_node_ = nullptr; - return node; - } + const FrameNode* created_frame_node() { return created_frame_node_; } private: - const FrameNode* notified_frame_node_ = nullptr; + const FrameNode* created_frame_node_ = nullptr; }; using MockObserver = ::testing::StrictMock<LenientMockObserver>; @@ -144,50 +140,46 @@ // Create a frame node and expect a matching call to "OnFrameNodeAdded". EXPECT_CALL(obs, OnFrameNodeAdded(_)) - .WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode)); + .WillOnce(Invoke(&obs, &MockObserver::SetCreatedFrameNode)); auto frame_node = CreateNode<FrameNodeImpl>(process.get(), page.get()); + testing::Mock::VerifyAndClear(&obs); + const FrameNode* raw_frame_node = frame_node.get(); - EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); + EXPECT_EQ(raw_frame_node, obs.created_frame_node()); // Invoke "SetIsCurrent" and expect a "OnIsCurrentChanged" callback. - EXPECT_CALL(obs, OnIsCurrentChanged(_)) - .WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode)); + EXPECT_CALL(obs, OnIsCurrentChanged(raw_frame_node)); frame_node->SetIsCurrent(true); - EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); + testing::Mock::VerifyAndClear(&obs); // Invoke "SetNetworkAlmostIdle" and expect an "OnNetworkAlmostIdleChanged" // callback. - EXPECT_CALL(obs, OnNetworkAlmostIdleChanged(_)) - .WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode)); + EXPECT_CALL(obs, OnNetworkAlmostIdleChanged(raw_frame_node)); frame_node->SetNetworkAlmostIdle(); - EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); + testing::Mock::VerifyAndClear(&obs); // Invoke "SetLifecycleState" and expect an "OnFrameLifecycleStateChanged" // callback. - EXPECT_CALL(obs, OnFrameLifecycleStateChanged(_)) - .WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode)); + EXPECT_CALL(obs, OnFrameLifecycleStateChanged(raw_frame_node)); frame_node->SetLifecycleState( resource_coordinator::mojom::LifecycleState::kFrozen); - EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); + testing::Mock::VerifyAndClear(&obs); // Invoke "OnNonPersistentNotificationCreated" and expect an // "OnNonPersistentNotificationCreated" callback. - EXPECT_CALL(obs, OnNonPersistentNotificationCreated(_)) - .WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode)); + EXPECT_CALL(obs, OnNonPersistentNotificationCreated(raw_frame_node)); frame_node->OnNonPersistentNotificationCreated(); - EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); + testing::Mock::VerifyAndClear(&obs); // Invoke "OnNavigationCommitted" and expect an "OnURLChanged" callback. - EXPECT_CALL(obs, OnURLChanged(_)) - .WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode)); + EXPECT_CALL(obs, OnURLChanged(raw_frame_node, _)); frame_node->OnNavigationCommitted(GURL("https://foo.com/"), true); - EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); + testing::Mock::VerifyAndClear(&obs); // Release the frame node and expect a call to "OnBeforeFrameNodeRemoved". - EXPECT_CALL(obs, OnBeforeFrameNodeRemoved(_)) - .WillOnce(Invoke(&obs, &MockObserver::SetNotifiedFrameNode)); + EXPECT_CALL(obs, OnBeforeFrameNodeRemoved(raw_frame_node)); frame_node.reset(); - EXPECT_EQ(raw_frame_node, obs.TakeNotifiedFrameNode()); + testing::Mock::VerifyAndClear(&obs); graph()->RemoveFrameNodeObserver(&obs); }
diff --git a/chrome/browser/performance_manager/graph/properties.h b/chrome/browser/performance_manager/graph/properties.h index 72fe1a4..d3f966b 100644 --- a/chrome/browser/performance_manager/graph/properties.h +++ b/chrome/browser/performance_manager/graph/properties.h
@@ -29,15 +29,18 @@ void (ObserverType::*NotifyFunctionPtr)(const NodeType*)> class NotifiesAlways { public: - NotifiesAlways() {} - explicit NotifiesAlways(PropertyType initial_value) - : value_(initial_value) {} + NotifiesAlways() = default; - ~NotifiesAlways() {} + template <typename U = PropertyType> + explicit NotifiesAlways(U&& initial_value) + : value_(std::forward<U>(initial_value)) {} + + ~NotifiesAlways() = default; // Sets the property and sends a notification. - void SetAndNotify(NodeImplType* node, PropertyType value) { - value_ = std::forward<PropertyType>(value); + template <typename U = PropertyType> + void SetAndNotify(NodeImplType* node, U&& value) { + value_ = std::forward<U>(value); for (auto* observer : node->GetObservers()) ((observer)->*(NotifyFunctionPtr))(node); } @@ -56,18 +59,21 @@ void (ObserverType::*NotifyFunctionPtr)(const NodeType*)> class NotifiesOnlyOnChanges { public: - NotifiesOnlyOnChanges() {} - explicit NotifiesOnlyOnChanges(PropertyType initial_value) - : value_(initial_value) {} + NotifiesOnlyOnChanges() = default; - ~NotifiesOnlyOnChanges() {} + template <typename U = PropertyType> + explicit NotifiesOnlyOnChanges(U&& initial_value) + : value_(std::forward<U>(initial_value)) {} + + ~NotifiesOnlyOnChanges() = default; // Sets the property and sends a notification if needed. Returns true if a // notification was sent, false otherwise. - bool SetAndMaybeNotify(NodeImplType* node, PropertyType value) { + template <typename U = PropertyType> + bool SetAndMaybeNotify(NodeImplType* node, U&& value) { if (value_ == value) return false; - value_ = std::forward<PropertyType>(value); + value_ = std::forward<U>(value); for (auto* observer : node->GetObservers()) ((observer)->*(NotifyFunctionPtr))(node); return true; @@ -83,23 +89,26 @@ // notifying observers. template <typename PropertyType, void (ObserverType::*NotifyFunctionPtr)( - const NodeType*, - PropertyType previous_value)> + const NodeType* node, + const PropertyType& previous_value)> class NotifiesOnlyOnChangesWithPreviousValue { public: - NotifiesOnlyOnChangesWithPreviousValue() {} - explicit NotifiesOnlyOnChangesWithPreviousValue(PropertyType initial_value) - : value_(initial_value) {} + NotifiesOnlyOnChangesWithPreviousValue() = default; - ~NotifiesOnlyOnChangesWithPreviousValue() {} + template <typename U = PropertyType> + explicit NotifiesOnlyOnChangesWithPreviousValue(U&& initial_value) + : value_(std::forward<U>(initial_value)) {} + + ~NotifiesOnlyOnChangesWithPreviousValue() = default; // Sets the property and sends a notification if needed. Returns true if a // notification was sent, false otherwise. - bool SetAndMaybeNotify(NodeImplType* node, PropertyType value) { + template <typename U = PropertyType> + bool SetAndMaybeNotify(NodeImplType* node, U&& value) { if (value_ == value) return false; - PropertyType previous_value = value_; - value_ = std::forward<PropertyType>(value); + PropertyType previous_value = std::move(value_); + value_ = std::forward<U>(value); for (auto* observer : node->GetObservers()) ((observer)->*(NotifyFunctionPtr))(node, previous_value); return true;
diff --git a/chrome/browser/performance_manager/graph/properties_unittest.cc b/chrome/browser/performance_manager/graph/properties_unittest.cc index 5ad4e51..5641b17 100644 --- a/chrome/browser/performance_manager/graph/properties_unittest.cc +++ b/chrome/browser/performance_manager/graph/properties_unittest.cc
@@ -22,24 +22,17 @@ MOCK_METHOD1(NotifyAlwaysConst, void(const DummyNode*)); MOCK_METHOD1(NotifyOnlyOnChangesConst, void(const DummyNode*)); MOCK_METHOD2(NotifyOnlyOnChangesWithPreviousValueConst, - void(const DummyNode*, bool)); + void(const DummyNode*, const bool&)); }; class DummyNode { public: - DummyNode() {} - ~DummyNode() {} + DummyNode() = default; + ~DummyNode() = default; - void AddObserver(DummyObserver* observer) { - observers_.AddObserver(observer); - new_observers_.push_back(observer); - } + void AddObserver(DummyObserver* observer) { observers_.push_back(observer); } - base::ObserverList<DummyObserver>::Unchecked& observers() { - return observers_; - } - - const std::vector<DummyObserver*>& GetObservers() { return new_observers_; } + const std::vector<DummyObserver*>& GetObservers() { return observers_; } bool observed_always() const { return observed_always_.value(); } bool observed_only_on_changes() const { @@ -74,8 +67,7 @@ &DummyObserver::NotifyOnlyOnChangesWithPreviousValueConst> observed_only_on_changes_with_previous_value_{false}; - base::ObserverList<DummyObserver>::Unchecked observers_; - std::vector<DummyObserver*> new_observers_; + std::vector<DummyObserver*> observers_; }; class GraphPropertiesTest : public ::testing::Test { @@ -135,7 +127,7 @@ TEST_F(GraphPropertiesTest, ObservedOnlyOnChangesWithPreviousValueProperty) { EXPECT_FALSE(node_.observed_only_on_changes_with_previous_value()); - EXPECT_FALSE(node_.SetObservedOnlyOnChanges(false)); + EXPECT_FALSE(node_.SetObservedOnlyOnChangesWithPreviousValue(false)); EXPECT_EQ(false, node_.observed_only_on_changes_with_previous_value()); EXPECT_CALL(observer_,
diff --git a/chrome/browser/performance_manager/public/graph/frame_node.h b/chrome/browser/performance_manager/public/graph/frame_node.h index 3cfdf8e..e57d2cb0f 100644 --- a/chrome/browser/performance_manager/public/graph/frame_node.h +++ b/chrome/browser/performance_manager/public/graph/frame_node.h
@@ -176,10 +176,11 @@ // Invoked when the OriginTrialFreezePolicy changes. virtual void OnOriginTrialFreezePolicyChanged( const FrameNode* frame_node, - InterventionPolicy previous_value) = 0; + const InterventionPolicy& previous_value) = 0; // Invoked when the URL property changes. - virtual void OnURLChanged(const FrameNode* frame_node) = 0; + virtual void OnURLChanged(const FrameNode* frame_node, + const GURL& previous_value) = 0; // Invoked when the IsAdFrame property changes. virtual void OnIsAdFrameChanged(const FrameNode* frame_node) = 0; @@ -213,8 +214,9 @@ void OnFrameLifecycleStateChanged(const FrameNode* frame_node) override {} void OnOriginTrialFreezePolicyChanged( const FrameNode* frame_node, - InterventionPolicy previous_value) override {} - void OnURLChanged(const FrameNode* frame_node) override {} + const InterventionPolicy& previous_value) override {} + void OnURLChanged(const FrameNode* frame_node, + const GURL& previous_value) override {} void OnIsAdFrameChanged(const FrameNode* frame_node) override {} void OnNonPersistentNotificationCreated( const FrameNode* frame_node) override {}
diff --git a/chrome/browser/plugins/plugin_observer.cc b/chrome/browser/plugins/plugin_observer.cc index 3fc16b6d..ec8d219 100644 --- a/chrome/browser/plugins/plugin_observer.cc +++ b/chrome/browser/plugins/plugin_observer.cc
@@ -189,8 +189,7 @@ infobars::InfoBarDelegate::PLUGIN_OBSERVER_INFOBAR_DELEGATE, &kExtensionCrashedIcon, l10n_util::GetStringFUTF16(IDS_PLUGIN_INITIALIZATION_ERROR_PROMPT, - plugin_name), - true); + plugin_name)); } void PluginObserver::BlockedOutdatedPlugin(
diff --git a/chrome/browser/resources/chromeos/chromevox/BUILD.gn b/chrome/browser/resources/chromeos/chromevox/BUILD.gn index 39bba1fa..5210a02c 100644 --- a/chrome/browser/resources/chromeos/chromevox/BUILD.gn +++ b/chrome/browser/resources/chromeos/chromevox/BUILD.gn
@@ -158,6 +158,7 @@ "cvox2/background/panel_command.js", "cvox2/background/panel_menu.js", "cvox2/background/panel_menu_item.js", + "cvox2/background/phonetic_data.js", "cvox2/background/recovery_strategy.js", "cvox2/background/tree_dumper.js", "cvox2/background/tree_walker.js", @@ -187,6 +188,7 @@ "host/interface/braille_interface.js", "host/interface/host_factory.js", "host/interface/tts_interface.js", + "third_party/tamachiyomi/ja_phonetic_data.js", "walkers/abstract_node_walker.js", "walkers/abstract_selection_walker.js", "walkers/abstract_shifter.js",
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.html b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.html index feca3b8..feba5a5 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.html +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.html
@@ -6,8 +6,9 @@ <!-- ChromeVox Next --> <!-- <script src="loader.js"></script> --> -<script src="../../chromeVox2ChromeBackgroundScript.js"></script> +<script src="../../chromeVox2ChromeBackgroundScript.js" charset="utf-8"> +</script> <!-- Third party --> <!-- Speech Rule Engine --> -<script src="sre_browser.js"></script>cc +<script src="sre_browser.js"></script>
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js index e48335b..d0de6ad 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js
@@ -30,6 +30,7 @@ goog.require('Output'); goog.require('Output.EventType'); goog.require('PanelCommand'); +goog.require('PhoneticData'); goog.require('constants'); goog.require('cursors.Cursor'); goog.require('cvox.BrailleKeyCommand'); @@ -153,6 +154,7 @@ FindHandler.init(); DownloadHandler.init(); LanguageSwitching.init(); + PhoneticData.init(); Notifications.onStartup();
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/phonetic_data.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/phonetic_data.js new file mode 100644 index 0000000..55e6b91c --- /dev/null +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/phonetic_data.js
@@ -0,0 +1,61 @@ +// 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. + +/** + * @fileoverview Provides phonetic disambiguation functionality across multiple + * languages for ChromeVox. + * + */ + +goog.provide('PhoneticData'); + +goog.require('JaPhoneticData'); + +/** + * Maps languages to their phonetic maps. + * @type {Object<string,Object<string,string>>} + * @private + */ +PhoneticData.phoneticMap_ = {}; + +/** + * Initialization function for PhoneticData. + */ +PhoneticData.init = function() { + try { + // The UI language of the browser. This corresponds to the system language + // set by the user. Behind the scenes, the getUIlanguage() API retrieves the + // locale that was passed from the browser to the renderer via the --lang + // command line flag. + var browserUILanguage = chrome.i18n.getUILanguage().toLowerCase(); + // Phonetic disambiguation data for the browserUI language. + // This is loaded from a chromevox_strings_*.xtb file, where * is a variable + // language code that corresponds to the system language. + var browserUILanguagePhoneticMap = /** @type {Object<string,string>} */ + (JSON.parse(Msgs.getMsg('phonetic_map'))); + PhoneticData.phoneticMap_[browserUILanguage] = browserUILanguagePhoneticMap; + } catch (e) { + console.log('Error: unable to parse phonetic map message.'); + } + PhoneticData.phoneticMap_['ja'] = JaPhoneticData.phoneticMap_; +}; + +/** + * Returns the phonetic disambiguation for the provided character in the + * provided language. Returns empty string if disambiguation can't be found. + * @param {string} language + * @param {string} character + * @return {string} + */ +PhoneticData.getPhoneticDisambiguation = function(language, character) { + if (!language) + return ''; + language = language.toLowerCase(); + // If language isn't in the map, try stripping extra information, such as the + // country and/or script codes (e.g. "en-us" or "zh-hant-hk") and use only the + // language code to do a lookup. + if (!PhoneticData.phoneticMap_[language]) + language = language.split('-')[0]; + return PhoneticData.phoneticMap_[language][character] || ''; +};
diff --git a/chrome/browser/resources/chromeos/chromevox/host/chrome/tts_background.js b/chrome/browser/resources/chromeos/chromevox/host/chrome/tts_background.js index a2efd06..ddb3dae 100644 --- a/chrome/browser/resources/chromeos/chromevox/host/chrome/tts_background.js +++ b/chrome/browser/resources/chromeos/chromevox/host/chrome/tts_background.js
@@ -11,6 +11,7 @@ goog.provide('cvox.TtsBackground'); goog.require('PanelCommand'); +goog.require('PhoneticData'); goog.require('cvox.AbstractTts'); goog.require('cvox.ChromeTtsBase'); goog.require('cvox.ChromeVox'); @@ -102,18 +103,6 @@ */ this.timeoutId_; - try { - /** - * @type {Object<string>} - * @private - * @const - */ - this.PHONETIC_MAP_ = - /** @type {Object<string>} */ (JSON.parse(Msgs.getMsg('phonetic_map'))); - } catch (e) { - console.log('Error; unable to parse phonetic map msg.'); - } - /** * Capturing tts event listeners. * @type {Array<cvox.TtsCapturingEventListener>} @@ -589,7 +578,7 @@ // to pronouncePhonetically_ if we fail to pronounce on this invokation or if // this text is math which should never be pronounced phonetically. if (properties.math || !properties['phoneticCharacters'] || - !this.pronouncePhonetically_(text)) { + !this.pronouncePhonetically_(text, properties)) { this.clearTimeout_(); } @@ -679,20 +668,22 @@ /** * Pronounces single letters phonetically after some timeout. * @param {string} text The text. + * @param {Object} properties Speech properties to use for this utterance. * @return {boolean} True if the text resulted in speech. * @private */ -cvox.TtsBackground.prototype.pronouncePhonetically_ = function(text) { - if (!this.PHONETIC_MAP_) { - return false; - } +cvox.TtsBackground.prototype.pronouncePhonetically_ = function( + text, properties) { text = text.toLowerCase(); - text = this.PHONETIC_MAP_[text]; + // If undefined language, use the UI language of the browser as a best guess. + if (!properties['lang']) + properties['lang'] = chrome.i18n.getUILanguage(); + text = PhoneticData.getPhoneticDisambiguation(properties['lang'], text); if (text) { this.clearTimeout_(); var self = this; this.timeoutId_ = setTimeout(function() { - self.speak(text, cvox.QueueMode.QUEUE); + self.speak(text, cvox.QueueMode.QUEUE, properties); }, cvox.TtsBackground.PHONETIC_DELAY_MS_); return true; }
diff --git a/chrome/browser/resources/chromeos/chromevox/third_party/tamachiyomi/LICENSE b/chrome/browser/resources/chromeos/chromevox/third_party/tamachiyomi/LICENSE new file mode 100644 index 0000000..92b7e7d --- /dev/null +++ b/chrome/browser/resources/chromeos/chromevox/third_party/tamachiyomi/LICENSE
@@ -0,0 +1,20 @@ +Each datum is copyrighted by the Tamachi phonetic kanji alphabet development +team and is released under the MIT License. + +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.
diff --git a/chrome/browser/resources/chromeos/chromevox/third_party/tamachiyomi/ja_phonetic_data.js b/chrome/browser/resources/chromeos/chromevox/third_party/tamachiyomi/ja_phonetic_data.js new file mode 100644 index 0000000..4389c783 --- /dev/null +++ b/chrome/browser/resources/chromeos/chromevox/third_party/tamachiyomi/ja_phonetic_data.js
@@ -0,0 +1,7134 @@ +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Provides Japanese phonetic disambiguation data for ChromeVox. + * + */ + +goog.provide('JaPhoneticData'); + +/** + * An object containing phonetic disambiguation data for Japanese. + * @type {Object<string,string>} + * @const + */ +JaPhoneticData.phoneticMap_ = { + ' ': ' スペース', + '團': 'ダン,ダンタイコウドウノダンノキュウジ', + '土': 'ドヨウビ ノ ド,ツチ', + '圜': 'カン,クニガマエニシゼンカンキョウノカンノツクリ', + '園': 'ドウブツエン ノ エン', + '圓': 'エン,ヒャクエンダマノエンノキュウジ', + '圖': 'ズ,トショカンノトノキュウジ', + '國': 'クニ,コクゴノコクノキュウジ', + '圈': 'ケン,シュトケンノケンノキュウジ', + '圉': 'ギョ,クニガマエニシアワセ', + '圏': 'シュトケン ノ ケン', + '圍': 'カコム,イゴノイノキュウジ', + '圃': 'ハタケ ノ イミ ノ ホジョウ ノ ホ', + '圀': 'クニノイタイジ,トクガワミツクニノクニ', + '圄': 'ゴ,クニガマエニタゴサクノゴ', + '圻': 'キ,ツチヘンニショクパンイッキンノキン', + '圸': 'ママ,ツチヘンニヤマ', + '地': 'チキュウ ノ チ', + '圷': 'アクツ,ツチヘンニジョウゲノゲ', + '在': 'ソンザイ ノ ザイ', + '圭': 'ツチ フタツ ノ ケイ', + '圦': 'イリ,ツチヘンニニュウガクスルノニュウ', + '圧': 'アツリョク ノ アツ', + '亀': 'ドウブツ ノ カメ,キ', + '棲': 'ドウセイスル ノ セイ,スム', + '亂': 'コンランスルノラン,ミダレル', + '亅': 'ケツ,カンジノブシュノハネボウ', + '了': 'リョウショウスル ノ リョウ', + '争': 'キョウソウ ノ ソウ,アラソウ', + '予': 'ヨテイ ノ ヨ', + '事': 'ジケン ノ ジ,コト', + '亊': 'ジケンノジ,コトノイタイジ', + '二': 'カンスウジ ノ ニ', + '于': 'ウ,ウチュウノウノウカンムリヲトッタモノ', + '云': 'ウンヌン ノ ウン,イウ', + '棡': 'コウ,キヘンニオカヤマケンノオカ', + '互': 'ゴカク ノ ゴ,タガイ', + '井': 'イドミズ ノ イ', + '五': 'カンスウジ ノ ゴ', + '棧': 'サンバシノサンノキュウジ', + '亙': 'ジンメイヨウワタル ノ キョヨウジタイ', + '亘': 'ジンメイ ノ ワタル,カキネ ノ カキ ノ ツクリ', + '些': 'ササイ ノ サ,イササカ', + '亜': 'アネッタイ ノ ア', + '亟': 'キ,ホッキョクノキョクノツクリ', + '亞': 'アネッタイノアノキュウジ', + '亡': 'ボウメイスル ノ ボウ', + '亠': 'トウ,ブシュノナベブタ', + '棒': 'テツボウ ノ ボウ', + '亢': 'コウ,テイコウスルノコウノツクリ', + '亥': 'イ,ジュウニシ ノ イノシシ', + '交': 'コウツウ ノ コウ,マジワル', + '亦': 'セツゾクシ ノ マタ,ヘンカスル ノ ヘン ノ ウエガワ', + '棘': 'トゲ,キョクヒドウブツノキョク', + '亨': 'キョウ,ナベブタニ クチニ リョウ', + '享': 'キョウラクテキ ノ キョウ', + '亭': 'テイシュ ノ テイ', + '京': 'トウキョウ ノ キョウ', + '亮': 'ジンメイ ノ リョウ,ショカツリョウ ノ リョウ', + '亰': 'トウキョウノキョウノイタイジ', + '亳': 'ハク,コダイチュウゴクノインノミヤコノヒトツ', + '棄': 'ハキスル ノ キ,ステル', + '棆': 'リン,キヘンニリンリテキナノリン', + '亶': 'タン,ブツダンノダンノツクリ', + '棉': 'ショクブツ ノ ワタ,キヘン', + '棊': 'キ,ショウギヲサスノギノイタイジ', + '人': 'ヒト,ニンゲン ノ ニン', + '棍': 'コンボウノコン,キヘンニコンチュウノコン', + '酳': 'イン,ジュウニシノトリノミギニイトガシラニツキ', + '酵': 'コウボキン ノ コウ', + 'k': 'ケイ キッチン', + '酪': 'ラクノウ ノ ラク', + '霊': 'レイエン ノ レイ,タマ', + '酘': 'トウ,ジュウニシノトリノミギニルマタ', + '‡': 'ダブルダガー', + '酖': 'タン,ジュウニシノトリノミギニシズムノツクリ', + '酉': 'トリ,ジュウニシ ノ トリ', + '酋': 'シュウチョウ ノ シュウ', + '棹': 'トウ,サオ,キヘンニタッキュウノタク', + '棺': 'カンオケ ノ カン,ヒツギ', + '酌': 'バンシャク ノ シャク', + 'A': 'エイ アニマル', + '蓁': 'シン,クサカンムリニシンノシコウテイノシン', + '蓆': 'セキ,クサカンムリニザセキノセキ', + '蓄': 'チョチク ノ チク', + '蓊': 'オウ,クサカンムリニオキナ', + '蓋': 'ズガイコツ ノ ガイ,フタ', + '蓉': 'ショクブツ ノ フヨウ ノ ヨウ', + '蓍': 'シ,クサカンムリニヒレノツクリ', + '蓐': 'ジョク,クサカンムリニブジョクスルノジョク', + '蓑': 'ミノムシ ノ ミノ', + '蓖': 'ヒマシユノヒ', + '蓚': 'シュウ,クサカンムリニシュウリスルノシュウ', + '蓙': 'ゴザノザ,クサカンムリニギンザノザ', + '棠': 'トウ,コッカイギジドウノドウノツチノカワリニモクザイノモク', + '蓮': 'レンコン ノ レン,ハス', + '蓬': 'ホウライサン ノ ホウ,ヨモギ', + '棣': 'テイ,キヘンニレイヅクリ', + '蓴': 'ジュンサイノジュン', + '蓿': 'シュク,クサカンムリニシュクダイノシュク', + '蓼': 'タデクウムシモスキズキノタデ', + '有': 'ユウメイジン ノ ユウ,アル', + '月': 'ゲツヨウビ ノ ゲツ,ツキ', + '朋': 'ホウユウ ノ ホウ,トモ', + '服': 'ヨウフク ノ フク', + '朏': 'ヒ、ミカヅキ、ツキヘンニデル', + '最': 'サイショ ノ サイ,モットモ', + '會': 'カイシャノカイ,アウノキュウジ', + '望': 'キボウ ノ ボウ,ノゾム', + '朝': 'アサヒ ノ アサ,チョウ', + '期': 'キタイスル ノ キ', + '朞': 'キ、キホンノキノツチノカワリニツキ', + '朕': 'チンオモウニ ノ チン', + '朔': 'サクジツ ノ サク,ツイタチ', + '朗': 'ロウドク ノ ロウ', + '朖': 'ロウドクノロウノイタイジ、ツキヘンニカイリョウスルノリョウ', + '木': 'モクヨウビ ノ モク,キ', + '末': 'ネンマツ ノ マツ,スエ', + '未': 'ミライ ノ ミ', + '札': 'ナフダ ノ フダ,サツ', + '本': 'ホンモノ ノ ホン,モト', + '朮': 'ジュツ、ジュツゴノジュツノツクリ', + '朧': 'モウロウトスルノロウ', + '朦': 'モウロウトスルノモウ', + '朸': 'ロク、キヘンニチカラ', + '机': 'ツクエ', + '朽': 'ロウキュウカスル ノ キュウ,クチル', + '森': 'シンリン ノ シン,モリ', + '朿': 'シ、トゲ、シゲキスルノシノヒダリガワ', + '朱': 'シュイロ ノ シュ', + '棯': 'ジン,キヘンニザンネンノネン', + '朴': 'ソボクナ ノ ボク', + '朷': 'トウ、キヘンニカタナ', + '朶': 'ミミタブヲイミスルジダノダ', + '棔': 'コン,キヘンニコンスイジョウタイノコン', + '棕': 'シュロノキノシュ', + '棗': 'ショクブツノナツメ', + '棚': 'タナオロシ ノ タナ', + '砿': 'イシヘン ニ ヒロイ ノ コウ', + '砺': 'レイ,イシヘン ニ ガンダレ ニ マン', + '破': 'ハカイスル ノ ハ,ヤブル', + '砲': 'ホウガンナゲ ノ ホウ', + '砥': 'トイシ ノ ト', + '砦': 'トリデ,コレ ノ シタニ イシ', + '棟': 'ビョウトウ ノ トウ,ムネ', + '砠': 'ショ,イシヘンニクミノツクリ', + '研': 'ケンキュウ ノ ケン', + '砕': 'クダク,フンサイスル ノ サイ', + '砒': 'ゲンソノヒソノヒ', + '砌': 'セイ,ミギリ,イシヘンニセツジツナノセツ', + '砂': 'サトウ ノ サ,スナ', + '髱': 'ホウ,カミガシラニツツム', + '髷': 'キョク,マゲ,カミガシラニマゲル', + '髴': 'ホウフツノフツ,カミガシラニフットウスルノフツノツクリ', + '髻': 'ケイ,カミガシラニダイキチノキチ', + '髣': 'ホウフツノホウ,カミガシラニセイホウケイノホウ', + '髢': 'テイ,カミガシラニナリ,カモジ', + '髦': 'ボウ,カミガシラニケイトノケ', + '髫': 'チョウ,カミガシラニマネクノツクリ', + '髪': 'カミノケ ノ カミ,ハツ', + '髯': 'ゼン,ホウヒゲ', + '髮': 'カミノケノカミノキュウジ', + '髭': 'クチヒゲ ノ ヒゲ', + '髓': 'セキズイノズイノキュウジ', + '髑': 'ドクロノドク', + '棋': 'キ,ショウギ ノ ギ', + '體': 'カラダ,タイイクノタイノキュウジ', + '高': 'タカイ,サイコウ ノ コウ', + '髟': 'ヒョウ,カミガシラ', + '髞': 'ソウ,タカイヒクイノタカイニアヤツルノツクリ', + '髀': 'ヒ,ホネヘンニイヤシイ', + '髄': 'セキズイ ノ ズイ', + '髏': 'ドクロノロ', + '巉': 'ザン,ヤマヘンニザンゲンスルノザンノツクリ', + '巍': 'ギ,ヤマノシタニギシワジンデンノギ', + '巌': 'ガンリュウジマ ノ ガン,イワオ', + '巛': 'セン,ブシュノマガリガワ', + '州': 'キュウシュウチホウ ノ シュウ', + '川': 'カセン ノ セン,カワ', + '巓': 'ヤマノイタダキヲイミスルサンテンノテン', + '巒': 'ラン,コイビトノコイノキュウジノココロノカワリニヤマ', + '巖': 'ゲンジュウナノゲン,キビシイノキュウジ', + '巫': 'ジンジャノミコノフ', + '巨': 'キョダイナ ノ キョ', + '差': 'サベツカスル ノ サ', + '巣': 'ハチノス ノ ス', + '巡': 'ジュンカイ ノ ジュン,メグル', + '巧': 'ギコウテキナ ノ コウ,タクミ', + '左': 'ヒダリ,サユウ ノ サ', + '工': 'ズコウ ノ コウ', + '巻': 'ノリマキ ノ マキ', + '巾': 'ゾウキン ノ キン,ハバ', + '巽': 'ホウガク ノ タツミ', + '巳': 'ミ,ジュウニシ ノ ミ', + '已': 'ブンポウノイゼンケイノイ', + '己': 'ジコショウカイ ノ コ,オノレ', + '樒': 'ミツ,キヘンニヒミツノミツ', + '巷': 'チマタ ノ コエ ノ チマタ,コウ', + '巵': 'シ,サカズキノイタイジ', + '巴': 'トモエナゲ ノ トモエ', + '燕': 'ツバメ', + '燔': 'ハン,ヒヘンニバンゴウノバン', + '燗': 'アツカンノカン', + '燐': 'リンサンヒリョウ ノ リン', + '燒': 'ニクヲヤクノヤクノキュウジ', + '營': 'エイギョウノエイ,イトナムノキュウジ', + '燃': 'ネンリョウ ノ ネン,モエル', + '燎': 'リョウゲンノヒノリョウ', + '燉': 'トン,ヒヘンニチュウゴクノトンコウノトン', + '燈': 'トウダイ ノ トウ,ヒヘン ニ ノボル', + '燵': 'コタツノタツ', + '燼': 'カイジンニキスノジン', + '燿': 'ヨウ,ヒヘンニニチヨウビノヨウノツクリ', + '燹': 'セン,ブタノツクリフタツノシタニカヨウビノカ', + '燻': 'クンセイノクン,クスベルノイタイジ', + '燥': 'カンソウキ ノ ソウ', + '燧': 'スイ,ヒヘンニトゲルノキュウジ', + '燦': 'サンゼントカガヤク ノ サン', + '燠': 'イク,ヒヘンニオクバノオクノキュウジ', + '燭': 'ショクダイ ノ ショク,ロウソク ノ ソク', + '燬': 'キ,ヒヘンニメイヨキソンノキ', + '燮': 'チョウワサセルノイミノショウ', + '齒': 'ハブラシノハノキュウジ', + '鰥': 'カン,オトコヤモメノヤモオ', + '麸': 'オフノフ,ムギニオット', + '樵': 'キコリ', + '麺': 'メンルイ ノ メン', + '齟': 'ソゴヲキタスノソ', + '齎': 'モタラス,セイ', + '鰯': 'イワシ,サカナヘン ニ ヨワイ', + '齲': 'ウシノウ,ムシバ', + 'X': 'エックス エックスセン', + '齷': 'アクセクスルノアク,ハノキュウジノミギニオクジョウノオク', + '齶': 'アゴ,ガク,ハノキュウジノミギニガクゼントスルノガクノツクリ', + '訳': 'ツウヤク ノ ヤク,ワケ', + '許': 'キョカスル ノ キョ,ユルス', + '閇': 'ヘイテンノヘイ,トジルノイタイジ', + '門': 'センモン ノ モン', + '訶': 'マカフシギノカ', + '閂': 'カンヌキ', + '訴': 'ウッタエル,ソショウ ノ ソ', + '註': 'チュウシャク ノ チュウ,ゴンベン ニ シュジンコウ ノ シュ', + '診': 'シンサツスル ノ シン,ミル', + '閏': 'ウルウドシ ノ ウルウ', + '閉': 'ヘイテン ノ ヘイ,トジル', + '閊': 'ムネガツカエルノツカエル,モンガマエニヤマ', + '証': 'ショウメイショ ノ ショウ', + '訣': 'ケツベツ ノ ケツ,ワカレル', + '閖': 'ロウ,モンガマエニミズ', + '閑': 'カンコドリ ノ カン,ヒマ', + '訥': 'ボクトツノトツ', + '間': 'ジカン ノ カン,アイダ', + '訪': 'ホウモンスル ノ ホウ,オトズレル', + '閘': 'コウ,モンガマエニコウオツノコウ', + '閙': 'ドウ,モンガマエニイチバノイチ', + '設': 'セツビ ノ セツ', + '訓': 'クンレン ノ クン', + '閥': 'ハバツ ノ バツ', + '訐': 'ケツ,ゴンベンニホス', + '託': 'タクジショ ノ タク', + '訖': 'キツ,ゴンベンニアマゴイノコウ', + '関': 'カンケイ ノ カン,セキ', + '閣': 'テンシュカク ノ カク', + '訛': 'オクニナマリノナマリ、カ', + '閭': 'リョ,モンガマエニオフロノロ', + '記': 'キロク ノ キ,シルス', + '訟': 'ソショウ ノ ショウ', + '訝': 'ケゲンナカオノゲン、イブカル', + '訃': 'フホウヲキクノフ', + '訂': 'テイセイスル ノ テイ', + 'r': 'アール ルーム', + '閲': 'エツランスル ノ エツ', + '閼': 'フサグヲイミスルモンガマエノアツ', + '訊': 'ジンモン ノ ジン,トウ', + '閾': 'イキ,モンガマエニアルイハノアル', + '計': 'トケイ ノ ケイ,ハカル', + '討': 'トウロンスル ノ トウ', + '訌': 'コウ、ゴンベンニズガコウサクノコウ', + '齧': 'ゲッシルイノゲツ,カジル', + '送': 'ホウソウキョク ノ ソウ,オクル', + '.': 'ピリオド', + '蕀': 'キョク,クサカンムリニキョクヒドウブツノキョク', + '蕁': 'ジンマシンノジン', + '蕃': 'バン,クサカンムリ ニ バンゴウ ノ バン', + '蕎': 'ショクブツ ノ ソバ,キョウ', + '蕈': 'シン,クサカンムリニニシノシタニハヤオキノハヤイ', + '蕉': 'ミズバショウ ノ ショウ', + '蕊': 'メシベ ノ シベ,ズイ', + '蕋': 'メシベノシベ,ズイノイタイジ,クサカンムリニシケツスルノシミッツ', + '蕕': 'ユウ,クサカンムリニユウヨスルノユウ', + '蕗': 'ショクブツ ノ フキ', + '蕘': 'ジョウ,クサカンムリニギョウシュンノギョウノキュウジ', + '蕚': 'ショクブツノハナノガクノイタイジ', + '蕣': 'シュン,クサカンムリニギョウシュンノシュン', + '蕭': 'ショウ,クサカンムリニゲンシュクナノシュクノキュウジ', + '蕨': 'ショクブツ ノ ワラビ', + '蕩': 'ホウトウムスコ ノ トウ', + '蕪': 'ヤサイ ノ カブ', + '蕷': 'ヨ,クサカンムリニアズケル', + '蕾': 'ツボミ,ライ,クサカンムリニカミナリ', + '駁': 'ハンバクスル ノ バク', + '嚔': 'テイ,クサメ', + '嚏': 'テイ,クサメノイタイジ', + '嚊': 'カカアデンカノカカ,クチヘンニハナカゼノハナ', + '嚆': 'ハジマリヲイミスルコウシノコウ', + '嚇': 'イカクスル ノ カク', + '嚀': 'ネイ,クチヘンニテイネイノネイ', + '嚼': 'ソシャクスルノシャク,カム', + '嚴': 'ゲンジュウナノゲン,キビシイノキュウジ', + '嚶': 'オウ,クチヘンニサクラノキュウジノツクリ', + '嚮': 'キョウ,ウマレコキョウノキョウノシタニムカウ', + '嚥': 'エンゲスルノエン', + '嚠': 'リュウ,クチヘンニリュウホウノリュウ', + '嚢': 'ヒョウノウ ノ ノウ,フクロ', + '桾': 'クン,キヘンニショクンノクン', + '桿': 'カン、キヘンニホスノイタイジ', + '桶': 'オケ,フロオケ ノ オケ', + '桷': 'カク,キヘンニツノ', + '桴': 'フ,キヘンニツメノシタニコドモノコ', + '档': 'トウ,キヘンニベントウノトウ', + '桧': 'ショクブツ ノ ヒノキ,キヘン ニ カイシャ ノ カイ', + '桙': 'ウ,ホコ,キヘンニシャカムニノム', + '桟': 'サンバシ ノ サン', + '桜': 'サクラ', + '桝': 'キヘン ノ マス ノ イタイジ', + '桓': 'カンムテンノウ ノ カン', + '桐': 'キリ ノ タンス ノ キリ', + '桑': 'クワノキ ノ クワ,ソウ', + '桔': 'キヘン ニ キチ,キキョウ ノ イチモジメ', + '案': 'アンナイ ノ アイ', + '桎': 'シッコクトナルノシツ,アシカセ,キヘンニゲシノシ', + '桍': 'コ,キヘンニハカマノツクリ', + '桂': 'ゲッケイジュ ノ ケイ,カツラ', + '桃': 'モモタロウ ノ モモ', + '桀': 'ケツ,ゴウケツノケツノツクリ', + '桁': 'ケタハズレ ノ ケタ', + '框': 'アガリカマチノカマチ', + '碆': 'ハ,ハチョウガアウノハノシタニイシバシノイシ', + '碇': 'テイハク ノ テイ,イカリ', + '碁': 'ゴイシ ノ ゴ', + '碎': 'クダク,フンサイスルノサイノキュウジ', + '碌': 'ロク,イシヘンニミドリノキュウジノツクリ', + '碍': 'ユウズウムゲ ノ ゲ,ガイ', + '颪': 'オロシ,ジョウゲノシタノシタニカゼ', + '驥': 'キビニフスノキ', + '碗': 'イシヘン ノ チャワン ノ ワン', + '碕': 'イシヘン ニ キミョウナ ノ キ', + '碓': 'ウス,イシヘン ニ フルトリ', + '碑': 'キネンノヒ ノ ヒ,イシブミ', + '碚': 'ハイ,イシヘンニバイリツノバイノツクリ', + '驫': 'ヒョウ,ウマガミッツ', + '驪': 'レイ,ウマヘンニウルワシイ', + '驕': 'キョウマンナノキョウ,オゴル', + '碧': 'ヘキガン ノ ヘキ', + '驗': 'シケンヲウケルノケンノキュウジ', + '碣': 'ケツ,イシヘンニカッショクノカツノツクリ', + '碯': 'ノウ,イシヘンニズノウノノウノキュウジノツクリ', + '驟': 'シュウウノシュウ,ウマヘンニジュラクダイノジュ', + '碪': 'キヌタ,イシヘンニハナハダシイ', + '驛': 'エキビルノエキノキュウジ', + '碩': 'セキガク ノ セキ,イシヘン ニ ページ', + '驅': 'ヨンリンクドウノク,カケルノキュウジ', + '碵': 'セキ,イシヘンニテイシュクノテイ', + '驀': 'バクシンスルノバク', + '驃': 'ヒョウ,ウマヘンニトウヒョウスルノヒョウ', + '驂': 'サン,ウマヘンニサンカスルノサン,マイルノキュウジ', + '碾': 'テン,イシヘンニハッテンノテン', + '碼': 'ナガサノタンイノヤード', + '確': 'カクニン ノ カク,タシカ', + '駈': 'カケル,ウマヘン ニ オカ', + '颱': 'タイフウヲイミスルタイ,カゼノミギニダイドコロノダイ', + 'o': 'オー オープン', + '颶': 'グ,カゼノミギニドウグノグ', + '悒': 'ユウ,リッシンベンニトユウノユウ', + '悗': 'バン,リッシンベンニメンキョノメン', + '悖': 'ボツ,リッシンベンニボッパツスルノボツノヒダリガワ', + '悔': 'コウカイスル ノ カイ,クヤム', + '悛': 'カイシュンノジョウノシュン', + '悚': 'ショウ,リッシンベンニタバ', + '悟': 'サトル,カクゴ ノ ゴ', + '悃': 'コン,リッシンベンニコマル', + '悁': 'エン,リッシンベンニキヌイトノキヌノツクリ', + '悄': 'ショウゼンタルスガタノショウ,リッシンベンニショウゾウガノショウ', + '悋': 'シットヲイミスルリンキノリン', + '闃': 'ケキ,モンガマエニモクテキノモクノシタニイヌ', + '悉': 'シッカイ ノ シツ,コトゴトク', + '悍': 'セイカンナカオツキノカン', + '悌': 'テイ,リッシンベン ニ オトウト', + '悳': 'トク,ドウトクノトクノイタイジ', + '悲': 'ヒゲキ ノ ヒ,カナシイ', + '悶': 'クモンスル ノ モン,モダエル', + '悵': 'チョウ,リッシンベンニチョウタンノチョウ', + '悴': 'ショウスイスルノスイ', + '悸': 'ドウキガスルノキ', + '悽': 'セイ,リッシンベンニフサイノサイ,ツマ', + '悼': 'アイトウ ノ トウ,イタム', + '患': 'カンジャ ノ カン,ワズラウ', + '悠': 'ユウユウジテキ ノ ユウ', + '悧': 'レイリノリ,リッシンベンニケンリノリ', + '悦': 'エツラク ノ エツ,ヨロコブ', + '悪': 'ゼンアク ノ アク,ワルイ', + '悩': 'ナヤム,クノウスル ノ ノウ', + 'E': 'イー エッグ', + '闊': 'ウカツナノカツ', + '闖': 'チンニュウスルノチン,モンガマエニウマ', + '闕': 'ケイバツノケッショノケツ', + '誰': 'ダレカサン ノ ダレ', + '課': 'ホウカゴ ノ カ', + '誼': 'ヨシミヲツウズル ノ ヨシミ,ギ', + '調': 'チョウサ ノ チョウ,シラベル', + '誹': 'ヒボウスル ノ ヒ,ソシル', + '誥': 'コウ,ゴンベンニツゲル', + '誤': 'ゴカイスル ノ ゴ,アヤマリ', + '誦': 'シヲアンショウスルノショウ', + '誡': 'カイ,ゴンベンニイマシメル', + '誠': 'セイジツナ ノ セイ,マコト', + '誣': 'ブコクザイノブ', + '読': 'ヨム,ドクショ ノ ドク', + '説': 'セツメイ ノ セツ,トク', + '誨': 'カイ,ゴンベンニマイニチノマイ', + '誕': 'タンジョウビ ノ タン', + '關': 'カンケイスルノカン,セキノキュウジ', + '誑': 'タブラカス,キョウ', + '誓': 'チカウ,セイヤクショ ノ セイ', + '語': 'コクゴ ノ ゴ,カタル', + '誘': 'サソウ,ユウワク ノ ユウ', + '誚': 'ショウ,ゴンベンニショウゾウガノショウ', + '誅': 'テンチュウヲクワエルノチュウ', + '誄': 'ルイ,ゴンベンニライスキ', + '誇': 'ホコリ,コチョウスル ノ コ', + '誂': 'アツラエル,チョウ', + '認': 'カクニン ノ ニン,ミトメル', + '誌': 'ザッシ ノ シ', + '誉': 'メイヨ ノ ヨ,ホマレ', + '闥': 'タツ,モンガマエニハイタツノタツ', + '闢': 'テンチカイビャクノビャク', + '嵌': 'ハメキザイクノハメル,カン', + '嵎': 'グウ,ヤマヘンニグウゼンノグウノツクリ', + '嵋': 'ビ,ヤマヘンニマユゲノマユ', + '嵜': 'ナガサキケンノサキノイタイジ', + '℡': 'テレフォン', + '嵐': 'アラシヤマ ノ アラシ', + '嵒': 'ガン,シナモノノシナノシタニヤマ', + '嵬': 'カイ,ヤマノシタニオニ', + '嵯': 'サガテンノウ ノ サ', + '嵩': 'カサアゲスル ノ カサ', + '嵶': 'タワ,ヤマヘンニヨワイ', + '嵳': 'サ,ヤマノシタニサベツカスルノサ', + '灘': 'ナダ,サンズイ ニ ムズカシイ', + '灑': 'サイ,サンズイニチュウカナベノカ', + '灌': 'カンガイヨウスイノカン', + '嫁': 'ハナヨメ ノ ヨメ', + '災': 'サイナン ノ サイ,ワザワイ', + '灼': 'シャクネツ ノ シャク', + '灸': 'オキュウヲスエル ノ キュウ', + '灰': 'ハイイロ ノ ハイ', + '灯': 'ケイコウトウ ノ トウ', + '火': 'カヨウビ ノ カ,ヒ', + '灣': 'ワンガンノワンノキュウジ', + '嘯': 'ショウ,ウソブク,クチヘンニシシュウノシュウノツクリ', + '嘩': 'クチゲンカ ノ カ', + '嘶': 'イナナク,セイ', + '嘴': 'クチバシ,シ', + '嘲': 'チョウショウスルノチョウ,アザケル', + '嘱': 'ショクタクスル ノ ショク', + '嘸': 'サゾカシノサゾ,クチヘンニムリノム', + '嘆': 'ナゲク,タンガンスル ノ タン', + '嘉': 'カ,ヨロコブ ノ シタガ クワエル', + '嘖': 'サク,クチヘンニセキニンノセキ', + '嘗': 'ガシンショウタン ノ ショウ,ナメル', + '嘔': 'オウトスルノオウ,クチヘンニクベツスルノクノキュウジ', + '嘛': 'ラマキョウノマ,クチヘンニマスイノマ', + '嘘': 'ウソツキ ノ ウソ', + '槽': 'ヨクソウ ノ ソウ', + '槿': 'キン,ショクブツノムクゲ', + '槹': 'コウ,キヘンニサツキノイチモジメ', + '槻': 'ショクブツ ノ ツキ,キヘン ニ キソクテキ ノ キ', + '槲': 'コク,キヘンニツノニホクトシチセイノト', + '槭': 'シュク,キヘンニトオイシンセキノセキ', + '槨': 'カク,キヘンニリンカクノカク', + '槫': 'セン,キヘンニセンモンノセンノキュウジ', + '槧': 'ザン,ザンシンナノザンノシタニモクザイノモク', + '槝': 'カシノキノカシ,キヘンニシマグニノシマ', + '槞': 'ロウ,キヘンニキョウリュウノリュウ', + '様': 'カミサマ ノ サマ,ヨウ', + '℃': 'ドシー', + '槐': 'カイ,ショクブツノエンジュ', + '槓': 'コウ,キヘンニミツグ', + '槌': 'テッツイ ノ ツイ,ツチ', + '槍': 'ヤリナゲ ノ ヤリ', + '槎': 'サ,キヘンニサベツカスルノサ', + '槊': 'サク,ハッサクノサクノシタニモクザイノモク', + '構': 'コウゾウ ノ コウ,カマエル', + '槇': 'ショクブツノマキノキュウジ', + '槁': 'コウ,キヘンニタカイヒクイノタカイ', + '槃': 'ネハンノハン', + '\\': 'エンマーク', + '藏': 'レイゾウコノゾウノイタイジ', + '藍': 'アイイロ ノ アイ,ラン', + '藉': 'セキ,ロウゼキモノノセキ,', + '藁': 'ムギワラ ノ ワラ', + '藜': 'アカザ,レイ', + '藝': 'ゲイジュツノゲイノキュウジ', + '藕': 'グウ,クサカンムリニスキヘンニグウゼンノグウノツクリ,', + '藐': 'バク,クサカンムリニワカサトビボウノボウ', + '藪': 'ヤブ,ソウ', + '鑷': 'ジョウ、カネヘンニミミミッツ', + '藩': 'ハイハンチケン ノ ハン', + '藤': 'フジ ノ ハナ ノ フジ,トウ', + '藥': 'クスリノイタイジ', + '藾': 'ライ,クサカンムリニイライスルノライノキュウジ', + '藺': 'イグサノイ,リン', + '藻': 'ウミ ノ モクズ ノ モ,ソウ', + '藹': 'ワキアイアイノアイ', + '藷': 'クサカンムリ ニ ショクン ノ ショ', + '怕': 'ハ,オソレル,リッシンベンニシロイ', + '怖': 'キョウフ ノ フ,コワイ', + '怐': 'コウ,リッシンベンニハイクノク', + '怒': 'ゲキドスル ノ ド,イカル', + '思': 'フシギ ノ シ,オモウ', + '怜': 'リッシンベン ニ メイレイ ノ レイ', + '怙': 'エコヒイキノコ,リッシンベンニチュウコシャノコ', + '怛': 'ダツ,リッシンベンニガンタンノタン', + '怏': 'オウ,リッシンベンニチュウオウノオウ', + '怎': 'ソウ,サクヤノサクノツクリノシタニココロ', + '怱': 'ソウ,ネギノクサカンムリノシタガワ', + '怺': 'エイ,リッシンベンニエイキュウノエイ', + '急': 'トッキュウ ノ キュウ,イソグ', + '性': 'コセイテキ ノ セイ', + '怦': 'ヒョウ,リッシンベンニヘイワノヘイ', + '怡': 'イ,リッシンベンニダイドコロノダイ', + '怠': 'タイマン ノ タイ,ナマケル', + '怯': 'ヒキョウモノ ノ キョウ,オビエル', + '怩': 'ジクジタルノジ,ハジル', + '怨': 'オンネン ノ オン,ウラミ', + '怫': 'フツ,リッシンベンニドル', + '怪': 'カイブツ ノ カイ,アヤシイ', + '笈': 'オイ,タケカンムリ ニ オヨブ', + '笊': 'ザル', + '笋': 'タケノコ,ジュンノイタイジ', + '笏': 'コツ,クゲノモツシャク', + '笂': 'ウツボ,タケカンムリニヒノマルノマル', + '笄': 'コウガイ,ケイ,タケカンムリニトリイ', + '鯲': 'ドジョウ,ウオヘンニナニナニニオイテノオ', + '笆': 'ハ,タケカンムリニトモエ', + '鯰': 'ナマズ,ウオヘンニザンネンノネン', + '笘': 'チョウ,タケカンムリニドクセンスルノセン', + '笙': 'フエノショウ', + '笛': 'フエヲフク ノ フエ', + '笞': 'ムチ,タケカンムリニダイドコロノダイ', + '鯨': 'クジラ,ホゲイ ノ ゲイ', + '笑': 'エガオ ノ エ,ワラウ', + '鯤': 'コン,ウオヘンニコンチュウノコン', + '鯣': 'スルメ,ウオヘンニボウエキフウノエキ', + '鯢': 'ゲイ,ウオヘンニニラムノツクリ', + '鯡': 'ヒ,ウオヘンニヒジョウグチノヒ', + '笨': 'ホン,タケカンムリニホンモノノホン', + '第': 'ダイイチインショウ ノ ダイ', + '笠': 'ハナガサ ノ カサ', + '鯖': 'サバ,サカナヘン ニ アオ', + '鯔': 'サカナノボラ,ウオヘンニマガリガワノシタニタンボノタ', + '笥': 'タンス ノ ス', + '符': 'ギモンフ ノ フ', + '鯏': 'アサリ,ウオヘンニケンリノリ', + '笹': 'ショクブツ ノ ササ', + '厳': 'ゲンジュウナ ノ ゲン,キビシイ', + '鯊': 'サカナノハゼ,サンズイニスクナイノシタニウオ', + '鯉': 'コイノボリ ノ コイ', + '鯆': 'ホ,ウオヘンニシジンノトホノホ', + '笳': 'カ,アシブエ,タケカンムリニカソクドノカ', + '笵': 'ハン,タケカンムリニカワガハンランスルノハン', + '笶': 'シ,タケカンムリニユミヤノヤ', + '鯀': 'コン,ウオヘンニケイレツノケイ', + '峙': 'タイジスルノジ,ヤマヘンニテラ', + '峇': 'コウ,ヤマノシタニゴウカクノゴウ', + '峅': 'クラ,ヤマヘンニベントウノベン', + '島': 'シマグニ ノ シマ,トウ', + '峰': 'サイコウホウ ノ ホウ,ミネ', + '峽': 'ツガルカイキョウノキョウノキュウジ', + '峻': 'キュウシュンナ ノ シュン', + '峺': 'コウ,ヤマヘンニサラシナノサラ', + '峡': 'ツガルカイキョウ ノ キョウ', + '峠': 'トウゲ ノ チャヤ ノ トウゲ', + '峯': 'ヤマカンムリ ノ ミネ,ホウ', + '峭': 'ショウ,ヤマヘンニショウゾウガノショウ', + '峪': 'ヨク,ヤマヘンニタニ', + '峩': 'ヤマヘンニワレノガノイタイジ', + '峨': 'ヤマヘン ニ ワレ ノ ガ', + '烱': 'ヒヘンケイガンノシノケイノイタイジ', + '烹': 'カッポウギ ノ ホウ', + '烽': 'ノロシヲイミスルホウ,ヒヘンニミネノツクリ', + '烈': 'キョウレツナ ノ レツ', + '烋': 'コウ,キュウジツノキュウニレンガ', + '烏': 'ウゴウノシュウ ノ ウ,カラス', + '烙': 'ラクインヲオスノラク', + '烝': 'ジョウ,スイジョウキノジョウからクサカンムリヲトッタカタチ', + '烟': 'エントツノエンノイタイジ,ヒヘンニインガオウホウのイン', + '㈱': 'カッコカブ', + '㈲': 'カッコユウゲン', + '㈹': 'カッコダイヒョウ', + 's': 'エス スポーツ', + '謾': 'マン、ゴンベンニウナギノツクリ', + '銓': 'セン、カネヘンニゼンコクノゼン', + '銕': 'テツノイタイジ、カネヘンニソンノウジョウイノイ', + '謹': 'キンガシンネン ノ キン', + '銘': 'メイガラ ノ メイ', + '銚': 'オチョウシ ノ チョウ', + '銛': 'モリデツクノモリ', + '謳': 'セイシュンヲオウカスルノオウ', + '銀': 'ギンイロ ノ ギン', + '謬': 'ゴビュウ ノ ビュウ', + '謫': 'タク、ゴンベンニテキハツスルノテキノツクリ', + '銅': 'ドウメダル ノ ドウ', + '謨': 'ボ、ゴンベンニバクダイナノバク', + '謦': 'ケイガイニセッスルノケイ', + '謡': 'ミンヨウ ノ ヨウ', + '謠': 'ミンヨウノヨウノキュウジ', + '謝': 'カンシャスル ノ シャ', + '講': 'コウシュウカイ ノ コウ', + '謚': 'オクリナ,シゴウノシノイタイジ', + '謙': 'ケンソンスル ノ ケン', + '銷': 'ショウ、カネヘンニショウゾウガノショウ', + '謗': 'ヒボウスルノボウ,ソシル', + '咨': 'シ,ハカル,ツギノシタニクチ', + '謔': 'カイギャクノギャク', + '謐': 'セイヒツナノヒツ', + '謎': 'ナゾヲトク ノ ナゾ', + '謌': 'ウタ,カ,ゴンベンニカノウセイノカヲカサネル', + '謇': 'ケン,サムイノシタニテンノカワリニゴンベン', + '謄': 'コセキトウホン ノ トウ', + '謂': 'イワレ,ゴンベン ニ イブクロ ノ イ', + '謁': 'ハイエツスル ノ エツ', + '謀': 'インボウ ノ ボウ,ハカル', + 'I': 'アイ インク', + '楊': 'ツマヨウジ ノ ヨウ,ヤナギ', + '楔': 'クサビガタモジノクサビ,セツ', + '楕': 'ダエンケイ ノ ダ', + '楓': 'ショクブツ ノ カエデ,キヘン ニ カゼ', + '楞': 'ロウ,キヘンニアミガシラニオヤカタノカタ', + '楜': 'コ,キヘンニクロコショウノコ', + '楝': 'レン,キヘンニイサメルノツクリ', + '楚': 'シメンソカ ノ ソ', + '楙': 'ボウ,ハヤシノアイダニムジュンノム', + '楢': 'ナラノキ ノ ナラ', + '楠': 'クスノキ ノ クス,キヘン ニ ミナミ', + '楡': 'ニレノキノニレ', + '楮': 'ショクブツノコウゾ', + '楯': 'キヘン ニ ムジュン ノ ジュン,タテ', + '業': 'ジュギョウ ノ ギョウ', + '楪': 'チョウ,キヘンニシャベルノツクリ', + '楫': 'シュウ,キヘンニクチノシタニミミ', + '楷': 'カイショタイノカイ', + '楴': 'テイ,キヘンニテイオウノテイ', + '極': 'ホッキョク ノ キョク', + '楳': 'キヘン ニ ナニガシ ノ ボウ,ウメ', + '楾': 'ハンゾウ,キヘンニイズミ', + '楼': 'マテンロウ ノ ロウ', + '楽': 'オンガク ノ ガク,タノシイ', + '楸': 'シュウ,キヘンニキセツノアキ', + '楹': 'エイ,キヘンニミチル,エイ', + '艘': 'フネヲカゾエルタンイノソウ', + '艙': 'ソウ,フネヘンニカマクラバクフノクラ', + '艚': 'ソウ,フネヘンニソウトウシュウノソウ', + '艝': 'ソリ,フネヘンニユキグニノユキ', + '艟': 'トウ,フネヘンニグリムドウワノドウ', + '艀': 'ハシケ', + '艇': 'ヒコウテイ ノ テイ', + '艱': 'カンナンシンクノカン', + '色': 'イロエンピツ ノ イロ,ショク', + '艶': 'ヨウエンナ ノ エン,ツヤ', + '艷': 'ヨウエンナノエン,ツヤノキュウジ', + '艸': 'ソウ,ブシュノクサカンムリ', + '艾': 'モグサ,ガイ', + '艢': 'ショウ,フネヘンニリンショクノショク', + '艤': 'ギ,フネヘンニギムノギ', + '艦': 'センスイカン ノ カン', + '艨': 'モウ,フネヘンニケイモウスルノモウ', + '艪': 'フナコギニツカウロ,フネヘンニロドンナノロ', + '艫': 'フネノトモ,フネヘンニハゼノキノハゼノツクリ', + '艮': 'ウシトラ ノ コン', + '良': 'カイリョウ ノ リョウ,ヨイ', + '喨': 'リョウ,クチヘンニジンメイ,ショカツリョウノリョウ', + '喩': 'ヒユノユ,タトエル', + '喪': 'モチュウ ノ モ', + '喫': 'キツエンスル ノ キツ', + '喬': 'キョウボク ノ キョウ,タカシ', + '單': 'タンジュンナノタンノキュウジ', + '喧': 'ケンカリョウセイバイ ノ ケン', + '喰': 'クチヘン ニ タベル ノ クウ', + '営': 'エイギョウ ノ エイ,イトナム', + '喉': 'ノドボトケ ノ ノド,コウ', + '喊': 'カンセイヲアゲルノカン,サケブ', + '喋': 'シャベル', + '喀': 'カッケツスルノカク,クチヘンニオキャクノキャク', + '喃': 'ナン,クチヘンニナンボクノナン', + '善': 'ゼンアク ノ ゼン,ヨイ', + '喇': 'ガッキノラッパノラツ', + '喘': 'ゼンソクノゼン', + '喙': 'カイ,クチバシ,タニンゴトニヨウカイスルノカイ', + '喚': 'ショウニンカンモン ノ カン', + '喜': 'キゲキ ノ キ,ヨロコブ', + '喝': 'キョウカツスル ノ カツ', + '喞': 'ショク,カコツ,クチヘンニソク', + '喟': 'キ,クチヘンニイブクロノイ', + '中': 'チュウガク ノ チュウ,ナカ', + '宀': 'ベン,ブシュノウカンムリ', + '它': 'タ,ヘビカラムシヘンヲトッタカタチ', + '宅': 'ジュウタク ノ タク', + '宇': 'ウチュウ ノ ウ', + '守': 'シュビ ノ シュ,マモル', + '安': 'アンシン ノ アン,ヤスイ', + '宋': 'チュウゴク ノ コクメイ ノ ソウ', + '完': 'カンリョウスル ノ カン', + '宍': 'シシ,ウカンムリ ニ カンスウジ ノ ロク', + '宏': 'ウカンムリ ニ ナム ノ コウ', + '宕': 'トウ,アタゴ ノ ニモジメ,ウカンムリ ニ イシ', + '宗': 'シュウキョウカイカク ノ シュウ', + '官': 'ケイサツカン ノ カン', + '宙': 'ウチュウセン ノ チュウ', + '定': 'ヨテイ ノ テイ,サダメル', + '宛': 'アテナ ノ アテ', + '宜': 'ベンギ ノ ギ,ヨロシク', + '宝': 'ホウセキ ノ ホウ,タカラ', + '実': 'ジツリョク ノ ジツ,ミ', + '客': 'オキャク ノ キャク', + '宣': 'センデン ノ セン', + '室': 'キョウシツ ノ シツ', + '宥': 'ナダメル,ユウジョ ノ ユウ', + '宦': 'カンガンノカン,ウカンムリニソウリダイジンノジン', + '宮': 'オミヤマイリ ノ ミヤ,キュウ', + '宰': 'ソウリヲ イミスル サイショウ ノ サイ', + '害': 'サイガイ ノ ガイ', + '宴': 'エンカイ ノ エン,ウタゲ', + '宵': 'ヨイノクチ ノ ヨイ', + '家': 'イエ,カゾク ノ カ', + '宸': 'シン,ウカンムリニジュウニシノタツ', + '容': 'ヨウセキ ノ ヨウ', + '宿': 'シュクハク ノ シュク,ヤド', + '箒': 'ソウ,ホウキ,タケカンムリニソウジキノソウノツクリ', + '算': 'サンスウ ノ サン', + '箔': 'アルミハク ノ ハク', + '箕': 'ノウグ ノ ミ,タケカンムリ ニ ソ', + '箚': 'トウ,タケカンムリニゴウカカクノゴウニリットウ', + '箘': 'キン,タケカンムリニクニガマエノナカニノギヘンノノギ', + '箙': 'フク,エビラ,タケカンムリニヨウフクノフク', + '箟': 'キン,タケカンムリニコンチュウノコン', + '箜': 'ク,タケカンムリニソラ', + '箝': 'カンコウレイノカン', + '箆': 'ヘラ', + '箇': 'カジョウガキ ノ カ', + '箋': 'ショホウセンノセン', + '箏': 'ソウキョクノソウ,コト', + '箍': 'タガガハズレルノタガ', + '箱': 'ハコニツメル ノ ハコ', + '箴': 'シン,タケカンムリニハリキュウノハリノツクリ', + '箸': 'ハシオキ ノ ハシ', + '管': 'カンリスル ノ カン', + '箪': 'タンス ノ タン', + '箭': 'セン,タケカンムリ ニ マエ', + '砧': 'キヌタ,イシヘン ニ ウラナウ', + '乃': 'ノギタイショウ ノ ノ,スナワチ', + '㊨': 'マルミギ', + '㊦': 'マルシタ', + '㊧': 'マルヒダリ', + '㊤': 'マルウエ', + '㊥': 'マルナカ', + '`': 'アクサングラーブ', + '魁': 'キョカイ ノ カキ,サキガケ', + '魃': 'ヒデリヲイミスルカンバツノバツ', + '魂': 'タマシイ,シンコン ノ コン', + '魅': 'ミリョク ノ ミ', + '憚': 'キタンノナイノタン,ハバカル', + '憙': 'キ,キドアイラクノキノシタニココロ', + '憖': 'ギン,ライネンノライノキュウジトイヌノシタニココロ', + '憔': 'ショウスイスルノショウ', + '魍': 'チミモウリョウノモウ', + '憑': 'ヒョウイスルノヒョウ,キツネツキノツク', + '憐': 'カレンナ ノ レン,アワレム', + '魑': 'チミモウリョウリョウノチ', + '憎': 'ニクム,ゾウオ ノ ゾウ', + '憊': 'ヒロウコンパイノハイ', + '憇': 'キュウケイノケイ,イコウノイタイジ', + '魘': 'エンセイカンノエンノシタニオニ', + '魚': 'サカナ,キンギョ ノ ギョ', + '憂': 'ユウウツ ノ ユウ,ウレウ', + '憾': 'イカンナク ノ カン', + '憺': 'クシンサンタンノタン,リッシンベンニタンニンノタンノキュウジノツクリ', + '憶': 'キオク ノ オク,オボエル', + '憲': 'ケンポウキネンビ ノ ケン', + '魯': 'ロ,サカナ ノ シタニ ニチヨウビ ノ ニチ', + '憮': 'ブゼントスルノブ', + '憬': 'ドウケイノマトノケイ,リッシンベンニフウケイノケイ', + '憫': 'レンビンノビン,リッシンベンニモンガマエニブンショウヲカクノブン', + '魴': 'サカナノホウボウノホウ,ウオヘンニオヤカタノカタ', + '憩': 'キュウケイ ノ ケイ,イコウ', + '憧': 'ドウケイ ノ ドウ,アコガレル', + '憤': 'フンガイスル ノ フン,イキドオル', + '鈞': 'キン、カネヘンニヘイキンノキンノツクリ', + '鈑': 'ハン、カネヘンニハンタイスルノハン', + '鈔': 'ショウ、カネヘンニオオイスクナイノスクナイ', + '鈕': 'チュウ、カネヘンニジュウニシノウシ', + '鈎': 'カギ,カネヘン ニ ツツミガマエ ニ ム', + '鈍': 'ドンカンナ ノ ドン,ニブイ', + '睿': 'エイ,ヒエイザンノエイノヒダリガワ', + '⊂': 'シンブブンシュウゴウ', + '鈿': 'ラデンノデン', + '鼾': 'イビキ', + '鈷': 'カネヘン ニ フルイ ノ コ', + '鈴': 'スズムシ ノ スズ', + '鈩': 'ロ、カネヘンニトジマリノト', + '鈬': 'ドウタクノタクノイタイジ', + '6': 'ロク', + '讀': 'ドクショノドク、ヨムノキュウジ', + '讃': 'ゴンベン ノ ツイタ サンビカ ノ サン', + '變': 'ヘンカスルノヘン,カエルノキュウジ', + '讌': 'エン、ゴンベンニツバメ', + '讎': 'フクシュウスルノシュウ、アダノイタイジ', + '讐': 'フクシュウスル ノ シュウ,アダ', + '讓': 'ジョウホスルノジョウ、ユズルノキュウジ', + '讒': 'ザンゲンンスルノザン、ソシル', + '讖': 'ヨゲンヲイミスルゴンベンノシン', + '讙': 'カン,ゴンベンニカンガイヨウスイノカンノツクリ', + '讚': 'ゴンベンノツイタサンビカノサンノイタイジ', + '属': 'フゾク ノ ゾク', + '屑': 'クズイレ ノ クズ', + '屐': 'ゲキ,キグツ,シカバネニギョウニンベンニシエンスルノシ', + '屓': 'ヒイキノキ,シカバネニカイガラノカイ', + '展': 'ハッテン ノ テン', + '屈': 'リクツ ノ クツ', + '屋': 'オクジョウ ノ オク,ヤ', + '届': 'トドケル', + '屍': 'シカバネ', + '屏': 'ビョウブノビョウ', + '屎': 'シニョウノシ,クソ', + '屁': 'ヒ,ヘリクツノヘ', + '局': 'ユウビンキョク ノ キョク', + '居': 'ジュウキョ ノ キョ,イル', + '屆': 'トドケルノキュウジ', + '屹': 'キツリツスルノキツ', + '山': 'ヤマ,サンミャク ノ サン', + '屶': 'カイ,ナタ,ヤマノシタニカタナ', + '屬': 'フゾクノゾクノキュウジ', + '屯': 'チュウトンスル ノ トン', + '屮': 'ヒダリヲイミスルサ,ヤマノナガイタテボウガシタニヌケル', + '屡': 'シバシバ', + '屠': 'トサツスル ノ ト,ホフル', + '履': 'リレキショ ノ リ', + '層': 'コウソウビル ノ ソウ', + '獪': 'ロウカイナノカイ', + '獨': 'ドクリツノドクノキュウジ', + '獣': 'ヤジュウ ノ ジュウ,ケモノ', + '獻': 'ケンケツスルノケンノキュウジ', + '獺': 'ドウブツノカワウソ', + '獸': 'ヤジュウノジュウ,ケモノノキュウジ', + '獲': 'カクトク ノ カク,エル', + '獰': 'ドウモウナノドウ', + '獵': 'リョウジュウノリョウノキュウジ', + '獏': 'ケモノヘンノドウブツノバク', + '獎': 'ショウガクキンノショウノキュウジノイタイジ', + '獅': 'シシマイ ノ イチモジメ ノ シ', + '獄': 'ジゴク ノ ゴク', + '獗': 'ショウケツヲキワメルノケツ', + '唳': 'レイ,クチヘンニモドル', + '唱': 'ガッショウ ノ ショウ,トナエル', + '唸': 'ウナル,クチヘンニザンネンノネン', + '唹': 'オ,クチヘンニナニナニニオイテノオ', + '唾': 'ダエキ ノ ダ,ツバ', + '售': 'シュウ,ウル,フルトリノシタニクチ', + '唯': 'ユイイツ ノ ユイ', + '唐': 'ケントウシ ノ トウ', + '唖': 'アゼントスル ノ ア', + '唔': 'ゴ,クチヘンニタゴサクノゴ', + '唆': 'シサスル ノ サ', + '唇': 'クチビル,シン', + '唄': 'ウタ,クチヘン ニ カイガラ ノ カイ', + '唏': 'キ,クチヘンニキボウノキ', + '絃': 'ゲン,イトヘン ニ ゲンマイ ノ ゲン', + '終': 'シュウギョウシキ ノ シュウ,オワル', + '絆': 'バンソウコウノバン,キズナ', + '絅': 'ケイ,イトヘンニコウジョウシンノコウカラテンヲトッタモノ', + '組': 'クミ,ソシキ ノ ソ', + '絋': 'イトヘンニヒロバノヒロ', + '絏': 'セツ,イトヘンニエイコウダンノエイ', + '絎': 'コウ,イトヘンニリョコウスルノコウ', + '経': 'ケイケンスル ノ ケイ', + '結': 'ケツロン ノ ケツ', + '絖': 'コウ,イトヘンニヒカリ', + '絛': 'ジョウ,ジョウケンノジョウノキュウジノキノカワリニイト', + '絞': 'シボル,コウシュケイ ノ コウ', + '絣': 'カスリノキモノノカスリ', + '絢': 'ケンランゴウカ ノ ケン', + '絡': 'レンラクスル ノ ラク,カラム', + '給': 'キュウショクシツ ノ キュウ', + '絨': 'ソラトブジュウタンノジュウ', + '絮': 'リュウジョノジョ,ワタ', + '絳': 'コウ,イトヘンニコウスイリョウノコウノツクリ', + '絲': 'ケイトノイトノキュウジ,イトフタツ', + '統': 'トウイツ ノ トウ', + '絶': 'ゼッタイテキ ノ ゼツ', + '絵': 'エホン ノ エ', + '絹': 'キヌイト ノ キヌ', + '絽': 'ロノキモノノロ', + '鼡': 'ネズミノイタイジ', + 'w': 'ダブリュー ウィンドウ', + '櫁': 'ミツ,キヘンニハチミツノミツ', + '櫂': 'トウ,フネヲコグカイ', + '櫃': 'オヒツノヒツ', + '櫚': 'シュロノキノロ', + '櫛': 'カミヲ トカス クシ', + '櫞': 'クエンサンノエン,キヘンニエンガワノエンノキュウジ', + '櫟': 'クヌギ,レキ,キヘンニオンガクカノガクノキュウジ', + '櫑': 'ライ,キヘンニスイデンノデンガミッツ', + '櫓': 'ヒノミヤグラ ノ ヤグラ', + '櫨': 'ハゼノキ ノ ハゼ', + '櫪': 'レキ,キヘンニレキシカノレキノキュウジタイ', + '櫺': 'レイ,キヘンニアメカンムリニクチミッツ', + '櫻': 'サクラノキュウジ', + '苛': 'イラダツ,カコク ノ カ', + '苙': 'リュウ、クサカンムリニドクリツノリツ', + '苞': 'ホウ、クサカンムリニツツム', + '苟': 'イヤシクモ、クサカンムリニハイクノク', + '苜': 'モク、クサカンムリニモクテキノモク', + '苒': 'ゼン、フタタビノイッカクメノカワリニクサカンムリ', + '苓': 'レイ,クサカンムリ ニ メイレイ ノ レイ', + '苑': 'ジングウガイエン ノ エン', + 'M': 'エム マイク', + '苗': 'ナエギ ノ ナエ,ビョウ', + '苔': 'ショクブツ ノ コケ,タイ', + '苅': 'カル,クサカンムリ ノ カル', + '苺': 'クダモノノイチゴ、クサカンムリニハハ', + '苻': 'フ、クサカンムリニフロクノフ', + '苹': 'ヘイ、クサカンムリニヘイボンナノヘイ', + '苳': 'トウ、クサカンムリニフユヤスミノフユ', + '英': 'エイユウ ノ エイ', + '苴': 'ショ、クサカンムリニクミノツクリ', + '苫': 'トマコマイシ ノ トマ', + '苣': 'キョ、クサカンムリニキョダイナノキョ', + '苡': 'イ、クサカンムリニイジョウイカノイ', + '苦': 'クロウ ノ ク,クルシイ', + '苧': 'ショクブツ ノ カラムシ,チョ', + '若': 'ワカモノ ノ ワカ', + '愡': 'ソウ,リッシンベンニネギノクサカンムリノシタガワ', + '愧': 'ザンキニタエナイノキ', + '飃': + 'ヒョウヒョウトシタノヒョウノイタイジ,カゼノミギニトウヒョウスルノヒョウ', + '愨': 'マコトヲイミスルカク', + '愬': 'ソ,ハッサクノサクノシタニココロ', + '飄': 'ヒョウヒョウトシタノヒョウ,カゼノヒダリニトウヒョウスルノヒョウ', + '飛': 'ヒコウキ ノ ヒ,トブ', + '食': 'タベル,キュウショク ノ ショク', + '愴': 'ヒソウナノソウ,リッシンベンニカマクラバクフノクラ', + '飜': 'ホンヤクスルノホンノイタイジ', + '愽': 'ハクブツカンノハクノイタイジ', + '愼': 'シンチョウナノシン,ツツシムノキュウジ', + '愿': 'ゲン,ノハラノハラノシタニココロ', + '愾': 'キ,リッシンベンニクウキノキノキュウジ', + '愁': 'アイシュウ ノ シュウ,ウレイ', + '愀': 'ショウ,リッシンベンニキセツノアキ', + '愃': 'セン,リッシンベンニセンデンスルノセン', + '飯': 'ゴハン ノ ハン,メシ', + '飮': 'インリョウスイノイン,ノムノキュウジ', + '飭': 'チョク,ショクヘンニカタカナノノ,ヨコボウニチカラ', + '愆': 'ケン,フエンスルノエンノシタニココロ', + '愉': 'ユカイナ ノ ユ', + '愈': 'ユ,イヨイヨ', + '愍': 'ビン,タミトノブンノシタニココロ', + '意': 'イミ ノ イ', + '愎': 'フク,リッシンベンニオウフクノフクノツクリ', + '愕': 'キョウガクスルノガク', + '飾': 'ソウショクヒン ノ ショク,カザリ', + '飽': 'アキル,ホウワ ノ ホウ', + '飼': 'シイク ノ シ,カウ', + '飲': 'ミズヲノム ノ ノム,イン', + '愛': 'アイスル ノ アイ', + '愚': 'グチ ノ グ,オロカ', + '感': 'カンソウブン ノ カン', + '飴': 'ミズアメ ノ アメ', + '嬋': 'セン,オンナヘンニタンジュンノタンノキュウジ', + '嬉': 'ウレシイ,キ', + '嬌': 'アイキョウガアルノキョウ', + '嬖': 'ヘイ,ヘキエキスルノヘキノシタニオンナ', + '嬪': 'ベッピンノヒン', + '#': 'シャープ', + '嬬': 'ツマ,オンナヘン ニ ヒツジュヒン ノ ジュ', + '嬢': 'オジョウサマ ノ ジョウ', + '⇒': 'ナラバ', + '⇔': 'ドウチ', + '嬲': 'ジョウ,ナブル,オトコ,オンナ,オトコ', + '嬰': 'アカンボウヲ イミスル エイジ ノ エイ', + '嬶': 'カカア,オンナヘンニハナカゼノハナ', + '稔': 'ミノル,ノギヘン ニ ザンネン ノ ネン', + '稗': 'ショクブツ ノ ヒエ', + '稜': 'ヤマ ノ リョウセン ノ リョウ', + '稟': 'リンギショノリン', + '稘': 'キ,ノギヘンニソノ', + '稙': 'チョク,ノギヘンニチョクゼンノチョク', + '稚': 'ヨウチエン ノ チ', + '稀': 'マレ,ノギヘン ニ キボウ ノ キ', + '稍': 'ショウ,ノギヘンニショウゾウガノショウ', + '税': 'ゼイキン ノ ゼイ', + '稈': 'ムギワラヲイミスルバッカンノカン', + '程': 'ニッテイ ノ テイ,ホド', + '稷': 'シャショクノシンノショク,ノギヘン', + '稱': 'イチニンショウノショウノキュウジ', + '稲': 'イネ,イナサク ノ イナ', + '稼': 'カセグ,カ', + '稽': 'ケイコスル', + '稾': 'ゲンコウヨウシノコウノイタイジ', + '稿': 'ゲンコウヨウシ ノ コウ', + '稻': 'イネノキュウジ', + '稠': 'チュウミツナノチュウ', + '種': 'シュルイ ノ シュ,タネ', + '口': 'クチブエ ノ クチ,コウ', + '叢': 'ソウショ ノ ソウ,クサムラ', + '叡': 'ヒエイザン ノ エイ', + '句': 'ハイク ノ ク', + '栴': 'ショクブツ ノ センダン ノ セン', + '叫': 'サケブ,ゼッキョウ ノ キョウ', + '只': 'タダイマ ノ タダ', + '叩': 'カタタキ ノ タタク', + '叨': 'トウ,クチヘンニカタナ', + '可': 'カノウセイ ノ カ', + '叮': 'テイ,クチヘンニイッチョウメノチョウ', + '叭': 'ガッキノラッパノハ', + '召': 'ショウシュウスル ノ ショウ,メス', + '右': 'ミギ,サユウ ノ ユウ', + '史': 'レキシテキ ノ シ', + '叱': 'シカル,シッセキスル ノ シツ', + '台': 'ダイドコロ ノ ダイ', + '号': 'バンゴウ ノ ゴウ', + '叶': 'カナウ,クチヘン ニ ジュウ', + '叺': 'フクロノカマス,クチヘンニハイル', + '司': 'シカイシャ ノ シ', + '參': 'サンカスルノサン,マイルノキュウジ', + '参': 'サンカスル ノ サン,マイル', + '友': 'ユウジン ノ ユウ,トモ', + '及': 'フキュウスル ノ キュウ,オヨブ', + '叉': 'ヤシャ ノ シャ', + '仁': 'ジンギ ノ ジン,ニオウ ノ ニ', + '収': 'シュウニュウ ノ シュウ,オサメル', + '反': 'ハンタイスル ノ ハン', + '双': 'ソウガンキョウ ノ ソウ', + '从': 'シタガウノイタイジ,ヒトフタツ', + '受': 'ジュケン ノ ジュ,ウケル', + '取': 'シュザイ ノ シュ,トル', + '格': 'ゴウカク ノ カク', + '叛': 'ハンラン ノ ハン,ソムク', + '叙': 'ジジョデン ノ ジョ', + '★': 'クロボシ', + '☆': 'ホシジルシ', + '班': 'ハンチョウ ノ ハン', + '珮': 'ハイ,ハイヨウスルノハイノニンベンノカワリニオウヘン', + '珪': 'オウヘン ニ ツチ フタツ ノ ケイ,ケイソウド ノ ケイ', + '珥': 'ジ,オウヘンニミミ', + '今': 'コンゲツ ノ コン,イマ', + '珠': 'シュザン ノ シュ,タマ', + '核': 'カクカゾク ノ カク', + '現': 'ゲンジツ ノ ゲン,アラワレル', + '珸': 'ゴ,オウヘンニコクゴノゴノツクリ', + '珱': 'ヨウ,オウヘンニサクラノツクリ', + '珍': 'メズラシイ,チンミ ノ チン', + '珎': 'メズラシイ,チンミノチンノイタイジ', + '珈': 'カ,コーヒーノアテジノイチモジメ', + '珊': 'サンゴショウ ノ サン', + '珀': 'コハクイロノハク', + '珂': 'オウヘン ニ カノウセイ ノ カ', + '珞': 'ラク,オウヘンニカクジノカク', + '栫': 'ソン,キヘンニソンザイスルノソン', + '仙': 'センニン ノ セン,ニンベン ニ ヤマ', + '㌫': 'カナパーセント', + '㌦': 'カナドル', + '㌧': 'カナトン', + '栗': 'クリノキ ノ クリ', + '㌢': 'カナセンチ', + '㌣': 'カナセント', + '栖': 'スム,セイ,キヘン ニ ニシ', + '㌻': 'カナページ', + '㌶': 'カナヘクタール', + '㌍': 'カナカロリー', + '㌃': 'カナアール', + '㌘': 'カナグラム', + '㌔': 'カナキリ', + '仭': 'フカサノタンイノジンノイタイジ,ニンベンニヤイバノイタイジ', + '价': 'カイ,ニンベンニチュウカイスルノカイ', + '栃': 'トチギケン ノ トチ', + 'd': 'ディー デスク', + '驢': 'ドウブツノロバノロ', + '鎚': 'カネヘン ノ ツチ', + '鎔': 'ヨウ、カネヘンニヨウセキノヨウ', + '鎖': 'サコク ノ サ,クサリ', + '鎗': 'ヤリ,カネヘン ニ クラ,ソウ', + '鎌': 'カマクラ ノ カマ', + '鎹': 'コハカスガイノカスガイ', + '鎰': 'イツ、カネヘンニリエキノエキ', + '鎬': 'シノギヲケズルノシノギ', + '鎭': 'チンアツスルノチン,シズメルノキュウジ', + '鎮': 'チンアツスル ノ チン,シズメル', + '鎧': 'ヨロイ,ガイシュウイッショク ノ ガイ', + '蠏': 'カニノイタイジ,ムシヘンニカイケツスルノカイ', + '蠎': 'ウワバミヲイミスルボウ,クサカンムリニホンソウスルノホン', + '蠍': 'サソリ', + '蠅': 'ムシノハエ', + '蠑': 'エイ,ムシヘンニサカエルノキュウジ', + '蠖': 'カク,ムシヘンニカクトクスルノカクノツクリ', + '蠕': 'ゼンドウウンンドウノゼン', + '蠣': 'カキ,ムシヘンニゲキレイスルノレイノキュウジノヒダリガワ', + '蠢': 'ウゴメク,シュン', + '蠡': 'レイ,ケイガシラニイノコ,ソノシタニムシフタツ', + '蠧': 'ホンニツクムシノトギョノト', + '蠻': 'ナンバンボウエキノバンノキュウジ', + '蠹': 'ホンニツクムシノトギョノトノイタイジ', + '蠱': 'コワクスルノコ,ムシミッツノシタニサラ', + '蠶': 'ヨウサンノサン,カイコノキュウジ', + '橘': 'タチバナ,カンキツ ノ キツ', + '橙': 'トウ,ショクブツノダイダイ', + '機': 'ヒコウキ ノ キ', + '橇': 'セイ,ノリモノノソリ', + '橄': 'カンランサンノカン,キヘンニユウカンナノカン', + '橋': 'ホドウキョウ ノ キョウ,ハシ', + '橈': 'ドウ,タワム,トウコツノトウ', + '鼓': 'タイコ ノ コ,ツヅミ', + '橲': 'ジサ,キヘンニキゲキノキ', + '橸': 'マサ,キヘンニスイショウダマノショウ', + '橿': 'カシハラジングウ ノ カシ', + '橢': 'ダエンケイノダノキュウジ', + '橡': 'キヘン ニ ドウブツ ノ ゾウ,トチ', + '橦': 'トウ,キヘンニワラベ', + ':': 'コロン', + '荘': 'ベッソウチ ノ ソウ', + '荐': 'セン,クサカンムリニソンザイスルノソン', + '荒': 'アレル,コウヤ ノ コウ', + '荏': 'エゴマ ノ エ', + '草': 'クサ,ソウゲン ノ ソウ', + '荊': 'クサカンムリ ニ ケイムショ ノ ケイ,イバラ', + '荅': 'トウ,クサカンムリニゴウカクノゴウ', + '荀': 'ジュン,クサカンムリニゲジュンノジュン', + '作': 'サクブン ノ サク,ツクル', + '荼': 'ダビニフスノダ', + '荻': 'オギ', + '荵': 'ニン、クサカンムリニニンジャノニン', + '荷': 'ニモツ ノ ニ', + '荳': 'トウ、マメ、クサカンムリニマメモチノマメ', + '咲': 'ハナガサク ノ サク', + '咳': 'セキバライ ノ セキ', + '咼': 'カ,ナベノツクリ', + '咽': 'ジビインコウカ ノ イン,ノド', + '咾': 'ロウ,クチヘンニロウジンノロウ', + '咸': 'シンノミヤコ,カンヨウノカン', + '咤': 'シッタゲキレイノタ,クチヘンニジュウタクノタク', + '咥': 'テツ,クチヘンニゲシノシ', + '咢': 'ガク,キョウガクスルノガクノツクリ', + '咬': 'カム,コウ,クチヘンニマジワル', + '咯': 'ラク,クチヘンニオノオノ', + '茆': 'ボウ、クサカンムリニジュウニシノウサギ', + '咫': 'ナガサノタンイノシ,シャクハチノシャクノミギニタダイマノタダ', + '咐': 'ホ,クチヘンニフロクノフ,ツケル', + '咒': 'ノロウ,ジュモンノジュノイタイジ', + '咄': 'トッサノトツ,クチヘンニデル', + '咆': 'トラノホウコウノホウ,ホエル', + '咀': 'カミクダクイミノソシャクノソ', + '和': 'ワフク ノ ワ', + '咎': 'トガメル', + '咏': 'エイ,クチヘンニエイキュウノエイ', + '咋': 'サクネン ノ サク ノ ヒヘン ノ カワリニ クチヘン', + '緇': 'シ,イトヘンニシチョウヘイノシノツクリ', + '総': 'ソウリダイジン ノ ソウ', + '緋': 'ヒイロ ノ ヒ', + '緊': 'キンキュウ ノ キン', + '緕': 'シ,イトヘンニイッセイシャゲキノセイ', + '緑': 'ミドリ,リョクチャ ノ リョク', + '緒': 'ナイショ ノ ショ', + '緝': 'シュウ,イトヘンニクチノシタニミミ', + '緜': 'モメンノメンノイタイジ', + '緞': 'ドンスノドン,イトヘンニネダンノダン', + '緘': 'カンモクノカン,イトヘンニシンノミヤコカンヨウノカン,', + '線': 'センロ ノ セン', + '緤': 'セツ,イトヘンニシャベルノツクリ', + '緡': 'ビン,イトヘンニタミノシタニマイニチノニチ', + '締': 'テイケツスル ノ テイ,シメル', + '緬': 'チリメン ノ メン', + '緯': 'イドケイド ノ イ', + '緩': 'ユルヤカ,カンワスル ノ カン', + '編': 'ヘンシュウスル ノ ヘン,アム', + '練': 'レンシュウ ノ レン', + '緲': 'ビョウ,イトヘンニモクテキノモクニスクナイ', + '緻': 'チミツナノチ', + '骰': 'トウ,ホネヘンニナゲルノツクリ', + 'Ⅸ': 'ローマスウジ キュウ', + 'Ⅹ': 'ローマスウジ ジュウ', + 'Ⅲ': 'ローマスウジ サン', + 'Ⅳ': 'ローマスウジ ヨン', + 'Ⅰ': 'ローマスウジ イチ', + 'Ⅱ': 'ローマスウジ ニ', + 'Ⅶ': 'ローマスウジ ナナ', + 'Ⅷ': 'ローマスウジ ハチ', + 'Ⅴ': 'ローマスウジ ゴ', + 'Ⅵ': 'ローマスウジ ロク', + '媚': 'ビヤクノビ,コビル', + '媛': 'エヒメケン ノ ヒメ', + '媒': 'バイカイスル ノ バイ', + '媼': 'オウ,オンナヘンニオンセンノオンノキュウジノツクリ', + '媽': 'ボ,オンナヘンニウマ', + '媾': 'コウ,オンナヘンニミゾノツクリ', + '窟': 'ドウクツ ノ クツ', + '窘': 'タシナメル,キン', + '窖': 'コウ,アナカンムリニツゲル', + '窗': 'マドノイタイジ', + '窕': 'ヨウチョウタルビジンノチョウ,アナカンムリニイッチョウエンノチョウ', + '窒': 'チッソ ノ チツ', + '窓': 'マドグチ ノ マド,ソウ', + '窈': 'ヨウチョウタルビジンノヨウ,アナカンムリニオサナイ', + '窄': 'シヤキョウサク ノ サク,スボマル', + '窃': 'セットウハン ノ セツ', + '突': 'ショウトツスル ノ トツ,ツク', + '窿': 'リュウ,アナカンムリニリュウキスルノリュウノキュウジ', + '窺': 'アナカンムリ ノ ウカガウ', + '窶': 'ヤツレル,ク', + '窰': 'カマモトノカマノイタイジ', + '窮': 'キュウクツ ノ キュウ,キワマル', + '窯': 'カマモト ノ カマ,ヨウ', + '窪': 'クボム,クボチ ノ クボ', + '窩': 'カ,アナカンムリニナベノツクリ', + '{': 'チュウカッコ', + '額': 'キンガク ノ ガク,ヒタイ', + '㎡': 'ヘイホウメートル', + '㎞': 'キロメートル', + '㎜': 'ミリメートル', + '㎝': 'センチメートル', + '㎎': 'ミリグラム', + '㎏': 'キログラム', + '披': 'ヒロウエン ノ ヒ', + '題': 'シュクジュダイ ノ ダイ', + '顏': 'カオ,ガンメンノガンノキュウジ', + '顎': 'アゴ,ガク', + '顛': 'コト ノ テンマツ ノ テン', + '顋': 'エラ,フシギノシノミギニページ', + '抬': 'タイ,テヘンニダイドコロノダイ', + '顆': 'カリュウノカ,ツブ', + '抻': 'シン,テヘンニシンコクスルノシン', + '抹': 'マッチャ ノ マツ', + '類': 'ジンルイ ノ ルイ', + '願': 'ガンボウ ノ ガン,ネガウ', + '抽': 'チュウセン ノ チュウ', + '押': 'オウシュウスル ノ オウ,オス', + '顕': 'ケンビキョウ ノ ケン,アキラカ', + '顔': 'カオイロ ノ カオ,ガン', + '抱': 'ホウフヲカタル ノ ホウ,ダク', + '抵': 'テイコウスル ノ テイ', + '把': 'ハアクスル ノ ハ', + '抉': 'ケツ,テヘンニタスウケツノケツノツクリ', + '顫': 'セン,ブツダンノダンノツクリノミギニページ', + '抃': 'ベンブスルノベン,テヘンニナベブタノシタニカタカナノト', + '抂': 'キョウ,テヘンニオウサマノオウ', + '顧': 'コモン ノ コ,カエリミル', + '技': 'ギジュツ ノ ギ,ワザ', + '抄': 'コセキショウホン ノ ショウ', + '抛': 'ホウテキスルノホウ,テヘンニカンスウジノキュウニチカラ', + '折': 'コッセツ ノ セツ,オル', + '択': 'センタクシ ノ タク', + '抜': 'バツグン ノ バツ,ヌケル', + '抓': 'ソウ,ツネル,テヘンニツメ', + '抒': 'ジョジョウシノジョ,テヘンニヨテイノヨ', + '抑': 'ヨクセイスル ノ ヨク,オサエル', + '抗': 'テイコウスル ノ コウ', + '抖': 'トウ,テヘンニホクトシチセイノト', + '投': 'トウシュ ノ トウ,ナゲル', + '抔': 'ホウ,テヘンニフシギノフ', + '顯': 'ケンビキョウノケンノキュウジ', + 'Q': 'キュー クエスチョン', + '沃': 'ヒヨクナトチ ノ ヨク', + '沂': 'ギ,サンズイニショクパンイッキンノキン', + '沁': 'シン,シミル,サンズイニココロ', + '錢': 'ツリセンノセンノキュウジ', + '錣': 'テツ、カネヘンニツヅルノツクリ', + '錠': 'テジョウ ノ ジョウ', + '錮': 'キンコケイノコ、カネヘンニカタメル', + '錯': 'サクランスル ノ サク', + '錬': 'レンキンジュツ ノ レン', + '沈': 'チンボツスル ノ チン,シズム', + '錫': 'キンゾク ノ スズ,シャク', + '沍': 'ゴ,サンズイニタガイ', + '沌': 'コントントシタ ノ トン', + '沓': 'クツ,ミズ ノ シタニ ヒ', + '沒': 'チンボツスルノボツノキュウジ', + '沐': 'モクヨクスルノモク', + '録': 'ロクオン ノ ロク', + '沖': 'オキ,オキナワケン ノ オキ', + '沛': 'ハイゼンタルアメのハイ', + '沚': 'シ,サンズイニキンシスルノシ', + '沙': 'ゴブサタ ノ サ,サンズイ ニ スクナイ', + '錺': 'カザリ、カネヘンニホウコウザイノホウ', + '錻': 'ブリキノブ、カネヘンニブキノブ', + '錆': 'サビドメ ノ サビ', + '沢': 'コウタク ノ タク,サワ', + '没': 'チンボツスル ノ ボツ', + '沫': 'ホウマツ ノ マツ,サンズイ ニ スエ', + '錏': 'ア、カネヘンニアジアノアノキュウジ', + '沮': 'イキソソウノソ,サンズイニソシスルノソノツクリ', + '河': 'サンズイ ノ カワ', + '沱': 'ダ,サンズイニブッダノダノツクリ', + '錐': 'シカクスイ ノ スイ', + '治': 'セイジ ノ ジオサメル', + '沺': 'テン,サンズイニスイデンノデン', + '油': 'セイキユ ノ ユ,アブラ', + '沸': 'フットウスル ノ フツ,ワク', + '沿': 'エンガン ノ エン,ソウ', + '沾': 'テン,サンズイニドクセンスルノセン', + '沽': 'コケンニカカワルノコ,サンズイニチュウコヒンノコ', + '沼': 'ヌマチ ノ ヌマ,ショウ', + '袍': 'ホウ、コロモヘンニツツム', + '袈': 'オボウサン ノ ケサ ノ ケ', + '袋': 'フクロ,ユウタイルイ ノ タイ', + '袁': 'エン,ルイジンエンノエンノツクリ', + '袂': 'タモト', + '袞': 'コンリョウノソデノコン', + '袙': 'バク、コロモヘンニクロシロノシロ', + '顴': 'ケン,カンヅメノカンノキュウジノツクリノミギニページ', + '袗': 'シン、コロモヘンニシンサツシツノシンノツクリ', + '袖': 'フリソデ ノ ソデ', + '袒': 'サタンスルノタン、ハダヌグ', + '袮': 'ネ、コロモヘンニイチニンショウノショウノツクリ', + '被': 'ヒガイシャ ノ ヒ,コウムル', + '袤': 'ボウ,コロモノアイダニムジュンノム', + '袢': 'ジュバンノバン', + '袿': 'ケイ、コロモヘンニツチフタツ', + '顳': 'ジョウ,ミミミッツノミギニページ', + '袵': 'ジン、コロモヘンニセキニンノニン', + '袴': 'ハオリハカマ ノ ハカマ', + '袷': 'アワセ,コロモヘン ニ ゴウカク ノ ゴウ', + '袱': 'フク、チャブダイノニモジメ', + '袰': 'ホロ、ハハノシタニコロモ', + '卦': 'ハッケ ノ ケ', + '占': 'ドクセンスル ノ セン,シメル', + '卯': 'ウ,ジュウニシ ノ ウサギ', + '卮': 'シ,サカズキ', + '卩': 'セツ,ブシュノワリフ', + '卵': 'タマゴ', + '却': 'ヘンキャクスル ノ キャク', + '卷': 'カン,ノリマキノマキノキュウジ', + '危': 'キケン ノ キ,アブナイ', + '印': 'インサツ ノ イン', + '即': 'ソクザニ ノ ソク,スナワチ', + '卿': 'キョウ,スウキケイ ノ ケイ', + '卸': 'オロシウリ ノ オロシ', + '卻': 'ヘンキャクスルノキャクノイタイジ', + '卅': 'ソウ,カンスウジノサンジュウ', + '升': 'イッショウビン ノ ショウ,マス', + '卆': 'ソツギョウノソツノイタイジ', + '十': 'カンスウジ ノ ジュウ', + '區': 'クベツスルノクノキュウジ', + '\'': 'アポストロフィ', + '卍': 'マンジ', + '卉': 'カキエンゲイノキ', + '午': 'ショウゴ ノ ゴ', + '半': 'ハンブン ノ ハン,ナカバ', + '協': 'キョウリョクスル ノ キョウ', + '南': 'ナンボク ノ ナン,ミナミ', + '卑': 'ヒレツナ ノ ヒ,イヤシイ', + '卓': 'タッキュウ ノ タク', + '卒': 'ソツギョウ ノ ソツ', + '卜': 'ウラナウ,ボク', + '卞': 'ベン,ナベブタノシタニカタカナノト', + '単': 'タンジュン ノ タン', + '博': 'ハクブツカン ノ ハク', + '牴': 'テイ,ウシヘンニヒクイノツクリ', + '牲': 'ギセイシャ ノ セイ', + '牾': 'ゴ,ウシヘンニコクゴノゴノツクリ', + '牽': 'ケンインスル ノ ケン', + '特': 'トクベツ ノ トク', + '牧': 'ボクジョウ ノ ボク', + '牢': 'ロウヤ ノ ロウ', + '牡': 'ハナ ノ ボタン ノ ボ,オス', + '物': 'ドウブツ ノ ブツ,モノ', + '牒': 'サイゴツウチョウ ノ チョウ,フダ', + '牟': 'シャカムニ ノ ム,ム ノ シタニ ウシ', + '牝': 'ヒンバ ノ ヒン,メス', + '牛': 'ウシ,ギュウニュウ ノ ギュウ', + '牙': 'ゾウゲ ノ ゲ,キバ', + '牘': 'トク,カタヘンニハンバイスルノバイノキュウジ', + '片': 'カタオモイ ノ カタ,ヘン', + '牆': 'ショウ,カキ,ショウヘンニリンショクノショク', + '牀': 'コシカケノショウギノショウ,ショウヘンニクサキノキ', + '牌': 'イハイ ノ ハイ,フダ', + '牋': 'ショホウセンノセンノイタイジ', + '版': 'モクハンガ ノ ハン', + '吾': 'ワレ,ゴ,カンスウジ ノ ゴ ノ シタニ クチ', + '吼': 'シシクノク,クチヘンニコウシモウシノコウ', + '吽': 'アウンノコキュウノウン,クチヘンニドウブツノウシ', + '吻': 'セップンスル ノ フン', + '吸': 'コキュウスル ノ キュウ,スウ', + '吹': 'スイソウガク ノ スイ,フク', + '吶': 'トツベンノトツ,クチヘンニコクナイノナイ', + '吮': 'セン,クチヘンニカタカナノムノシタニヒトアシ', + '听': 'オモサノタンイノポンド', + '吭': 'コウ,クチヘンニテイコウスルノコウノツクリ', + '含': 'フクム,ガンチク ノ ガン', + '吩': 'フン,クチヘンニハンブンノブン', + '否': 'ヒテイスル ノ ヒ', + '吠': 'ホエル,クチヘン ニ イヌ', + '吟': 'ギンミスル ノ ギン', + '吝': 'リンショクカノリン', + '君': 'ショクン ノ クン,キミ', + '閃': 'ヒラメキ,センコウ ノ セン', + '吐': 'トイキ ノ ト,ハク', + '向': 'コウジョウスル ノ コウ,ムカウ', + '后': 'コウゴウ ノ ゴウ,キサキ', + '吏': 'ヤクニンヲ イミスル カンリ ノ リ', + '同': 'オナジ,ドウジ ノ ドウ', + '名': 'ナマエ ノ ナ,メイ', + '吊': 'ツルス,クチ ノ シタニ ハバ', + '吋': 'ナガサ ノ タンイ ノ インチ', + '合': 'ゴウカク ノ ゴウ,アウ', + '吉': 'キチトキョウ ノ キチ,ヨシ', + '各': 'カクジ ノ カク,オノオノ', + '吃': 'ドモル,キツオン ノ キツ', + '吁': 'ク,クチヘンニウチュウノウノウカンムリヲトッタモノ', + '籏': 'ハタ,タケカンムリニハタヲフルノハタ', + '籍': 'コクセキ ノ セキ', + '籌': 'チュウ,タケカンムリニコトブキノキュウジ', + '籃': 'ヨウランキノラン', + '籀': 'チュウ,タケカンムリニテヘントリュウガクセイノシュウ', + '籟': 'ライ,タケカンムリニイライスルノライノキュウジ', + '籘': 'トウイスノトウノイタイジ', + '籖': 'クジビキノクジ,センノイタイジ', + '籔': 'ス,タケカンムリニカズノキュウジ', + '籐': 'トウイスノトウ', + '閔': 'ビン,モンガマエニブンショウヲカクノブン', + '籬': 'リ,マガキ', + '籥': 'ヤク,タケカンムリニブシュノヤク', + '籤': 'クジビキノクジ,セン', + '籠': 'ロウジョウスルノロウ,カゴ', + '籾': 'モミガラ ノ モミ', + '籵': 'ナガサノタンイノデカメートル', + '米': 'コメ,シンマイ ノ マイ', + '閤': 'タイコウキ ノ コウ', + '閧': 'コウ,モンガマエニキョウツウテンノキョウ', + '閠': 'ウルウドシノウルウノイタイジ', + '錦': 'ニシキ,キン', + '閨': 'ケイボウノケイ,ネヤ', + '言': 'ゲンゴ ノ ゲン,イウ', + '錨': 'イカリ,カネヘン ニ ナエ', + 'h': 'エイチ ホテル', + '閹': 'エン,モンガマエニキソクエンエンノエン', + '錵': 'ニエ、カネヘンニハナビノハナ', + '閻': 'エンマサマノエン', + '比': 'ヒカクスル ノ ヒ,クラベル', + '毒': 'ショウドク ノ ドク', + '毓': 'イク,マイニチノマイニナガレルノツクリ', + '毟': 'ムシル,スクナイノシタニウモウノモウ', + '毘': 'ビシャモンテン ノ ビ', + '毛': 'ケイト ノ ケ,ウモウ ノ モウ', + '毅': 'キゼントシタ ノ キ', + '毆': 'オウダスルノオウ,ナグルノキュウジ', + '毀': 'メイヨキソンノキ', + '母': 'フボ ノ ボ,ハハ', + '毎': 'マイニチ ノ マイ', + '毋': 'ブ,ナカレ,マイニチノマイノシタガワ', + '毳': 'セイ,ウモウノモウガミッツ', + '毬': 'マリ,ウモウノモウノミギニモトメル', + '毯': 'ジュウタンノタン,ウモウノモウニホノオ', + '毫': 'キゴウスルノゴウ', + '菠': 'ハ、クサカンムリニハチョウガアウノハ', + '華': 'ゴウカ ノ カ,ハナヤカ', + '菫': 'ショクブツノスミレ', + '菩': 'ボダイジュ ノ ボ', + '菷': 'ソウ、ホウキ,クサカンムリニソウジキノソウノツクリ', + '菴': 'アン,イオリ,クサカンムリニキソクエンエンノエン', + '菲': 'ヒ、クサカンムリニヒジョウグチノヒ', + '菰': 'コモカブリ ノ コモ,クサカンムリ ニ コドク ノ コ', + '菱': 'ヒシガタ ノ ヒシ', + '菽': 'シュク、クサカンムリニシュクジョノシュクノツクリ', + '菻': 'リン、クサカンムリニゾウキバヤシノハヤシ', + '菅': 'スゲガサ ノ スゲ,カン', + '菁': 'セイ、カブ、クサカンムリニセイシュンノセイノキュウジタイ', + '菎': 'コン、クサカンムリニコンチュウノコン', + '菌': 'サッキンスル ノ キン', + '菊': 'キクニンギョウ ノ キク', + '菖': 'ハナショウブ ノ ショウ', + '菓': 'オカシ ノ カ', + '菟': 'ト,クサカンムリ ニ ウサギ', + '菜': 'ヤサイ ノ サイ,ナ', + '菘': 'スズナ、クサカンムリニマツノキノマツ', + '戯': 'ギキョク ノ ギ', + '戮': 'サツリクスルノリク', + '駒': 'コマ,ウマヘン ニ ハイク ノ ク', + '駑': 'ドバノド,ヤッコノシタニウマ', + '截': 'セツゼンタルノセツ,サイバイスルノサイノキノカワリニフルトリ', + '駟': 'シ,ウマヘンニカンスウジノヨン', + '駝': 'ドウブツノラクダノダ', + '戦': 'センソウ ノ セン,タタカウ', + '戡': 'カン,ハナハダシイノミギニホコヅクリ', + '駘': 'シュンプタイトウノタイ', + '駆': 'ヨンリンクドウ ノ ク,カケル', + '房': 'レイダンボウ ノ ボウ', + '駄': 'ダガシ ノ ダ', + '戸': 'トジマリ ノ ト,コ', + '戻': 'モドル,ヘンレイキン ノ レイ', + '戴': 'タイカンシキ ノ タイ,イタダク', + '戰': 'センソウノセン,タタカウノキュウジ', + '戳': 'タク,センタクモノノタクノツクリニホコヅクリ', + '戲': 'ギキョクノギノキュウジ', + '戍': 'ジュ,マモル,ボシンセンソウノボノナカニテン', + '戌': 'ジュツ,ジュウニシノイヌ', + '戎': 'エビス,ホコガマエ ノ ジュウ', + '戉': 'マサカリ,エツ,カネヘンナシ', + '戈': 'カ,ブシュノホコヅクリ', + '駱': 'ドウブツノラクダノラク', + '戊': 'ボシンセンソウ ノ ボ', + '駿': 'シュンメ ノ シュン', + '駻': 'カンバノカン,アラウマ', + '戀': 'コイビトノコイノキュウジ', + '駸': 'シン,ウマヘンニシンリャクスルノシンノツクリ', + '戝': 'サンゾクノゾクノイタイジ', + '戟': 'シゲキスル ノ ゲキ,ホコ', + '戞': 'カツ,ユウウツノユウノウエガワニホコヅクリ', + '駢': 'ヘン,ウマヘンニヘイヨウスルノヘイノツクリ', + '戛': 'カツ,ページノハノカワリニホコヅクリ', + '戚': 'トオイシンセキ ノ セキ', + '戔': 'サン,アサイノキュウジノツクリ', + '駭': 'ガイ,オドロク,ウマヘンニジュウニシノイノシシ', + '或': 'アルイハ ノ アル', + '我': 'ガマン ノ ガ,ワレ', + '成': 'セイチョウスル ノ セイ,ナル', + '戒': 'ケイカイスル ノ カイ,イマシメル', + '錚': 'ソウ、カネヘンニアラソウノキュウジ', + '錘': 'ボウスイケイ ノ スイ,オモリ', + '錙': 'シ、カネヘンニシチョウヘイノシノツクリ', + '娑': 'シャバニデルノシャ', + '娟': 'ケン,オンナヘンニキヌイトノキヌノツクリ', + '娜': 'アダッポイノダ', + '娚': 'ナン,オンナヘンニオトコ', + '娘': 'ヒトリムスメ ノ ムスメ', + '娃': 'アイ,オンナヘン ニ ツチ フタツ', + '威': 'イゲンガアル ノ イ', + '娉': 'ヘイ,オンナヘンニショウヘイスルノヘイ', + '娶': 'メトル,シュ', + '娵': 'シュ,オンナヘンニシュザイノシュ', + '娼': 'ショウフ ノ ショウ,オンナヘン ニ ヒガ フタツ', + '娥': 'ガ,オンナヘンニガマンノガ', + '娠': 'ニンシンスル ノ シン', + '娯': 'ゴラク ノ ゴ', + '娩': 'ブンベンスル ノ ベン', + '産': 'ザイサン ノ サン', + '甥': 'オイメイ ノ オイ', + '甦': 'ソ,ヨミガエル,サラシナノサラニジドウセイトノセイ', + '用': 'リヨウスル ノ ヨウ,モチイル', + '甫': 'シジン ノ トホ ノ ホ', + '甬': 'ヨウ,ニホンブヨウノヨウノツクリ', + '田': 'スイデン ノ デン,タ', + '由': 'リユウ ノ ユウ', + '甲': 'コウオツ ノ コウ', + '申': 'シンコクスル ノ シン,モウス', + '男': 'オトコ,ダンシ ノ ダン', + '甸': 'デン,ツツミガマエニタンボノタ', + '町': 'マチ,シチョウソン ノ チョウ', + '画': 'ガヨウシ ノ ガ', + '甼': 'マチ,シチョウソンノチョウノイタイジ', + '甃': 'シュウ,カワラノウエニキセツノアキ', + '甄': 'ケン,ケムリノツクリノミギニカワラ', + '甅': 'センチグラム,カワラノミギニタンイノリン', + '甌': 'オウ,クベツノクノキュウジノミギニカワラ', + '甍': 'ボウ,イラカ', + '甎': 'セン,センモンカノセンノキュウジノミギニカワラ', + '甑': 'モノヲムス コシキ', + '甓': 'ヘキ,カベノツチノカワリニカワラ', + '甕': 'オウ,カメ,ヨウリツスルノヨウノツクリノシタニカワラ', + '甘': 'アマイ,カンミリョウ ノ カン', + '甚': 'ジンダイナ ノ ジン,ハナハダシイ', + '甜': 'テンサイトウ ノ テン', + '甞': 'ガシンショウタンノショウノイタイジ', + '生': 'イキル,セイカツ ノ セイ', + '勧': 'カンユウスル ノ カン,ススメル', + '勦': 'ソウ,ハチノスノキュウジニチカラ', + '勤': 'キンム ノ キン', + '勣': 'セキ,セキニンノセキニチカラ', + '勢': 'セイリョク ノ セイ,イキオイ', + '勠': 'リク,ゴビュウノビュウノツクリニチカラ', + '勿': 'モチロン ノ モチ', + '勾': 'キュウコウバイ ノ コウ', + '勺': 'ヨウセキ ノ タンイ ノ シャク,ツツミガマエ ニ テン', + '勹': 'ホウ,ブシュノツツミガマエ', + '勸': 'カンユウスルノカン,ススメルノキュウジ', + '勵': 'ゲキレイスルノレイノキュウジ', + '勳': 'クンショウノクン,イサオノキュウジ', + '勲': 'クンショウ ノ クン,イサオ', + '勍': 'ケイ,トウキョウノキョウニチカラ', + '勉': 'ベンキョウ ノ ベン', + '勇': 'ユウキ ノ ユウ,イサマシイ', + '勅': 'チョクメイ ノ チョク', + '勃': 'ボッパツスル ノ ボツ', + '勁': 'ケイ,ツヨイ,ケイドウミャクノケイノヒダリガワニチカラ', + '募': 'ボシュウスル ノ ボ,ツノル', + '勞': 'ロウドウノロウノキュウジ', + '勝': 'カチマケ ノ カチ,ショウ', + '務': 'ギム ノ ム,ツトメル', + '勘': 'オカンジョウ ノ カン', + '勗': 'キョク,ニチョウビノニチノシタニキュウジョスルノジョ', + '5': 'ゴ', + '動': 'ドウブツ ノ ドウ,ウゴク', + '勒': 'ミロクボサツノロク', + 'ゃ': 'チイサイ ヤカン ノ ヤ', + '狸': 'タヌキ', + '狽': 'ロウバイスル ノ バイ', + '狼': 'オオカミ,ロウバイスル ノ ロウ', + '狷': 'ケンカイナノケン,ケモノヘンニキヌイトノキヌノツクリ', + '狩': 'シュリョウ ノ シュ,カリ', + '狭': 'セマイ,キョウ', + '独': 'ドクリツ ノ ドク', + '狡': 'コウカツナノコウ,ズルイ', + '狠': 'コン,ケモノヘンニダイコンノコンノツクリ', + '狢': 'ケモノヘンノドウブツノムジナ', + '狙': 'ソゲキ ノ ソ,ネラウ', + '狛': 'コマイヌ ノ コマ,ケモノヘン ニ シロ', + '狐': 'キツネ', + '狒': 'ドウブツノヒヒノヒ', + '狗': 'テング ノ ク,イヌ', + '狎': 'コウ,ナレル,ケモノヘンニコウオツノコウ', + '狃': 'ジュウ,ケモノヘンニジュウニシノウシ', + '狂': 'クルウ,キョウゲン ノ キョウ', + '狄': 'ナンバンホクテキノテキ', + '狆': 'イヌノチン', + '〝': 'ヒゲヒラキ', + '〟': 'ヒゲトジ', + '【': 'クロカッコ', + '】': 'トジクロカッコ', + '〒': 'ユウビン', + '〓': 'ゲタジルシ', + '〔': 'キッコウ', + '〕': 'トジキッコウ', + '〈': 'ヤマカッコ', + '〉': 'トジヤマカッコ', + '《': 'ニジュウヤマカッコ', + '》': 'トジニジュウヤマカッコ', + '「': 'カギ', + '」': 'トジカギ', + '『': 'ニジュウカギ', + '』': 'トジニジュウカギ', + ' ': 'スペース', + '、': 'テン', + '。': 'マル', + '〃': 'オナジク', + '々': 'オドリジ', + '〆': 'シメ', + '〇': 'ゼロ', + '§': 'セクション', + '¨': 'ウムラウト', + '´': 'アクサンテギュ', + '¶': 'ダンラクキゴウ', + '°': 'ド', + '±': 'プラスマイナス', + '邨': 'ムラ,シチョウソンノソンノイタイジ', + '邪': 'ジャマ ノ ジャ,ヨコシマ', + '邯': 'カンタンノユメノカン', + '氏': 'シメイ ノ シ,ウジ', + '那': 'ワカダンナ ノ ナ', + '氈': 'モウセンゴケノセン', + '邦': 'イホウジン ノ ホウ', + '邸': 'テイタク ノ テイ,ヤシキ', + '气': 'キ,ブシュノキガマエ', + '気': 'クウキ ノ キ', + '嶋': 'トウ,ヤマヘン ニ トリ ノ シマ', + '民': 'コクミン ノ ミン,タミ', + '氓': 'ボウ,ボウメイスルノボウノミギニコクミンノミン', + '嶌': 'トウ,シマグニノシマノイタイジ,ヤマノシタニトリ', + '邵': 'ショウ,マネクノツクリノミギニオオザト', + '氛': 'フン,キガマエニハンブンノブン', + '氤': 'イン,キガマエニインガオウホウノイン', + '邊': 'シュウヘンノヘン,アタリノキュウジ', + '氣': 'クウキノキノキュウジ', + '邏': 'ケイラスルノラ', + '邀': 'ヨウ,シンニョウニゲキレイスルノゲキノツクリ', + '邁': 'マイシンスルノマイ', + '邂': 'メグリアウイミノカイコウノカイ', + '邃': 'スイ,シンニュウニアナカンムリニグンタイノタイノツクリ', + '還': 'カンレキ ノ カン,カエル', + '邇': 'ジ,シンニョウニソツジナガラノジ', + '水': 'スイヨウビ ノ スイ,ミズ', + '氷': 'ヒョウガ ノ ヒョウ,コオリ', + '邑': 'トユウ ノ ユウ,ムラ', + '氾': 'カワガハンランスル ノ ハン', + '永': 'エイキュウ ノ エイ,ナガイ', + '褓': 'ホウ、ムツキ、コロモヘンニホケンシツノホ', + '褒': 'ホメル,ホウビ ノ ホウ', + '褐': 'カッショク ノ カツ', + '嶄': 'ザン,ヤマノシタニザンシンナノザン', + '褝': 'タン、コロモヘンニタンジュンノタン', + '複': 'フクザツ ノ フク', + '褄': 'ツジツマガアウノツマ', + 'U': 'ユー ユージュアリー', + '褂': 'カイ、コロモヘンニカケブトンノカケノツクリ', + '嶇': 'ク,ヤマヘンニクベツスルノクノキュウジ', + '褊': 'ヘン、コロモヘンニヘンペイソクノヘン', + '褶': 'シュウキョクサンミャクノシュウ、ヒダ', + '千': 'カンスウジ ノ セン', + '褻': 'ワイセツナノセツ', + '褸': 'ランルヲマトウノル', + '褥': 'サンジョクノジョク、コロモヘンニブジョクノジョク', + '褫': 'チ,テイシンショウノテイノキュウジノシンニョウノカワリニコロモヘン', + '褪': 'イロアセルノアセル、コロモヘンニタイクツノタイ', + '嶝': 'トウ,ヤマヘンニトザンノト', + '歟': 'ヨ,アタエルノキュウジニフカケツノケツ', + '歛': 'カン,ケンサスルノケンノキュウジノツクリニフカケツノケツ', + '歙': 'キュウ,ゴウカクノゴウノシタニウモウノウ,ソノミギニフカケツノケツ', + '麈': 'シュ,シカノシタニシュジンコウノシュ', + '歔': 'キョ,キョエイシンノキョノキュウジニフカケツノケツ', + '麋': 'ビ,シカノシタニコメ', + '麌': 'オジカ,ゴ,シカノシタニゴフクヤノゴノキュウジケイ', + '歓': 'カンゲイ ノ カン,ヨロコブ', + '歐': 'オウベイノオウノキュウジ', + '歎': 'ナゲク,タンニショウ ノ タン', + '麑': 'カノコ,ゲイ,シカノシタニジドウセイトノジノキュウジ', + '歌': 'ウタ,カシュ ノ カ', + '麓': 'サンロク ノ ロク,フモト', + '麕': 'ノロジカノノロ,シカノシタニクニガマエニノギヘンノノギ', + '歉': 'ケン,カネルニフカケツノケツ', + '歇': 'カンケツセンノケツ,カッショクノカツノツクリニフカケツノケツ', + '歃': 'ソウ,ソウニュウクノソウノキュウジノツクリニフカケツノケツ', + '麟': 'キリン ノ リン', + '歿': 'ボツ,カバネヘンニチンボツノボツノキュウジノツクリ', + '死': 'シボウ ノ シ,シヌ', + '歸': 'キタクスルノキ,カエルノキュウジ', + '歹': 'ガツ,ブシュノカバネヘン', + '麩': 'オフノフ,ムギノキュウジニオット', + '歴': 'レキシ ノ レキ', + '歳': 'サイゲツ ノ サイ,トシ', + '歯': 'ハブラシ ノ ハ,シ', + '歪': 'ヒズム,ワイキョクスル ノ ワイ', + '歩': 'アルク,ホドウ ノ ホ', + '武': 'ブキ ノ ブ', + '麹': 'コウジキン ノ コウジ', + '此': 'ヒガンシガン ノ シ,コノ', + '麻': 'マスイ ノ マ,アサ', + '止': 'キンシスル ノ シ,トメル', + '正': 'タダシイ,ショウガツ ノ ショウ', + '麾': 'イエヤスキカノキ,マスイノマノシタニウモウノモウ', + '歡': 'カンゲイスルノカンノキュウジ', + '聨': 'ミミヘンノレンゴウノレンノイタイジ', + '聯': 'ミミヘン ノ レンゴウ ノ レン', + '聡': 'ソウメイナ ノ ソウ,サトイ', + '聢': 'シカト,ミミヘンニサダメル', + '聹': 'ネイ,ミミヘンニテイネイノネイ', + '聽': 'ホチョウキノチョウノキュウジ', + '聾': 'ロウガッコウ ノ ロウ', + '聿': 'イツ,ブシュノフデヅクリ', + '聰': 'ソウメイナノソウノキュウジ', + '聲': 'オンセイノセイ,コエノキュウジ', + '聳': 'ソビエル', + '聴': 'チョウカク ノ チョウ,キク', + '聶': 'ジョウ,ミミミッツ', + '職': 'ショクギョウ ノ ショク', + '聊': 'ブリョウヲカコツノリョウ', + '聆': 'レイ,ミミヘンニメイレイスルノレイ', + '聘': 'ショウヘイスルノヘイ', + '聚': 'ジュラクダイノジュ', + '聞': 'シンブン ノ ブン,キコエル', + '聟': 'ムコノイタイジ,ツウチヒョウノチノシタニミミ', + '聒': 'カツ,ミミヘンニシタヲカムノシタ', + '聖': 'セイカリレー ノ セイ', + '+': 'プラス', + '糒': 'ヒ,ホシイイ,コメヘンニジュンビスルノビノツクリ', + '糖': 'ブドウトウ ノ トウ', + '糘': 'スクモ,コメヘンニイエ', + '糜': 'ビランノビ', + '糟': 'カス,ソウコウ ノ ツマ ノ ソウ', + '糞': 'フンニョウ ノ フン,クソ', + '糀': 'コウジ,コメヘンニハナビノハナ', + '糂': 'サン,コメヘンニハナハダシイ', + '糅': 'ジュウ,コメヘンニジュウドウノジュウ', + '糊': 'ノリヅケ ノ ノリ,コ', + '糎': 'ナガサ ノ タンイ ノ センチメートル', + '糲': 'レイ,コメヘンニハゲムノキュウジノヒダリガワ', + '糴': 'テキ,カイヨネ', + '糶': 'チョウ,ウリヨネ', + '糸': 'ケイト ノ イト,シ', + '系': 'タイヨウケイ ノ ケイ', + '糺': 'キュウダンスルノキュウ,イトヘンニフダノツクリ', + '糾': 'フンキュウスル ノ キュウ', + '糠': 'ヌカヅケ ノ ヌカ', + '糢': 'アイマイモコノモ,コメヘンニバクダイナノバク', + '糧': 'ショクリョウ ノ リョウ,カテ', + '糯': 'モチゴメ,コメヘンニヒツジュヒンノジュ', + '妙': 'キミョウナ ノ ミョウ', + '妛': 'ヤマノシタニカンスウジノイチ,ソノシタニオンナ', + '妝': 'ショウ,ショウグンノショウノキュウジノヒダリガワニオンナ', + '妓': 'ゲイギ ノ ギ,オンナヘン ニ ササエル', + '妖': 'モリ ノ ヨウセイ ノ ヨウ', + '妊': 'ニンシンスル ノ ニン', + '妍': 'ケン,オンナヘンニケンキュウノケンノツクリ', + '妁': 'シャク,オンナヘンニヨウセキノタンイノシャク', + '如': 'トツジョ ノ ジョ', + '妃': 'オウヒ ノ ヒ,キサキ', + '妄': 'コダイモウソウ ノ モウ', + '妹': 'イモウト,シマイ ノ マイ', + '妻': 'フサイ ノ サイ,ツマ', + '妾': 'メカケ,ショウ', + '妲': 'ダツ,オンナヘンニガンタンノタン', + '妨': 'ボウガイスル ノ ボウ,サマタゲル', + '妬': 'シットスル ノ ト,ネタム', + '妣': 'ヒ,オンナヘンニヒカクスルノヒ', + '妥': 'ダキョウスル ノ ダ', + '疫': 'メンエキ ノ エキ', + '疣': 'イボ,ユウ,ヤマイダレニモットモ', + '疥': 'ヒフビョウノカイセンノカイ,ヤマイダレニカイゴノカイ', + '疸': 'オウダンノダン,ヤマイダレニガンタンノタン', + '疹': 'フウシン ノ シン', + '疾': 'シッペイ ノ シツ', + '疼': 'トウツウノトウ,ウズク', + '疽': 'エソヲオコスノソ', + '疲': 'ツカレル,ヒロウスル ノ ヒ', + '疳': 'カン,ヤマイダレニアマイ', + '疱': 'ミズボウソウノホウ', + '疵': 'キズ,ヤマイダレニヒガンシガンノシ', + '疊': 'タタミノキュウジ', + '疋': 'オリモノ ノ タンイ ノ ヒキ', + '疉': 'タタミノキュウジノシタガヘンカシタイタイジ', + '疎': 'カソチ ノ ソ', + '疏': 'ソスイ ノ ソ,ベンソ ノ ソ', + '疂': 'タタミノキュウジノチュウオウガヘンカシタイタイジ', + '疆': 'シンキョウウイグルジチクノキョウ', + '疇': 'ハンチュウノハン,タヘンニコトブキノキュウジ', + '疚': 'キュウ,ヤマイダレニエイキュウノキュウ', + '疝': 'センキモチノセン,ヤマイダレニヤマ', + '疑': 'ギモン ノ ギ,ウタガウ', + '疔': 'メンチョウノチョウ', + 'l': 'エル ラブ', + '掵': 'ハバ,テヘンニイノチ', + '掴': 'ツカム,テヘン ニ クニ', + '掲': 'ケイジバン ノ ケイ,カカゲル', + '饑': 'キキンニミマワレルノキ,ヒダルイ', + '掾': 'エン,テヘンニエンガワノエンノキュウジノツクリ', + '饒': 'ジョウゼツノジョウ,ユタカ', + '掻': 'ヒッカク ノ カク,カッカソウヨウ ノ ソウ', + '饗': 'キョウエン ノ キョウ,モテナス', + '控': 'コウジョスル ノ コウ,ヒカエル', + '接': 'セツゾクスル ノ セツ', + '掣': 'セイ,セイゲンスルノセイノシタニテ', + '探': 'タンケン ノ タン,サガス', + '採': 'サイヨウ ノ サイ,トル', + '掠': 'カスメル,リャクダツ ノ リャク', + '掬': 'スクイナゲ ノ スクウ', + '掫': 'ソウ,テヘンニシュザイスルノシュ', + '措': 'ソチスル ノ ソ', + '掩': 'エンゴシャゲキ ノ エン', + '推': 'スイセンスル ノ スイ,オス', + '掖': 'エキ,テヘンニヒルヨルノヨル', + '排': 'ハイジョスル ノ ハイ', + '掟': 'オキテ,テヘンニサダメル', + '掛': 'カケブトン ノ カケ', + '掘': 'ホル,ハックツ ノ クツ', + '掃': 'ソウジスル ノ ソウ,ハク', + '掀': 'キン,テヘンニキンキジャクヤクノキン', + '掏': 'トウ,テヘンニトウゲイカノトウノツクリ', + '掎': 'キ,テヘンニキミョウナノキ', + '掌': 'ショウアクスル ノ ショウ,テノヒラ', + '掉': 'チョウ,テヘンニタッキュウノタク', + '授': 'ジュギョウ ノ ジュ,サズケル', + '蹂': 'ジュウリンスルノジュウ', + '蹄': 'テイテツ ノ テイ,ヒヅメ', + '蹇': 'ケン,サムイノシタニテンノカワリニアシ', + '蹈': 'トウ,アシヘンニイネノキュウジノツクリ', + '蹉': 'ジンセイノサテツノサ', + '蹊': 'ケイ,アシヘンニケイリュウヅリノケイノキュウジノツクリ', + '蹌': 'ヨロメク,ソウロウノソウ', + '蹐': 'セキ,アシヘンニセキズイノセキ', + '蹕': 'ヒツ,アシヘンニヒッキョウノヒツ', + '蹙': 'ヒンシュクヲカウノシュク', + '蹟': 'キセキ ノ セキ,アシヘン ニ セキニン ノ セキ', + '蹠': 'セキ,アシヘンニショミンノショ', + '蹣': 'スイホマンサンノマン,アシヘンニマンゾクノマンノキュウジノツクリ', + '蹤': 'ショウ,アシヘンニジュウジスルノジュウノキュウジ', + '蹲': 'ソンキョスルノソン,アシヘンニソンケイスルノソン', + '蹴': 'ケル,シュウキュウ ノ シュウ', + '蹶': 'ケツ,アシヘンニユウボクミンゾクノトッケツノケツ', + '蹼': 'ホク,アシヘンニダボクノボクノツクリ', + '進': 'シンポ ノ シン,ススム', + '涎': 'スイゼンノマトノゼン,ヨダレ', + '涌': 'ワク,コワクダニ ノ ワク', + '逶': 'イ,シンニョウニガッキュウイインノイ', + '消': 'ショウボウシャ ノ ショウ,ケス', + '涅': 'ネハンノネ', + '逹': 'ハイタツノタツノイタイジ', + '逾': 'ユ,シンニョウニニレノキノニレノツクリ', + '逼': 'ヒッパクスル ノ ヒツ', + '逢': 'ダンジョ ノ アイビキ ノ アイ', + '連': 'レンラク ノ レン', + '造': 'カイゾウ ノ ゾウ,ツクル', + '涜': 'ボウトクスル ノ トク,ケガス', + '涛': 'トウ,サンズイ ニ コトブキ', + '逧': 'サコ,シンニョウニタニ', + '涙': 'ナミダ,ルイセン ノ ルイ', + '涕': 'テイ,ナミダ,サンズイニオトウト', + '涓': 'ケン,サンズイニキヌイトノキヌノツクリ', + '涯': 'イッショウガイ ノ ガイ', + '逓': 'テイシンショウ ノ テイ', + '逐': 'チクジ ノ チク', + '逑': 'キュウ、シンニョウニモトメル', + '逖': 'テキ、シンニョウニイテキノテキ', + '逗': 'トウリュウスル ノ トウ,シンニョウ ニ マメ', + '途': 'トチュウ ノ ト', + '逕': 'ケイ、シンニョウニケイドウミャクノケイノヒダリガワ', + '通': 'コウツウ ノ ツウ,トオル', + '這': 'ハウ', + '逞': 'タクマシイ,テイ', + '速': 'ソクド ノ ソク,ハヤイ', + '逝': 'セイキョスル ノ セイ,ユク', + '逃': 'ニゲル,トウボウスル ノ トウ', + '退': 'タイクツ ノ タイ', + '涼': 'スズシイ,ノウリョウ ノ リョウ', + '逆': 'ギャクテン ノ ギャク,サカサ', + '涸': 'カレル,サンズイニカタマル', + '逋': 'ホ、シンニョウニシジンノトホノホ', + '涵': 'トクヲカンヨウスルノカン', + '逎': 'シュウ,シンニョウニジュウニシノトリ', + '液': 'エキタイ ノ エキ', + '逍': 'サンポヲイミスルショウヨウノショウ', + '覘': 'テン,ドクセンスルノセンノミギニケンブツスルノケン', + 'B': 'ビー ボーイ', + '覓': 'ベキ,ツメノシタニケンブツスルノケン', + '覗': 'ノゾキミル ノ ノゾク', + '視': 'シリョクケンサ ノ シ', + '覈': 'ガク,オオイカンムリニゲキレイスルノゲキノツクリ', + '見': 'ミル,ケンブツ ノ ケン', + '覊': 'キビセイサクノキノイタイジ', + '規': 'キソクテキ ノ キ', + '要': 'ヨウキュウスル ノ ヨウ', + '覃': 'タン,オオイカンムリノシタニハヤオキノハヤイ', + '覇': 'セイハスル ノ ハ', + '覆': 'フクメン ノ フク,オオウ', + '覺': 'カンカクノカク,オボエルノキュウジ', + '覽': 'ハクランカイノランノキュウジ', + '覿': 'コウカテキメンノテキ', + '観': 'カンキャク ノ カン', + '覲': 'キン,キンムノキンノキュウジタイノチカラノカワリニケンブツスルノケン', + '覩': 'ト,カガクシャノシャノキュウジタイノミギニケンブツスルノケン', + '親': 'オヤ,リョウシン ノ シン', + '覬': 'キ,ガイセンモンノガイノミギニケンブツスルノケン', + '覯': 'コウ,ミゾノツクリノミギニケンブツスルノケン', + '覡': 'ケキ,ジンジャノミコノフノミギニケンブツスルノケン', + '覧': 'ハクランカイ ノ ラン', + '覦': 'ユ,ニレノキノニレノツクリノミギニケンブツスルノケン', + 'も': 'モミジ ノ モ', + '剰': 'ジシンカジョウ ノ ジョウ', + '剳': 'ゴジュウノトウノトウノツクリニリットウ', + '割': 'ワリアイ ノ ワリ', + '創': 'ソウリツスル ノ ソウ', + 'ょ': 'チイサイ ヨット ノ ヨ', + 'や': 'ヤカン ノ ヤ', + 'ゅ': 'チイサイ ユカタ ノ ユ', + 'り': 'リンゴ ノ リ', + 'る': 'ルスバン ノ ル', + 'よ': 'ヨット ノ ヨ', + 'ら': 'ラジオ ノ ラ', + '剽': 'ヒョウセツスルノヒョウ', + 'わ': 'ワカメ ノ ワ', + 'れ': 'レモン ノ レ', + 'ろ': 'ロウカ ノ ロ', + 'を': 'ヲワリ ノ オ', + 'ん': 'オシマイ ノ ン', + 'ゐ': 'ムカシ ノ イ', + 'ゑ': 'ムカシ ノ エ', + '剥': 'ハクリスル ノ ハク,ハガレル', + '剤': 'ヤクザイシ ノ ザイ', + '剩': 'ジョウ,ジシンカジョウノジョウノキュウジ', + '゛': 'ダクテン', + '剪': 'ニワキヲセンテイスルノセン,キル', + 'ゞ': 'クリカエシダクテン', + '゜': 'ハンダクテン', + 'ゝ': 'クリカエシ', + 'ア': 'アサヒ ノ ア', + 'ィ': 'チイサイ イチゴ ノ イ', + 'ァ': 'チイサイ アサヒ ノ ア', + 'ウ': 'ウサギ ノ ウ', + 'ェ': 'チイサイ エイゴ ノ エ', + 'イ': 'イチゴ ノ イ', + 'ゥ': 'チイサイ ウサギ ノ ウ', + 'オ': 'オオサカ ノ オ', + 'カ': 'カゾク ノ カ', + 'エ': 'エイゴ ノ エ', + 'ォ': 'チイサイ オオサカ ノ オ', + 'ギ': 'ギンコウ ノ ギ', + 'ク': 'クスリ ノ ク', + 'ガ': 'ガッコウ ノ ガ', + 'キ': 'キッテ ノ キ', + 'ゲ': 'ゲーム ノ ゲ', + 'コ': 'コドモ ノ コ', + 'グ': 'グランド ノ グ', + 'ケ': 'ケシキ ノ ケ', + 'ザ': 'ザブトン ノ ザ', + 'シ': 'シンブン ノ シ', + '則': 'ホウソク ノ ソク', + 'サ': 'サクラ ノ サ', + 'ズ': 'ズボン ノ ズ', + 'セ': 'セカイ ノ セ', + 'ジ': 'ジカン ノ ジ', + 'ス': 'スズメ ノ ス', + '前': 'マエ,ゼンゴ ノ ゼン', + '剌': 'ハツラツノラツ', + '剏': 'ソウ,ヘイヨウスルノヘイノツクリニヤイバノイタイジ', + 'ソ': 'ソロバン ノ ソ', + '罘': 'フウ,アミガシラニフシギノフ', + '罟': 'コ,アミガシラニチュウコシャノコ', + '网': 'ボウ,ブシュノアミガシラ', + '罐': 'カンヅメノカンノキュウジ', + '罕': 'トリアミヲイミスルカン', + '罔': 'モウ,モウマクノモウノツクリ', + '罎': 'アキビンノビン,ホトギヘンニクモリ', + '罍': 'ライ,タハタノタミッツノシタニホトギ', + '罌': 'オウ,カイガラノカイフタツノシタニホトギ', + '罅': 'ヒビワレルノヒビ,カ', + '罹': 'リカンスルノリ,カカル', + '罸': 'ツミトバツノバツノイタイジ', + '署': 'ショメイスル ノ ショ', + '罰': 'ツミトバツ ノ バツ', + '罷': 'ヒメンスル ノ ヒ', + '罵': 'バセイ ノ バ,ノノシル', + '罫': 'ケイセンヲヒク ノ ケイ', + '罪': 'ハンザイ ノ ザイ,ツミ', + '罩': 'トウ,アミガシラニタッキュウノタク', + '罨': 'アンポウノアン', + '置': 'ソウチ ノ チ,オク', + 'ゴ': 'ゴリラ ノ ゴ', + '罠': 'ワナ,アミガシラニタミ', + '罧': 'シノヅケ,アミガシラニミツリンノリン', + '嶂': 'ショウ,ヤマヘンニブンショウヲカクノショウ', + '邱': 'キュウ,サキュウノキュウノミギニオオザト', + 'ゼ': 'ゼンブ ノ ゼ', + '擠': 'セイ,テヘンニヘソノツクリ', + '擡': 'タイトウスルノタイ,テヘンニダイドコロノダイノキュウジ', + '擢': 'バッテキスル ノ テキ', + '擣': 'トウ,テヘンニコトブキノキュウジ', + '擦': 'マサツ ノ サツ,スル', + '擧': 'センキョノキョ,アゲルノキュウジ', + '擬': 'モギテン ノ ギ', + '擯': 'ヒン,テヘンニライヒンノヒン', + '鸚': 'トリノオウムノオウ', + '擱': 'カクザスルノカク,テヘンニテンシュカクノカク', + '擲': 'トウテキキョウギノテキ,ナゲウツ', + '擴': 'カクダイスルノカクノキュウジ', + '擶': 'セン,テヘンニタケカンムリニマエ', + '擺': 'ハイ,テヘンニヒメンスルノヒ', + '擽': 'リャク,テヘンニオンガクノガクノキュウジ', + '擾': 'ジョウラン ノ ジョウ,テヘン ニ ユウウツ ノ ユウ', + '擁': 'ヨウリツスル ノ ヨウ', + '擂': 'ライ,テヘンニカミナリ', + '擅': 'ドクセンジョウノセン,テヘンニダンカノダンノツクリ', + '擇': 'センタクシノタクノキュウジ', + '操': 'ソウジュウスル ノ ソウ,アヤツル', + '擒': 'キン,テヘンニモウキンルイノキン', + '擔': 'タンニンノタンノキュウジ', + '擘': 'ヘキ,カベノツチノカワリニテ', + '據': 'キョテンノキョノキュウジ', + '胱': 'ボウコウエンノコウ', + '胴': 'ドウアゲ ノ ドウ', + '胸': 'キョウイ ノ キョウ,ムネ', + '胼': 'ヘイ,ニクヅキニヘイゴウスルノヘイノツクリ', + '能': 'サイノウ ノ ノウ', + '胡': 'クロコショウ ノ コ', + '胤': 'ゴラクイン ノ イン,タネ', + '胥': 'ショ,オリモノノタンイノヒキノシタニニクヅキ', + 'Y': 'ワイ ヤング', + '胯': 'コ,ニクヅキニハカマノツクリ', + '胖': 'ハン,ニクヅキニハンブンノハン', + '驤': 'ジョウ,ウマヘンニユズルノツクリノキュウジ', + '胚': 'ハイガマイノハイ', + '胛': 'コウ,ニクヅキニコウオツノコウ', + '胙': 'ソ,ニクヅキニムカシナガラノナガラ', + '胞': 'サイボウ ノ ボウ', + '胝': 'チ,ニクヅキニテイコウスルノテイノツクリ', + '胃': 'イブクロ ノ イ', + '胆': 'ダイタンナ ノ タン', + '胄': 'チュウ,リユウノユウノシタニニクヅキ', + '胎': 'ジュタイスル ノ ジュ', + '背': 'セボネ ノ セ', + '難': 'コンナン ノ ナン,ムズカシイ', + '離': 'ハナレル,リリク ノ リ', + '挺': 'クウテイブタイ ノ テイ', + '挽': 'バンカイスル ノ バン', + '挿': 'ソウニュウスル ノ ソウ,サス', + '挾': 'ハサム,キョウノキュウジ', + '雫': 'シズク,アメカンムリ ニ シタ', + '雪': 'ユキダルマ ノ ユキ,セツ', + '雨': 'アメ,ウテン ノ ウ', + '挨': 'アイサツスル ノ アイ', + '挫': 'ネンザ ノ ザ,クジク', + '雰': 'フンイキ ノ フン', + '雷': 'カミナリ,ライウ ノ ライ', + '零': 'レイサイキギョウ ノ レイ', + '振': 'サンシンスル ノ シン,フル', + '電': 'デンワ ノ デン', + '雹': 'ヒョウアラレノヒョウ,アメカンムリニツツム', + '挧': 'ウ,テヘンニウモウノウ', + '挙': 'センキョ ノ キョ,アゲル', + '雁': 'ワタリドリ ノ ガン,カリ', + '雀': 'スズメ,ジャク', + '雇': 'ヤトウ,コヨウスル ノ コ', + '集': 'シュウゴウスル ノ シュウ,アツマル', + '挟': 'ハサム,キョウ', + '雄': 'オスメス ノ オス,ユウ', + '挑': 'チョウセンスル ノ チョウ,イドム', + '驩': 'カン,ウマヘンニカンボクノカン', + '雉': 'トリノキジ、チ', + '雎': 'ショ、ナオカツノカツノミギニフルトリ', + '雍': 'シンノヨウセイテイノヨウ', + '雌': 'オスメス ノ メス,シ', + '按': 'アンマ ノ アン', + '挈': 'ケツ,ケイヤクスルノケイノダイノカワリニテ', + '雑': 'ザツオン ノ ザツ', + '挌': 'カク,テヘンニカクジノカク', + '雕': 'チョウ、シュウヘンノシュウノミギニフルトリ', + '持': 'ジゾクスル ノ ジ,モツ', + '雙': 'ソウガンキョウノソウノキュウジ', + '挂': 'ケイ,テヘンニツチフタツ', + '指': 'シドウスル ノ シ,ユビ', + '雜': 'ザツオンノザツノイキュウジ', + '車': 'クルマ,デンシャ ノ シャ', + '軋': 'アツレキノアツ', + '軈': 'ヤガテ、ミヘンニオウエンスルノオウノキュウジ', + '軌': 'キドウニノル ノ キ', + '軍': 'グンタイ ノ グン', + '軆': 'タイ、ミヘンニユタカ', + '軅': 'ヤガテ、ミヘンニトリノカリ', + '軛': 'クビキ、クルマヘンニヤクドシノヤク', + '∇': 'ナブラ', + '軒': 'イッケンヤ ノ ケン,ノキ', + '軫': 'シン、クルマヘンニシンサツスルノシンノツクリ', + '転': 'ウンテン ノ テン,コロガス', + '軣': 'ゴウ、トドロクノイタイジ', + '軻': 'カ、クルマヘンニカノウセイノカ', + '軸': 'カケジク ノ ジク', + '√': 'ルート', + '軾': 'ショク、クルマヘンニニュウガクシキノシキ', + '軼': 'イツ、クルマヘンニウシナウ', + '軽': 'カルイオモイ ノ カルイ,ケイ', + '∝': 'ヒレイ', + '夢': 'ユメ,ムチュウ ノ ム', + '大': 'ダイショウ ノ ダイ,オオキイ', + '夥': 'カ,オビタダシイ', + '太': 'フトイホソイ ノ フトイ,タイ', + '夫': 'オット,フサイ ノ フ', + '天': 'テンキヨホウ ノ テン', + '央': 'チュウオウ ノ オウ', + '夬': 'カイ,ワケル,タスウケツノケツノツクリ', + '夭': 'ヨウセツスルノヨウ,ワカイ', + '夲': 'トウ,オオキイノシタニスウジノジュウ', + '知': 'チシキ ノ チ,シル', + '失': 'シツレン ノ シツウシナウ', + '夷': 'ジョウイ ノ イ,エビス', + '夸': 'カ,コチョウスルノコノツクリ', + '驚': 'オドロク,キョウタン ノ キョウ', + '夾': 'キョウ,ハサムノキュウジノツクリ', + '頗': 'スコブル', + '夂': 'チ,ブシュノフユガシラ', + '夊': 'スイ,ブシュノスイニョウ', + '変': 'ヘンカ ノ ヘン,カエル', + '夏': 'ナツヤスミ ノ ナツ,カ', + '/': 'スラッシュ', + '頚': 'クビ,ケイ', + '夐': 'ケイ,スイニョウノハルカ', + '外': 'ガイコク ノ ガイ,ソト', + '夕': 'ユウガタ ノ ユウ', + '多': 'オオイスクナイ ノ オオイ,タ', + '夛': 'オオイスクナイノオオイノイタイジ', + '夘': 'ジュウニシノウノイタイジ', + '夙': 'ツトニ,シュク', + '夜': 'コンヤ ノ ヤ,ヨル', + '∨': 'マタハ', + '琥': 'コハクイロノコ', + '琢': 'セッサタクマ ノ タク,ミガク', + '驍': 'ウマヘンニギョウシュンノギョウノキュウジ', + '琿': 'コン,オウヘンニグンタイノグン', + '琺': 'ホウロウナベノホウ,オウヘンニホウリツノホウ', + '琴': 'モッキン ノ キン,コト', + '琵': 'ビワコ ノ ビ', + '琶': 'ビワコ ノ ニモジメ ノ ハ', + '琲': 'ハイ,コーヒーノアテジノニモジメ', + '琳': 'オウヘン ニ ハヤシ ノ リン', + '琉': 'リュウキュウ ノ リュウ', + '琅': 'ロウ,オウヘンニカイリョウスルノリョウ', + '理': 'リユウ ノ リ', + '∮': 'シュウカイセキブン', + '球': 'チキュウ ノ キュウ,タマ', + '出': 'デル,ガイシュツ ノ シュツ', + '凹': 'オウトツ ノ オウ,クボム', + '凸': 'オウトツ ノ トツ', + '凾': 'ハコダテノハコ,カンノイタイジ', + '函': 'ハコダテ ノ ハコ,カン', + '凱': 'ガイセンモン ノ ガイ', + '凰': 'トリノホウオウノオウ', + '凶': 'キチトキョウ ノ キョウ', + '凵': 'ケン,ブシュノウケバコ', + '凪': 'ユウナギ ノ ナギ', + '凩': 'コガラシ', + '凭': 'ヒョウ,モタレル', + '凡': 'ヘイボン ノ ボン', + '几': 'キチョウメンノキ,ツクエ', + '凧': 'タコアゲ ノ タコ', + '処': 'ショブン ノ ショ', + '凛': 'リンレツタルノリンノイタイジ', + '凝': 'コル,ギョウコスル ノ ギョウ', + '凜': 'リンレツタルノリン', + '凖': 'ジュンビスルノジュンノイタイジ', + '頏': 'コウ,テイコウスルノコウノツクリノミギニページ', + '凋': 'チョウラク ノ チョウ,シボム', + '凉': 'スズシイノイタイジ,ニスイ', + '頌': 'ショウシュンノショウ,オオヤケニページ', + '凍': 'レイトウスル ノ トウ,コオル', + '凌': 'リョウガスル ノ リョウ,シノグ', + '准': 'ヒジュンスル ノ ジュン', + '凅': 'コ,コオル,ニスイニカタマル', + '凄': 'セイサンナ ノ セイ,スゴイ', + '頷': 'ウナズク,ガン', + '頸': 'ケイツイノケイ,クビ', + '頼': 'タノム,イライ ノ ライ', + '頽': 'タイハイテキナニタイ,ハゲヤマノハゲノミギニページ', + '頡': 'ケツ,ダイキチノキチニページ', + '鞣': 'ナメス,ジュウ', + '}': 'トジチュウカッコ', + '頭': 'アタマ,ズツウ ノ ズ', + 'ヌ': 'ヌリエ ノ ヌ', + 'p': 'ピー パパ', + '醴': 'アマザケ,レイ', + '醵': 'キョキンノキョ,ジュウニシノトリノミギニゲキダンノゲキノヒダリガワ', + '洒': 'オシャレノシャ,サンズイニニシ', + '洗': 'センタクモノ ノ セン,アラウ', + '洙': 'シュ,サンズイニシュイロノシュ', + '洛': 'ジョウラクスル ノ ラク', + '醸': 'ジョウゾウスル ノ ジョウ,カモス', + '洟': 'ハナミズ,イ,サンズイニジョウイノイ', + '洞': 'ドウクツ ノ ドウ,ホラ', + '醤': 'ショウユ ノ ショウ,ヒシオ', + '醢': 'カイ,ジュウニシノトリノミギニミギノシタニサラ', + '洋': 'ヨウフク ノ ヨウ', + '醯': 'ケイ,ジュウニシノトリノミギニナガレルノツクリノシタニサラ', + '洌': 'セイレツナイズミノレツ,サンズイニギョウレツノレツ', + '醪': 'モロミ,ロウ', + '醫': 'オイシャサンノイノキュウジ', + '洳': 'ジョ,サンズイニトツジョノジョ', + '洲': 'サンカクス ノ ス,サンズイツキ', + '洵': 'シュン,サンズイニゲジュンノジュン', + '醒': 'カクセイザイ ノ セイ,サメル', + '洶': 'キョウ,サンズイニムネガイタムノムネノツクリ', + '醜': 'シュウタイ ノ シュウ,ミニクイ', + '洸': 'コウ,サンズイニヒカリ', + '活': 'セイカツ ノ カツ', + '洽': 'コウ,サンズイニゴウカクノゴウ', + '派': 'ハバツ ノ ハ', + '醇': 'ホウジュンナカオリ ノ ジュン', + '津': 'ツナミ ノ ツ,シン', + '醂': 'ミリンノリン,ジュウニシノトリノミギニハヤシ', + '洩': 'キミツロウエイ ノ エイ,モラス', + '醍': 'ダイゴミ ノ ダイ', + '洫': 'キョク,サンズイニケツエキノケツ', + '洪': 'コウズイ ノ コウ', + '醉': 'デイスイスルノスイノキュウジ', + '醋': 'サク,ジュウニシノトリノミギニムカシ', + '蘢': 'ロウ,クサカンムリニキョウリュウノリュウノキュウジ', + '蘯': 'ホウトウムスコノトウノイタイジ', + '蘭': 'ランガク ノ ラン', + '蘰': 'カズラ,クサカンムリニイトヘンニウナギノツクリ', + '蘿': 'ラ,クサカンムリニモウラスルノラ', + '蘂': + 'メシベノシベ,ズイノイタイジ,クサカンムリニココロミッツニジュモクノモク', + '蘇': 'ソセイスル ノ ソ,ヨミガエル', + '蘆': 'アシ,クサカンムリニハゼノキノハゼノツクリ', + '蘋': 'ヒン,クサカンムリニヒンパンナノヒンノキュウジ', + '蘊': 'ウンチクヲカタムケルノウン,イトヘン', + '蘓': 'ソセイノソノイタイジ,クサカンムリニノギヘンニサカナ', + '蘗': 'オウバクシュウノバクノイタイジ', + '蘖': 'ゲツ,ヒコバエ', + '蘚': 'セン,コケ,クサカンムリニシンセンナノセン', + '龍': 'タツ,リュウ ノ キュウジ', + '摩': 'マサツ ノ マ', + '摯': 'シンシナタイドノシ,シツジノシツノシタニテ', + '摧': 'サイ,テヘンニモヨオシノツクリ', + '摺': 'テスリアシスリ ノ スリ', + '龝': 'アキ,ノギヘンニカメノキュウジ', + '摸': 'モシャスル ノ モ,テヘン', + '龕': 'ガンドウノガン,ゴウカクノゴウノシタニリュウ', + '摶': 'タン,テヘンニセンモンノセンノキュウジ', + '摎': 'コウ,テヘンニニカワノツクリ', + '摂': 'セッセイスル ノ セイ,トル', + '龠': 'ブシュノヤク,フエ', + '摘': 'テキハツスル ノ テキ,ツム', + '腴': 'ユ,ニクヅキニシュユノマノユ', + '腰': 'ヨウツウ ノ ヨウ,コシ', + '腱': 'アキレスケンノケン', + 'F': 'エフ フレンド', + '腿': 'ダイタイコツ ノ タイ,モモ', + '腸': 'ダイチョウ,ショウチョウ ノ チョウ', + '腹': 'ハラペコ ノ ハラ,フク', + '腺': 'コウジョウセン ノ セン', + '腥': 'セイ,ニクヅキニワクセイノセイ', + '腦': 'ズノウメイセキノノウノキュウジ', + '腮': 'エラ,ニクヅキニシアンガオノシ', + '腫': 'シュヨウ ノ シュ,ハレル', + '腔': 'コウクウゲカ ノ クウ,ニクヅキニソラ', + '腕': 'ウデ,ワンリョク ノ ワン', + '腐': 'クサル,フハイスル ノ フ', + '腑': 'フヌケノフ', + '腓': 'ヒコツノヒ,コムラ', + '腟': 'チツ,ニクヅキニキョウシツノシツ', + '腆': 'テン,ニクヅキニコクゴジテンノテン', + '腎': 'ジンゾウビョウ ノ ジン', + '腋': 'エキ,ワキ,ニクヅキニヨルヒルノヨル', + '郢': 'エイ,ゾウテイスルノテイノミギニオオザト', + '郡': 'チメイ ノ グン,コオリ', + '翕': 'キュウ,ゴウカクスルノゴウニウモウノウ', + '翔': 'ヒショウスルノショウ,カケル,ヒツジニウモウノウ', + '習': 'レンシュウ ノ シュウ,ナラウ', + '翌': 'ヨクジツ ノ ヨク', + '翊': 'ヨク,ドクリツノリツノミギニウモウノウ', + '翅': 'シ,ササエルノミギニウモウノウ', + '翆': 'ヒスイノスイノイタイジ', + '翁': 'オキナ,オウ', + '翼': 'ツバサ,ビヨク ノ ヨク', + '翹': 'ギョウ,ギョウシュンノギョウノキュウジニウモウノウ', + '翻': 'ホンヤクスル ノ ホン', + '翰': + 'ショカンヲ オクル ノ カン,シンカンセン ノ カン ノ ホス ノ カワリニ ウモウ ノ ウ', + '翳': 'カゲリ,エイ,オイシャサンノイニルマタ,ソノシタニウモウノウ', + '翩': 'ヘンポントヒルガエルノヘン', + '翫': 'ガン,レンシュウ ノ シュウ ニ ゲンキ ノ ゲン', + '翦': 'セン,マエウシロノマエノシタニウモウノウ', + '翡': 'ヒスイノヒ,ヒジョウグチノヒノシタニウモウノウ', + '翠': 'ヒスイ ノ スイ', + '墮': 'ダラクスルノダノキュウジ', + '墨': 'ボクジュウ ノ ボク,スミ', + '墫': 'タルノイタイジ', + '墳': 'コフン ノ フン', + '鐡': 'テツドウノテツノキュウジノテイノカワリニマメノシタガワ', + '墾': 'カイコンチ ノ コン', + '墸': 'ツチヘンニチョシャノチョノキュウジタイ', + '墹': 'ママ,ツチヘンニアイダ', + '墺': 'オウ,ツチヘンニオクバノオクノキュウジ', + '墻': 'ショウ,ツチヘンニリンショクノショク', + '墅': 'ショ,ノハラノノノシタニツチ', + '境': 'コッキョウ ノ キョウ,サカイ', + '増': 'ゾウカスル ノ ゾウ,フエル', + '墓': 'ボチ ノ ボ,ハカ', + '墜': 'ツイラクスル ノ ツイ', + '墟': 'ハイキョノキョ', + '環': 'シゼンカンキョウ ノ カン', + '郊': 'トウキョウキンコウ ノ コウ', + '璽': 'ギョメイギョジ ノ ジ', + '璧': 'ヘキ,カンペキナノヘキ', + '璢': 'ルリイロノルノイタイジ', + '郎': 'モモタロウ ノ ロウ', + '璞': 'ハク,アラタマ,オウヘンニシモベノツクリ', + '璃': 'ルリイロ ノ リ', + '璋': 'ショウ,オウヘンニブンショウヲカクノショウ', + '郛': 'フ,ツメノシタニコドモノコノミギニオオザト', + '鰭': 'サカナ ノ ヒレ', + '陥': 'オチイル,カンラク ノ カン', + '除': 'ジョガイ ノ ジョ,ノゾク', + '陦': 'トウ、コザトヘンニコトブキ', + '陣': 'シュツジンスル ノ ジン', + '院': 'ニュウインスル ノ イン', + '陬': 'ソウ、コザトヘンニシュトクスルノシュ', + '陪': 'バイシンイン ノ バイ', + '陵': 'キュウリョウチ ノ リョウ,ミササギ', + '陷': 'オチイル,カンラクノカンノキュウジ', + '陶': 'トウゲイカ ノ トウ', + '陰': 'インキナ ノ イン,カゲ', + '陳': 'チンレツスル ノ チン', + '陲': 'スイ、コザトヘンニスイチョクノスイ', + '陽': 'タイヨウケイ ノ ヨウ', + '陸': 'リクジョウ ノ リク', + '険': 'ボウケン ノ ケン,ケワシイ', + '附': 'コザトヘンノ ツイタ フゾク ノ フ', + '陀': 'アミダブツ ノ ダ', + '陂': 'ハ,コザトヘンニケガワノカワ', + '降': 'ユキガフル ノ フル,コウ', + '陌': 'ハク,コザトヘンニカンスウジノヒャク', + '陏': 'ダ,コザトヘンニユウメイジンノユウ', + '陋': 'ガンメイコロウノロウ', + '限': 'ゲンカイ ノ ゲン,カギル', + '陝': 'チュウゴクノセンセイショウノセン', + '陜': 'セン,コザトヘンニセマイノキュウジノツクリ', + '陟': 'チョク、コザトヘンニアルクノキュウジ', + '陞': 'ショウ、コザトヘンニイッショウビンノショウノシタニドヨウビノド', + '陛': 'ヘイカ ノ ヘイ', + '轌': 'ソリ、クルマヘンニユキ', + '轍': 'ワダチ', + '轎': 'キョウ、クルマヘンニホドウキョウノキョウノツクリ', + '轉': 'ウンテンスルノテンノキュウジ', + '轄': 'カンカツスル ノ カツ', + '轅': 'エン、ナガエ、クルマヘンニルイジンエンノエンノツクリ', + '轆': 'ロクロノロク', + '轂': 'コシキ、コクモツノコクノノギノカワリニクルマ', + '轜': 'ジ、クルマヘンニヒツジュヒンノジュ', + '轟': 'ゴウオン ノ ゴウ,トドロク', + '轗': 'カン、クルマヘンニカンソウブンノカン', + ']': 'トジカクカッコ', + '轤': 'ロクロノロ', + '轡': 'クツワ', + '轢': 'アツレキノレキ', + '轣': 'レキ、クルマヘンニレキシカノレキ', + '鼻': 'ハナカゼ ノ ハナ', + '溘': 'コウ,サンズイニキョネンノキョニサラ', + '溟': 'メイ,サンズイニメイフクヲイノルノメイ', + '溝': 'ミゾ,ハイスイコウ ノ コウ', + '溜': 'リュウインガサガル ノ リュウ,タマリ', + '源': 'スイゲン ノ ゲン,ミナモト', + '鄲': 'カンタンノユメノタン', + '準': 'ジュンビスル ノ ジュン', + '鄰': 'トナリ,リンジンノリンノタイジ', + '鄭': 'ジンメイ ノ テイセイコウ ノ テイ', + '溏': 'トウ,サンズイニケントウシノトウ', + '溌': 'ゲンキハツラツ ノ ハツ', + '溂': 'ハツラツノラツ,サンズイニシゲキスルノシ', + '満': 'マンゾク ノ マン', + '溺': 'デキアイスル ノ デキ,オボレル', + '溽': 'ジョク,サンズイニブジョクノジョク', + '鄙': 'ヘンピナノヒ,ヒナ', + '溲': 'ソウ,サンズイニサンバソウノソウ', + '溷': 'コン,サンズイニクニガマエノナカニブタノツクリ', + '溶': 'ヨウエキ ノ ヨウ,トケル', + '溪': 'ケイリュウヅリノケイノキュウジ', + '溯': 'ソジョウスルノソ,サンズイニハッサクノサク', + '溢': 'アフレル,ノウイッケツ ノ イツ', + '鄂': 'ガク,ワニノツクリノミギニオオザト', + '溥': 'シンコクコウテイノフギノフ', + '蚤': 'ムシ ノ ノミ', + '蚣': 'コウ,ムシヘンニオオヤケ', + '蚯': 'キュウ,ムシヘンニサキュウノキュウ', + '蚩': 'オロカヲイミスルシ', + '蚫': 'アワビ,ムシヘンニツツム', + '蚪': 'トウ,ムシヘンニホクトシチセイノト', + '蚶': 'カン,ムシヘンニアマイ', + '蚰': 'ユウ,ムシヘンニリユウノユウ', + '蚌': 'イツボウノアラソイノボウ', + '蚋': 'ゼイ,ムシヘンニコクナイノナイ', + '蚊': 'カトリセンコウ ノ カ', + '蚕': 'ヨウサン ノ サン,カイコ', + '蚓': 'イン,ミミズ,ムシヘンニインリョクノイン', + '兼': 'カネル,ケンギョウ ノ ケン', + '典': 'コクゴジテン ノ テン', + '兵': 'ヘイタイ ノ ヘイ', + '具': 'ドウグ ノ グ', + '其': 'ソノタ ノ ソ', + '共': 'キョウツウ ノ キョウ,トモ', + '六': 'カンスウジ ノ ロク', + '公': 'シュジンコウ ノ コウ,オオヤケ', + '兮': 'ケイ,カンスウジノハチノシタニゴウキュウスルノゴウノシタガワ', + '兩': 'リョウテノリョウノキュウジ', + '全': 'ゼンコク ノ ゼン,マッタク', + '八': 'カンスウジ ノ ハチ', + '兪': 'ユ,ニレノキノニレノツクリ', + '入': 'ハイル,ニュウガク ノ ニュウ', + '兢': 'センセンキョウキョウノキョウ,コクフクスルノコクフタツ', + '兜': 'テツカブト ノ カブト', + '党': 'ヨトウヤトウ ノ トウ', + '兔': 'ドウブツノウサギノイタイジ', + '児': 'ジドウセイト ノ ジ', + '兒': 'ジドウセイトノジノキュウジ', + '免': 'メンキョ ノ メン', + '兌': 'ダカンシヘイノダ', + '3': 'サン', + '兎': 'ウサギ', + '光': 'ヒカリ,ニッコウ ノ コウ', + '先': 'センセイ ノ セン,サキ', + '克': 'コクフクスル ノ コク,カツ', + '充': 'ジュウジツ ノ ジュウ', + '兄': 'アニ オトウト ノ アニ', + '兇': 'キョウダンニタオレル ノ キョウ,ヒトアシ ノ キョウ', + '兆': 'イッチョウエン ノ チョウ', + '允': 'インカ ノ イン,ユルス', + '兀': 'ゴツ,カンスウジノイチノシタニヒトアシ', + '元': 'ゲンキ ノ ゲン,モト', + '顱': 'ロ,ハゼノキノハゼノツクリノミギニページ', + '匸': 'ケイ,ブシュノカクシガマエ', + '顰': 'ヒンシュクヲカウノヒン', + '繧': 'ウン,イトヘンニクモユキノクモ', + '繦': 'スキ,キョウ,イトヘンニユミニイエドモノヒダリガワ', + '繭': 'マユ,カイコ ノ マユ', + '繪': 'カイガノカイ,エホンノエノキュウジ', + '繩': 'ジョウモンドキノジョウノキュウジ', + '繰': 'クル,クリカエシ ノ クリ', + '繿': 'ラン,イトヘンニエイガカントクノカン', + '繽': 'ヒン,イトヘンニライヒンノヒン', + '繼': 'ナマチュウケイノケイノキュウジ', + '繻': 'オリモノノシュスノシュ', + '繹': 'エンエキホウノエキ', + '繆': 'ビュウ,イトヘンニニカワノツクリ', + '繃': 'ホウタイヲマクノホウ,イトヘンニクズレル', + '繁': 'ハンエイスル ノ ハン,シゲル', + '繍': 'シシュウスル ノ シュウ', + '繋': 'ケイリュウスル ノ ケイ,ツナグ', + '繊': 'カガクセンイ ノ セン', + '繖': 'サン,イトヘンニサンポミチノサン', + '繕': 'シュウゼンスル ノ ゼン,ツクロウ', + '織': 'ソシキ ノ シキ', + '繞': 'カンジブシュノニョウ,イトヘンニギョウシュンノギョウノキュウジ', + '繝': 'ゲン,イトヘンニアイダノキュウジ', + '繚': 'リョウランノリョウ,イトヘンニドウリョウノリョウノツクリ', + '繙': 'ハン,ヒモトク', + '駕': 'ガ,リョウガスル ノ ガ', + '駐': 'チュウシャジョウ ノ チュウ', + '駛': 'シ,ハセル,ウマヘンニレキシノシ', + '駅': 'エキビル ノ エキ', + 't': 'ティー タイム', + '旬': 'ゲジュン ノ ジュン', + '旭': 'キョクジツ ノ キョク,アサヒ', + '鼕': 'トウ,ツヅミノシタニフユ', + '旨': 'ロンシヲ ノベル ノ シ,ムネ', + '早': 'ソウチョウ ノ ソウ,ハヤイ', + '日': 'ニチヨウビ ノ ニチ,ヒ', + '旦': 'ガンタン ノ タン', + '旧': 'キュウレキ ノ キュウ', + '无': 'ム,ナイ,テンキヨホウノテンノヨンカクメヲオツニスル', + '旡': 'キ,ツマル,キトクケンノキ,スデニノツクリ', + '既': 'キトクケン ノ キ,スデニ', + '鼇': 'オオガメヲイミスルゴウ', + '旺': 'ショクヨクオウセイナ ノ オウ', + '旻': 'ビン,アキゾラ,ニチヨウビノニチノシタニサクブンノブン', + '鼎': 'テイダン ノ テイ,カナエ', + '旱': 'カンバツノカン,ヒデリ', + '鼈': 'ベッコウアメノベツ', + '旌': 'ハタジルシヲイミスルセイ', + '族': 'スイゾクカン ノ ゾク', + '旋': 'センカイスル ノ セン', + '旄': 'ケデツクッタハタカザリノボウ', + '旅': 'リョコウ ノ リョ,タビ', + '旆': 'オオキナハタヲイミスルタイハイノハイ', + '旁': 'ホウ,カンジノブシュノツクリ', + '旃': 'セン,ホウヘンニセンダンノキノセンノツクリ', + '旙': 'ハタガヒルガエルサマノハンノイタイジ', + '鼠': 'ネズミ', + '旛': 'ハタガヒルガエルサマノハン', + '鼬': 'ドウブツノイタチ', + '旗': 'コッキ ノ キ,ハタ', + '旒': 'ハタヲカゾエルタンイノリュウ', + '臾': 'シュユノマノユ', + '臼': 'ダッキュウスル ノ キュウ,ウス', + '臺': 'ダイドコロノダイノキュウジ', + '臻': 'シン,ブシュノイタルニシンノシコウテイノシン', + '致': 'イッチスル ノ チ,イタス', + '至': 'シキュウ ノ シ,イタル', + '臭': 'クサイ,アクシュウ', + '自': 'ジテンシャ ノ ジ,ミズカラ', + '臨': 'リンジ ノ リン', + '臧': 'ゾウ,レイゾウコノゾウノイタイジカラクサカンムリヲトッタカタチ', + '臥': 'フス,ガシンショウタン ノ ガ', + '臣': 'ソウリダイジン ノ ジン', + '臠': 'レン,コイビトノコイノキュウジノココロノカワリニニク', + '駲': 'ウマヘンニキュウシュウチホウノシュウ', + '臟': 'ゴゾウロップノゾウノイタイジ', + '臚': 'ロ,ニクヅキニハゼノキノハゼノツクリ', + '臘': 'ロウ,ニクヅキニリョウジュウノリョウノキュウジノツクリ', + '臙': 'エン,ニクヅキニツバメ', + '臓': 'シンゾウカンゾウ ノ ゾウ', + '臑': 'ジュ,ニクヅキニジュヨウトキョウキュウノジュ', + '臍': 'セイカタンデンノセイ,ヘソ', + '臈': 'ロウ,ニクヅキニクズモチノクズ', + '臉': 'セン,ニクヅキニマブタノツクリ', + '臆': 'オクビョウナ ノ オク', + '臂': 'ハチメンロッピノヒ,ヒジ', + '臀': 'シリヲイミスルデンブノデン', + '韮': 'ショクブツ ノ ニラ', + '韭': 'ショクブツノニラノセイジ', + '響': 'オンキョウ ノ キョウ,ヒビク', + '韻': 'ヨインガノコル ノ イン', + '韶': 'ショウ、オンガクノオンニマネクノツクリ', + '韵': 'ヨインガノコルノインノイタイジ', + '音': 'オト,オンガク ノ オン', + '韲': 'ナマスヲイミスルセイノイタイジ', + '韋': 'イダテンノイ', + '韈': 'ベツ,カワヘンニケイベツスルノベツ', + '韆': 'セン,カワヘンニサセンスルノセン', + '韃': 'ダッタンジンノタツ', + '韜': 'リクトウサンリャクノトウ', + '韓': 'カンコクジン ノ カン', + '返': 'ヘンジ ノ ヘン,カエス', + '近': 'キンジョ ノ キン,チカイ', + 'J': 'ジェイ ジャパン', + '迚': 'トテモ、シンニョウニチュウガクノチュウ', + '迄': 'コレマデ ノ マデ', + '迅': 'ジンソクナ ノ ジン', + '迂': 'ウカイスル ノ ウ', + '駮': 'ハク,ウマヘンニマジワル', + '迎': 'カンゲイスル ノ ゲイ,ムカエル', + '迷': 'メイワク ノ メイ,マヨウ', + '迴': 'カイ、シンニョウニカイスウケンノカイ', + '述': 'ジュツゴ ノ ジュツ,ノベル', + '追': 'ツイセキスル ノ ツイ,オウ', + '迺': 'ナイ,シンニョウニニシヒガシノニシ', + '迸': 'ホトバシル,ホウ', + '迹': 'セキ,シンニョウニソクセキヲノコスノセキノツクリ', + '迦': 'オシャカサマ ノ カ', + '迥': 'ケイ,シンニョウニケイガンノシノケイノツクリ', + '迢': 'チョウ、シンニョウニチョウノウリョクノチョウノツクリ', + '迯': 'ニゲル,トウボウスルノトウノイタイジ', + '>': 'ダイナリ', + '迪': 'テキ,シンニョウニリユウノユウ', + '迫': 'ハクリョク ノ ハク,セマル', + '迩': 'シンニョウ ニ ナンジ ノ イタイジ ノ ニ', + '堯': 'ギョウシュンノギョウノキュウジ', + '堪': 'カンニンブクロ ノ カン,タエル', + '堤': 'テイボウ ノ テイ,ツツミ', + '堡': 'キョウトウホのホ,ホケンシツノホノシタニツチ', + '堽': 'コウ,ツチヘンニアミガシラニタダシイ', + '堺': 'オオサカフサカイシ ノ サカイ', + '場': 'バショ ノ バ,ジョウ', + '堵': 'アンドスル ノ ト', + '堰': 'エンテイ ノ エン,セキ', + '報': 'ホウドウ ノ ホウ', + '堊': 'アク,アネッタイノアノキュウジタイノシタニツチ', + '堋': 'ホウ,ツチヘンニホウユウノホウ', + '堆': 'タイセキブツ ノ タイ', + '堅': 'ケンジツナ ノ ケン,カタイ', + '堂': 'コッカイギジドウ ノ ドウ', + '堀': 'ホリバタ ノ ホリ', + '堝': 'カ,ツチヘンニナベノツクリ', + '堙': 'イン,ツチヘンニエントツノエンノツクリ', + '堕': 'ダラクスル ノ ダ', + '眸': 'メイボウコウシノボウ', + '眺': 'ナガメル,チョウボウ ノ チョウ', + '眼': 'ソウガンキョウ ノ ガン', + '眷': 'サイシケンゾクノケン', + '眩': 'ゲンワクスルノゲン,マブシイ', + '眠': 'ネムル,スイミン ノ ミン', + '眤': 'ジツ,メヘンニアマデラノアマ', + '眥': 'シ,ヒガンシガンノシノシタニモクテキノモク', + '眦': 'シ,メヘンニヒガンシガンノシ', + '眛': 'マイ,メヘンニミライノミ', + '眞': 'マゴコロノマノキュウジ', + '真': 'マゴコロ ノ マ,シン', + '眈': 'コシタンタンノタン', + '眉': 'マユ,ハクビ ノ ビ', + '看': 'カンビョウ ノ カン', + '県': 'トドウフケン ノ ケン', + '省': 'ショウリャクスル ノ ショウ,ハブク', + '眄': 'ウコサベンノベン', + '眇': 'タメツスガメツノスガメ', + '僅': 'ワズカ,キンサ ノ キン', + '僂': 'ロウ,ニンベンニロウカクノロウノキュウジノツクリ', + '像': 'ブツゾウ ノ ゾウ', + '働': 'ロウドウ ノ ドウ,ハタラク', + '僊': 'セン,ニンベンニサセンスルノセンノツクリ', + '僉': 'シケンヲウケルノケンノキュウジノツクリ', + '僖': 'キ,ニンベンニキゲキノキ,ヨロコブ', + '僕': 'シモベ,コウボク ノ ボク', + '僑': 'チュウゴク ノ カキョウ ノ キョウ', + '僞': 'ギゾウノギ,ニセノキュウジ', + '僚': 'カイシャ ノ ドウリョウ ノ リョウ', + '僧': 'ソウリョ ノ ソウ', + '僥': 'ギョウコウノギョウ,ニンベンニギョウシュンギョウノキュウジ', + '僣': 'センエツナガラノセンノイタイジ', + '僮': 'ドウ,ニンベンニワラベ', + '僭': 'センエツナガラノセン', + '僵': 'キョウ,ニンベンニカシハラジングウノカシノツクリ', + '僻': 'ヘキチ ノ ヘキ', + '價': 'カチノカ,アタイノキュウジ', + '魏': 'ギシワジンデンノギ', + '渝': 'ユ,サンズイニニレノキノニレノツクリ', + '渟': 'テイ,サンズイニテイシュカンパクノテイ', + '渙': 'タイショウカンパツノカン,サンズイニカンキセンノカンノツクリ', + '減': 'ゲンショウスル ノ ゲン,ヘル', + '渚': 'ナギサ,ショ', + '渕': 'フチノイタイジ,サンズイニハナガサクノサクノツクリニリットウ', + '渓': 'ケイリュウヅリ ノ ケイ', + '渉': 'ダンタイコウショウ ノ ショウ', + '済': 'キュウサイスル ノ サイ,スマス', + '渋': 'ジュウタイスル ノ ジュウ,シブイ', + '渊': 'フチノイタイジ,タテボウニホンノナカニコメ', + '清': 'セイケツ ノ セイ,キヨイ', + '渇': 'カツボウスル ノ カツ,カワク', + '渾': 'コンシンノチカラノコン,サンズイニグンタイノグン', + '游': 'ユウ,アソブノシンニョウノカワリニサンズイ', + '渺': 'ビョウ,サンズイニモクテキノモクニスクナイ', + '渭': 'イスイノイ,サンズイニイブクロノイ', + '測': 'ソクテイ ノ ソク,ハカル', + '港': 'クウコウ ノ コウ,ミナト', + '渮': 'カ,サンズイニイラツク', + '温': 'オンセン ノ オン,アタタマル', + '渫': 'シュンセツスルノセツ', + '渥': 'アツミハントウ ノ アツ', + '渤': 'ボッカイワンノボツ', + '渦': 'ウズマキ ノ ウズ,カ', + '渡': 'ハシヲワタル ノ ワタル', + '渠': 'アンキョ ノ キョ,ミゾ', + '渣': 'サ,サンズイニケンサノサ', + '蜩': 'ヒグラシ、ムシヘンニシュウヘンノシュウ', + '蜥': 'セキ,ムシヘンニブンセキスルノセキ', + '蜿': 'エン、ムシヘンニアテナノアテ', + '蜻': 'トンボノイチモジメ,セイ、ムシヘンニアオノキュウジ', + '蜷': 'ニナ,ムシヘンニノリマキノマキノキュウジ', + '蜴': 'エキ、ムシヘンニボウエキフウノエキ', + 'a': 'エイ アニマル', + '蜍': 'ジョ、ムシヘンニアマリ', + '蜊': 'カイノアサリ、ムシヘンニケンリノリ', + '蜉': 'フ,ムシヘンニツメノシタニコドモノコ', + '蜈': 'ゴ,ムシヘンニゴフクヤノゴノキュウジケイ', + '蜆': 'シジミ,ケン', + '蜃': 'シンキロウノシン', + '蜂': 'ハチミツ ノ ハチ,ホウ', + '蜀': 'サンゴクシノショク', + '蜜': 'ハチミツ ノ ミツ', + '蜚': 'ゴキブリノイチモジメ,ヒジョウグチノヒノシタニムシ', + '蜘': 'クモ,ムシヘン ニ チシキ ノ チ', + '蜒': 'エン,ムシヘンニエンチョウスルノエン', + '蜑': 'タン,エンチョウスルノエンノシタニムシ', + '魔': 'マホウ ノ マ', + '敷': 'シク,ザシキ ノ シキ', + '整': 'セイリスル ノ セイ,トトノエル', + '敵': 'テキミカタ ノ テキ', + '敲': 'スイコウヲカサネルノコウ,タタク', + '数': 'サンスウ ノ スウ,カズ', + '數': 'サンスウノスウノキュウジ', + '敦': 'チュウゴク ノ トンコウ ノ トン', + '敢': 'ユウカンナ ノ カン,アエテ', + '散': 'サンポ ノ サン,チル', + '敬': 'ソンケイ ノ ケイ,ウヤマウ', + '敖': 'ゴウ,ゴウマンナノゴウノツクリ', + '敗': 'ハイボク ノ ハイ,ヤブレル', + '敕': 'チョクメイノチョクノキュウジ', + '救': 'キュウジョ ノ キュウ,スクウ', + '敞': 'カイグンコウショウノショウタレナシ', + '敝': 'ヘイイハボウノヘイ,ニジュウアシナシ', + '敘': 'ジジョデンノジョノイタイジ', + '教': 'キョウカショ ノ キョウ,オシエル', + '故': 'コキョウ ノ コ,ユエ', + '敏': 'ビンカンナ ノ ビン', + '敍': 'ジジョデンノジョノキュウジ', + '效': 'コウカテキナノコウノキュウジ', + '7': 'ナナ', + '徳': 'ドウトク ノ トク', + '徴': 'トクチョウテキナ ノ チョウ', + '徹': 'テツヤスル ノ テツ', + '徼': 'キョウ,ギョウニンベンニゲキレイスルノゲキノツクリ', + '徽': 'キショウヲツケル ノ キ,シルシ', + '徠': 'ジュガクシャノオギュウソライノライ', + '御': 'オンチュウ ノ オン,ゴハン ノ ゴ', + '徨': 'ホウコウスルノコウ,サマヨウ', + '復': 'オウフク ノ フク', + '循': 'アクジュンカン ノ ジュン', + '徭': 'ヨウ,ギョウニンベンニユレルノキュウジノツクリ', + '微': 'ビセイブツ ノ ビ', + '徐': 'ジョコウスル ノ ジョ', + '徑': 'エンノハンケイノケイノキュウジ', + '徒': 'トホ ノ ト', + '従': 'ジュウジスル ノ ジュウ,シタガウ', + '得': 'トクイ ノ トク,エル', + '徘': 'ハイカイスルノハイ,サマヨウ', + '徙': 'シ,ギョウニンベンニトメルニハシルノシタガワ', + '從': 'ジュウジスルノジュウ,シタガウノキュウジ', + '往': 'オウフク ノ オウ', + '征': 'エンセイグン ノ セイ', + '徂': 'ジュガクシャノオギュウソライノソ', + '徃': 'オウフクスルノオウノイタイジ', + '径': 'エン ノ ハンケイ ノ ケイ', + '待': 'キタイスル ノ タイ,マツ', + '徇': 'ジュン,ギョウニンベンニゲジュンノジュン', + '很': 'コン,ギョウニンベンニダイコンノコンノツクリ', + '徊': 'ハイカイスルノカイ,ギョウニンベンニマワル', + '律': 'ホウリツ ノ リツ', + '後': 'ウシロ,ゼンゴ ノ ゴ', + 'ォ': 'チイサイ オオサカ ノ オ', + '≒': '二アリーイコール', + '≪': 'ヒジョウニチイサイ', + '≫': 'ヒジョウニオオキイ', + '≦': 'ショウナリイコール', + '≧': 'ダイナリイコール', + '≠': 'ノットイコール', + '≡': 'ゴウドウ', + 'ω': 'ギリシャ オメガ', + 'ψ': 'ギリシャ プサイ', + 'χ': 'ギリシャ カイ', + 'φ': 'ギリシャ ファイ', + 'υ': 'ギリシャ ウプシロン', + 'τ': 'ギリシャ タウ', + 'σ': 'ギリシャ シグマ', + 'ρ': 'ギリシャ ロー', + 'π': 'ギリシャ パイ', + 'x': 'エックス エックスセン', + '靱': 'キョウジンナノジンノイタイジ', + '靴': 'クツシタ ノ クツ,カ', + '靹': 'ドウ,カワヘンニコクナイノナイ', + '瞋': 'シン,メヘンニマゴコロノマノキュウジ', + '靺': 'マツ,カワヘンニネンマツノマツ', + '瞎': 'カツ,メヘンニサイガイノガイノキュウジタイ', + '靼': 'ダッタンジンノタン', + '靡': 'フウビスルノビ,ナビク', + '靠': 'コウ,ツゲルノシタニヒジョウグチノヒ', + '瞑': 'メイモクスルノメイ', + '靤': 'ホウ,ジメンノメンノミギニツツム', + '靦': 'テン、ジメンノメンノミギニケンブツスルノケン', + '革': 'カクメイ ノ カク', + '靨': 'エクボ、エンセイカンノエンノシタニジメンノメン', + '靫': 'ウツボカズラノウツボ', + '瞞': 'ギマンニミチタノマン', + '瞠': 'ドウ,メヘンニドウモクスルノドウ', + '青': 'アオイ,セイシュン ノ セイ', + '瞥': 'イチベツスル ノ ベツ', + '静': 'レイセイ ノ セイ,シズカ', + '靜': 'レイセイノセイ、シズカノキュウジ', + '瞬': 'シュンカン ノ シュン,マタタク', + '瞭': 'メイリョウナ ノ リョウ', + '瞳': 'ヒトミ,ドウコウ ノ ドウ', + '瞰': 'チョウカンズノカン,ミオロス', + '靂': 'セイテンノヘキレキノレキ', + '瞶': 'キ,メヘンニキチョウヒンノキ', + '靄': 'アサモヤノモヤ', + '靆': 'タイ、クモノミギニタイホジョウノタイ', + '靉': 'アイ、クモノミギニアイスルノアイ', + '瞻': 'セン,メヘンニタンニンノタンノキュウジノツクリ', + '瞹': 'アイ,メヘンニアイスルノアイ', + '瞿': 'キョウクスルノクノツクリ,メガフタツノシタニフルトリ', + '瞼': 'マブタ,ガンケンノケン', + '瞽': 'コ,ツヅミノシタニモクテキノモク', + '豚': 'ブタ,トンジル ノ トン', + '豐': 'ユタカナノキュウジ', + '豕': 'シ,ブシュノイノコ', + '豈': 'アニハカランヤノアニ', + '豊': 'ホウサク ノ ホウ,ユタカ', + '豌': 'エンドウマメノエン', + '豎': 'ジュ、ケンジツナノケンノツチノカワリニマメ', + '豁': 'カツゼントサトルノカツ', + '豆': 'トウフ ノ トウ,マメ', + '豸': 'チ,ブシュノムジナ', + '豹': 'ドウブツ ノ ヒョウ', + '豺': 'サイロウノムレノサイ、ヤマイヌ', + '豼': 'ヒ,ムジナヘンニヒカクスルノヒ', + '豪': 'ゴウカイナ ノ ゴウ', + '豫': 'ヨテイノヨノキュウジ', + '豬': 'チョ、イノコノミギニカガクシャノシャノキュウジタイ', + '象': 'インショウテキ ノ ショウ,ゾウ', + '豢': 'コブシノテノカワリニイノコ', + '澤': 'コウタクノタク,サワノキュウジ', + '澣': 'カン,サンズイニシンカンセンノカン', + '澡': 'ソウ,サンズイニソウジュウスルノソウノツクリ', + '澪': 'ミオツクシノミオ,レイ', + '澳': 'オウ,サンズイニオクバノオクノキュウジ', + '澱': 'チンデンスル ノ デン,ヨドム', + '澹': 'アンタンタルクモユキノタン', + '澆': 'ギョウ,サンズイニギョウシュンノギョウノキュウジ', + '澄': 'ミズガスム ノ スム', + '澂': 'ミズガスムノスムノイタイジ', + '澁': 'ジュウタイスルノジュウ,シブイノキュウジ', + '澀': 'ジュウタイスルノジュウ,シブイノノキュウジノイタイジ', + '澎': 'ホウ,サンズイニツヅミノヒダリガワニサンヅクリ', + '澗': 'カン,サンズイ ニ アイダ', + '澑': 'リュウインガサガルノリュウ,タマリノイタイジ', + '伺': 'シンタイウカガイ ノ ウカガイ', + '螳': 'カマキリヲイミスルトウロウノトウ,ムシヘンニコウカイドウノドウ', + '螻': 'ロウ,ムシノケラノイチモジメ', + '螺': 'ラセン ノ ラ', + '螽': 'シュウ,キセツノフユノシタニムシフタツ', + 'N': 'エヌ ノベンバー', + '螢': 'ホタル,ケイコウトウノケイノキュウジ', + '螫': 'セキ,オンシャヲウアタエルノシャノシタニムシ', + '螯': 'ゴウ,ゴウマンナノゴウノツクリノシタニムシ', + '螟': 'メイ,ムシヘンニメイフクヲイノルノメイ', + '螂': 'カマキリヲイミスルトウロウノロウ,ムシヘンニモモタロウノロウ', + '融': 'キンユウ ノ ユウ', + '狹': 'キョウ,セマイノキュウジ', + '伯': 'ハクシャク ノ ハク', + '佰': 'ハク,ニンベンニカンスウジノヒャク', + '偈': 'ゲ,ニンベンニカッショクノカツノツクリ', + '佳': 'カサク ノ カ,ニンベン ニ ツチ フタツ ノ カ', + '併': 'ヘイヨウスル ノ ヘイ,アワセル', + '佶': 'キツ,ニンベンニダイキチノキチ', + '偃': 'エン,ニンベンニエンテイノエン,セキノツクリ', + '佻': 'ケイチョウフハクノチョウ', + '佼': 'ニンベン ニ マジワル ノ コウ', + '假': 'カメンノカ,カリノキュウジ', + '使': 'シヨウスル ノ シ,ツカウ', + '做': 'サ,ニンベンニコキョウノコ', + '停': 'テイシャ ノ テイ', + '佩': 'ハイヨウスルノハイ,オビル', + '偕': 'カイ,トモニ,ニンベンニミナサマノミナ', + '佯': 'ヨウ,ニンベンニドウブツノヒツジ', + '佐': 'ホサスル ノ サ', + '佑': 'テンユウ ノ ユウ,ニンベン ニ ミギ', + '体': 'カラダ,タイイク ノ タイ', + '何': 'ナニモノ ノ ナニ', + '佗': 'タ,ワビ,ニンベンニウカンムリニカタカナノヒ', + '余': 'ヨユウ ノ ヨ,アマル', + '佚': 'アンイツノイツ,ニンベンニウシナウ', + '佛': 'ブツゾウノブツノキュウジ', + '健': 'ケンコウ ノ ケン,スコヤカ', + '佝': 'ク,ニンベンニハイクノク', + '佞': 'カンネイノネイ', + '偸': 'トウ,ニンベンニユカイナノユノツクリ', + '佃': 'ツクダニ ノ ツクダ', + '偽': 'ギゾウ ノ ギ,ニセ', + '但': 'タダシガキ ノ タダシ', + '佇': 'チョリツスルノチョ,タタズム', + '偲': 'コジンヲ シノブ ノ シノブ', + '偵': 'テイサツスル ノ テイ', + '位': 'タンイ ノ イ', + '低': 'ヒクイ,テイ', + '住': 'ジュウショ ノ ジュウ,スム', + '$': 'ドル', + '祷': 'モクトウスル ノ トウ,イノル', + '祺': 'キ,シメスヘンニソレ', + '祿': 'ゲンロクブンカノロクノキュウジ', + '祢': 'ネ,シメスヘン ニ ナンジ ノ イタイジ', + '祠': 'シ,ホコラ,シメスヘンニシカイシャノシ', + '祥': 'フショウジ ノ ショウ', + '票': 'トウヒョウスル ノ ヒョウ', + '傾': 'カタムク,ケイコウ ノ ケイ', + '祭': 'サイジツ ノ サイ,マツリ', + '祓': 'ハライキヨメルノハライ,フツ', + '祐': 'テンユウ ノ ユウ,シメスヘン ニ ミギ', + '祗': 'シ,シメスヘンニヒクイノツクリ', + '祖': 'ソセン ノ ソ', + '祕': 'ヒミツノヒノキュウジ', + '祚': 'クライヲウケツグセンソノソ', + '祟': 'タタル,スイ', + '神': 'カミサマ ノ カミ,シン', + '祝': 'シュクジツ ノ シュク,イワウ', + '祁': 'シメスヘン ニ オオザト ノ キ', + '祀': 'サイシノシ,マツル', + '祇': 'ギオンマツリ ノ ギ', + '祉': 'シャカイフクシ ノ シ', + '祈': 'イノル,キガンスル ノ キ', + '齡': 'ネンレイノレイノキュウジ', + '齢': 'ネンレイ ノ レイ', + '書': 'キョウカショ ノ ショ,カク', + '曹': 'ソウトウシュウ ノ ソウ', + '鰡': 'ウオヘンニリュウガクノリュウ,ボラ', + '曼': 'マンダラノマン', + '曽': 'キソジ ノ ソ', + '曾': 'キソジ ノ ソ ノ キュウジ', + '替': 'フリカエコウザ ノ カエル', + '曰': 'イワクツキノイワク', + '曲': 'キョクセン ノ キョク,マガル', + '曳': 'エイコウスル ノ エイ,ヒク', + '更': 'ヘンコウ ノ コウ,サラニ', + '曵': 'フネヲエイコウスルノエイノイタイジ', + '曷': 'カツ、カッショクノカツノツクリ', + '鰲': 'ゴウ,ゴウマンノゴウノツクリノシタニサカナ', + '曩': 'ノウ,ヨウビノニチノシタニユズルノキュウジノツクリ', + '鰰': 'サカナノハタハタ,ウオヘンニカミサマノカミ', + '曠': 'コウヤノコウ,ニチヘンニヒロイノキュウジ', + '鰻': 'ウナギ', + '鰹': 'カツオ,ウオヘン ニ カタイ', + '鰾': 'ウキブクロ,ウオヘンニトウヒョウスルノヒョウ', + '曦': 'ギ,ウツクシイタイヨウヲイミスルニチヘンノギ', + '曙': 'アケボノ,ショ', + '曚': 'ボウ,ニチヘンニケイモウスルノモウ', + '曜': 'ニチヨウビ ノ ヨウ', + '曝': 'サラス,ニチヘン ニ ボウリョク ノ ボウ', + '鰄': 'イ,ウオヘンニイゲンガアルノイ', + '鰊': 'サカナノニシン,レン', + '鰈': 'サカナノカレイ', + '鰉': 'コウ,ウオヘンニコウタイシノコウ', + '銃': 'ケンジュウウ ノ ジュウ', + '曖': 'アイマイナノアイ', + '鰍': 'カジカ,ウオヘン ニ アキ', + '鰒': 'フグ,ウオヘンニハラノツクリ', + '曉': 'アカツキノキュウジ', + '鰐': 'ドウブツ ノ ワニ', + '鰔': 'カン,ウオヘンニハリキュウノハリノツクリ', + '鰕': 'ウオヘンノエビ,カ', + '曁': 'キ,キトクケンノキノシタニガンタンノタン', + '曄': 'ヨウ,ニチヘンニチュウカナベノカ', + '曇': 'クモリ,ドンテン ノ ドン', + '0': 'ゼロ', + '1': 'イチ', + '2': 'ニ', + '3': 'サン', + '4': 'ヨン', + '5': 'ゴ', + '6': 'ロク', + '7': 'ナナ', + '8': 'ハチ', + '9': 'キュウ', + ':': 'コロン', + ';': 'セミコロン', + '<': 'ショウナリ', + '=': 'イコール', + '>': 'ダイナリ', + '?': 'クエスチョン', + '!': 'カンタンフ', + '#': 'シャープ', + '$': 'ドル', + '%': 'パーセント', + '&': 'アンド', + '(': 'カッコ', + ')': 'トジカッコ', + '*': 'アスタリスク', + '+': 'プラス', + ',': 'コンマ', + '-': 'マイナス', + '.': 'ピリオド', + '/': 'スラッシュ', + 'P': 'ピー パパ', + 'Q': 'キュー クエスチョン', + 'R': 'アール ルーム', + 'S': 'エス スポーツ', + 'e': 'イー エッグ', + 'U': 'ユー ユージュアリー', + 'V': 'ブイ ビデオ', + 'W': 'ダブリュー ウィンドウ', + 'X': 'エックス エックスセン', + 'Y': 'ワイ ヤング', + 'Z': 'ゼット ズー', + '[': 'カクカッコ', + '\': 'バックスラッシュ', + ']': 'トジカクカッコ', + '^': 'ベキジョウ', + '_': 'アンダーライン', + '@': 'アットマーク', + 'A': 'エイ アニマル', + 'B': 'ビー ボーイ', + 'C': 'シー キャット', + 'D': 'ディー デスク', + 'E': 'イー エッグ', + 'F': 'エフ フレンド', + 'G': 'ジー ゴルフ', + 'H': 'エイチ ホテル', + 'I': 'アイ インク', + 'J': 'ジェイ ジャパン', + 'K': 'ケイ キッチン', + 'L': 'エル ラブ', + 'M': 'エム マイク', + 'N': 'エヌ ノベンバー', + 'O': 'オー オープン', + '瘁': 'スイ,ヤマイダレニソツギョウノソツ', + '瘍': 'イカイヨウノヨウ', + '瘉': 'ユ,ヤマイダレニニレノキノツクリ', + '瘋': 'フウテンノフウ,ヤマイダレニカゼ', + '瘟': 'オン,ヤマイダレニオンセンノオンノキュウジノツクリ', + '瘤': 'ドウミャクリュウノリュウ,コブ', + '瘧': 'オコリ,ヤマイダレニギャクタイノギャク', + '瘠': 'セキ,ヤマイダレニセキズイノセキ', + '瘡': 'ミズボウソウノソウ', + '瘢': 'ハンコンノハン,ヤマイダレニイッパンテキノハン', + '瘴': 'ショウ,ヤマイダレニブンショウヲカクノショウ', + '瘰': 'ルイレキノルイ,ヤマイダレニルイセキスルノルイ', + '瘻': 'ジロウノロウ,ヤマイダレニカズノキュウジノヒダリガワ', + '賢': 'ケンジャ ノ ケン,カシコイ', + '賣': 'ショウバイノバイ、ウルノキュウジ', + '賠': 'バイショウキン ノ バイ', + '賦': 'ゲップバライ ノ フ', + '賤': 'ゲセンナノセン,イヤシイ', + '質': 'シツモン ノ シツ', + '賭': 'トバク ノ ト,カケル', + '賺': 'ナダメスカスノスカス', + '賻': 'フ、カイヘンニハクブツカンノハクノツクリ', + '購': 'コウニュウスル ノ コウ', + '槙': 'ショクブツ ノ マキ,キヘン ニ マゴコロ ノ マ', + '賂': 'ワイロ ノ ロ', + '賃': 'チンギン ノ チン', + '賀': 'ネンガジョウ ノ ガ', + '賁': 'ヒ,フンカスルノフンノツクリ', + '資': 'シゲン ノ シ', + '賄': 'ワイロ ノ ワイ,マカナウ', + '賊': 'サンゾク ノ ゾク', + '賈': 'コ、オオイガシラニカイガラノカイ', + '賎': 'イヤシイ,セン', + '賍': 'ゾウブツザイノゾウノタイジ', + '賓': 'ライヒン ノ ヒン', + '賑': 'ニギワウ,インシン ノ シン', + '賚': 'ライ,ライネンノライノキュウジノシタニカイガラノカイ', + '賛': 'サンセイスル ノ サン', + '賞': 'ノーベルショウ ノ ショウ', + '賜': 'オンシ ノ シ,タマワル', + '弸': 'ホウ,ユミヘンニホウユウヲイミスルホウ', + '弾': 'ダンリョク ノ ダン,ハズム', + '弼': 'ホヒツ ノ ヒツ,スケ', + '弱': 'キョウジャク ノ ジャク,ヨワイ', + '強': 'ベンキョウ ノ キョウ,ツヨイ', + '張': 'キンチョウスル ノ チョウ,ハル', + '弩': 'チョウドキュウノド,ヤッコノシタニユミ', + '弯': 'ワンガンノワンノツクリ', + '弭': 'ビ,ユミヘンニミミ', + '弦': 'ゲンガッキ ノ ゲン,ツル', + '弧': 'コヲエガク ノ コ', + '弥': 'アミダブツ ノ ミ', + '弛': 'ユルム,シカンスル ノ シ', + '弘': 'コウボウタイシ ノ コウ,ヒロイ', + '弟': 'アニオトオト ノ オトオト', + '弓': 'ユミヤ ノ ユミ', + '弐': 'ケイヤクショニ ツカウ スウジ ノ ニ', + '弑': 'シギャクスルノシ,コロスノヒダリガワニニュウガクシキノシキ', + '弖': 'テニヲハノテ,ユミノシタニカンスウジノイチ', + '弗': 'フッソ ノ フツ,ドル', + '弔': 'トムラウ,チョウジ ノ チョウ', + '引': 'インヨウスル ノ イン,ヒク', + '弊': 'ヘイガイ ノ ヘイ', + '弋': 'ヨク,ブシュノシキガマエ', + '弉': 'サンゾウホウシゲンジョウノジョウノイタイジ', + '式': 'ニュウガクシキ ノ シキ', + '弌': 'イチ,カンスウジノイチノイタイジ,シキガマエニイチ', + '弍': 'カンスウジノニノイタイジ,シキガマエニニ', + '弃': 'ハイキスルノキ,ステルノイタイジ', + ';': 'セミコロン', + '弁': 'ベントウ ノ ベン', + '弄': 'ホンロウスル ノ ロウ,モテアソブ', + '◆': 'クロヒシガタ', + '◇': 'ヒシガタ', + '○': 'マルジルシ', + '◎': 'ニジュウマル', + '●': 'クロマル', + '黐': 'トリモチノモチ,キビヘンニハナレルノツクリ', + '◯': 'オオキナマル', + '騾': 'ドウブツノラバノラ', + '點': 'テンスウノテンノキュウジ', + '埓': 'ラチガアカナイノラチノイタイジ', + '埒': 'ラチガアカナイノラチ', + '俸': 'ホウキュウ ノ ホウ', + '俾': 'ヘイ,ニンベンニヒクツナノヒ', + '埖': 'ゴミ,ツチヘンニハナビノハナ', + '埔': 'ホ,ツチヘンニシジンノトホノホ', + '俳': 'ハイク ノ ハイ', + '域': 'チイキ ノ イキ', + '埜': 'ヤ,ハヤシ ノ シタニ ツチ', + '埃': 'ホコリマミレノホコリ,ジンアイノアイ', + '埀': 'スイチョクノスイ,タレルノイタイジ', + '修': 'シュウリスル ノ シュウ', + '埆': 'カク,ツチヘンニツノ', + '埋': 'ウメル,マイボツスル ノ マイ', + '俣': 'ミナマタビョウ ノ マタ', + '信': 'シンゴウキ ノ シン', + '城': 'ジョウカマチ ノ ジョウ,シロ', + '俤': 'オモカゲ,ニンベンニオトウト', + '俥': 'クルマ,ニンベンニデンシャノシャ', + '俚': 'リゲンノリ,ニンベンニサトガエリノサト', + '俛': 'ベン,ニンベンニメンキョノメン', + '俘': 'トリコ,フリョノフ', + '執': 'シツジ ノ シツ,トル', + '俟': 'シ,マツ,ニンベンニカタカナノムノシタニユミヤノヤ', + '埴': 'ハニワ ノ ハニ', + '基': 'キホン ノ キ,モトヅク', + '培': 'サイバイスル ノ バイ,ツチカウ', + '俑': 'ヘイバヨウノヨウ', + '俗': 'フウゾク ノ ゾク', + '俔': 'ケン,ニンベンニケンブツスルノケン', + '埼': 'サイタマケン ノ イチモジメ ノ サキ', + '埣': 'サイ,ツチヘンニソツギョウノソツ', + '埠': 'ミナト ノ フトウ ノ フ', + '俎': 'マナイタ,ソジョウノソ', + '係': 'カンケイ ノ ケイ,カカリ', + '促': 'サイソクスル ノ ソク,ウナガス', + '俄': 'ニワカ,ガゼン ノ ガ', + '黨': 'ヨトウヤトウノトウノキュウジ', + '鱚': 'サカナノキス,ウオヘンニヨロコブ', + '黻': 'ヒザカケヲイミスルフツ', + '鱒': 'マス,サカナヘン ニ ソンケイスル ノ ソン', + '黹': 'チ,ブシュノフツ', + '迭': 'コウテツスル ノ テツ', + '黽': 'ビン,ナワノキュウジノツクリ', + '鱈': 'タラ,サカナヘン ニ ユキ', + '銹': 'シュウ、カネヘンニヒイデル', + '騁': 'テイ,ハセル,ウマヘンニショウヘイスルノヘイノツクリ', + '騅': 'スイ,ウマヘンニフルトリ', + '|': 'タテボウ', + '漫': 'マンガ ノ マン', + '漬': 'ツケモノ ノ ツケル', + '漠': 'サハラサバク ノ バク', + '漣': 'レン,サザナミ', + '漢': 'カンジテスト ノ カン', + '漸': 'ゼンゾウスル ノ ゼン,ヨウヤク', + '漿': 'ショウ,ショウグンノショウノキュウジノシタニミズ', + '漾': 'ヨウ,サンズイニカミサマノカミノキュウジノツクリ', + '漱': 'ナツメソウセキノソウ,ススグ', + '漲': 'チョウ,ミナギル', + '漉': 'チャコシ ノ コス', + '漏': 'モラス,ロウデン ノ ロウ', + '漁': 'ギョコウ ノ ギョ', + '漂': 'ヒョウリュウスル ノ ヒョウ,タダヨウ', + '漆': 'ウルシヌリ ノ ウルシ,シツ', + '漑': 'カンガイヨウスイノガイ', + '漓': 'ボッコンリンリノリ,サンズイニリリクノリノヒダリガワ', + '漕': 'コグ,ソウテイ ノ ソウ', + '演': 'エンソウスル ノ エン', + '萸': 'ユ、クサカンムリニシュユノマノユ', + '落': 'ラクセンスル ノ ラク,オチル', + '萼': 'ショクブツノハナノガク', + '萱': 'クサカンムリ ニ センデン ノ セン', + '萵': 'ワ,クサカンムリニナベノツクリ', + '萪': 'カ、クサカンムリニキョウカショノカ', + '萩': 'ショクブツ ノ ハギ', + '萬': 'マンネンヒツノマン、ヨロズノキュウジ', + '萢': 'ヤチ、クサカンムリニアワダテルノアワ', + '萠': 'ホウガノホウ,モエルノイタイジ', + '鱧': 'サカナノハモ,ウオヘンニユタカ', + '萓': 'ギ、クサカンムリニベンギノギ', + '萋': 'セイ、クサカンムリニアイサイカノサイ', + '萎': 'イシュクスル ノ イ,ナエル', + '萍': 'ヘイ,クサカンムリニサンズイニヘイワノヘイ', + '萌': 'ホウガ ノ ホウ,モエル', + '萃': 'スイ、クサカンムリニソツギョウノソツ', + '萇': 'チョウ、クサカンムリニチョウナンノチョウ', + '萄': 'ブドウシュ ノ ドウ', + '鶤': 'コン,グンタイノグンノミギニトリ', + '鶯': 'ウグイス,アタマニカヨウビノカガフタツ', + '鶩': 'ボク,ムジュンノムトノブンノシタニトリ', + '鶫': 'ツグミ,ニシンノツクリノミギニトリ', + '鶴': 'トリ ノ ツル', + '鶲': 'オウ,オキナノミギニトリ', + '鶸': 'ジャク,ヨワイノミギニトリ,ヒワ', + '鶺': 'セキレイノセキ', + '鶻': 'コツ,ホネノミギニトリ', + '鶇': 'ツグミ,ヒガシノミギニトリ', + '鶏': 'ニワトリ,ヨウケイ ノ ケイ', + '鶉': 'トリノウズラ', + '鶚': 'ガク,ワニノツクリノミギニトリ,ミサゴ', + '時': 'ジカン ノ ジ,トキ', + '晃': 'ニチヨウビ ノ ニチ ノ シタニ ヒカリ,アキラ', + 'リ': 'リンゴ ノ リ', + '晁': 'チョウ,ニチヨウビノニチノシタニイッチョウエンノチョウ', + '゙': 'ダクテン', + '゚': 'ハンダクテン', + '晄': 'コウ,ニチヘンニヒカリ', + 'ン': 'オシマイ ノ ン', + 'メ': 'メガネ ノ メ', + '晋': 'チュウゴク ノ コクメイ ノ シン,ススム', + 'ミ': 'ミカン ノ ミ', + '晉': 'チュウゴクノコクメイノシン,ススムノキュウジ', + 'ヨ': 'ヨット ノ ヨ', + '晏': 'アン,ニチヨウビノニチノシタニアンシンノアン', + 'ヤ': 'ヤカン ノ ヤ', + 'ユ': 'ユカタ ノ ユ', + '晒': 'サラシモメン ノ サラシ', + 'ヒ': 'ヒカリ ノ ヒ', + 'ネ': 'ネズミ ノ ネ', + 'R': 'アール ルーム', + 'ホ': 'ホケン ノ ホ', + 'マ': 'マッチ ノ マ', + 'フ': 'フトン ノ フ', + 'ヘ': 'ヘイワ ノ ヘ', + 'ツ': 'ツバメ ノ ツ', + 'テ': 'テガミ ノ テ', + 'タ': 'タバコ ノ タ', + 'チ': 'チキュウ ノ チ', + '晞': 'キ,ニチヘンニキボウノキ', + '晟': 'セイ,ニチヨウビノニチノシタニセイチョウスルノセイ', + 'ト': 'トウキョウ ノ ト', + '晝': 'ヒルヤスミノヒル,チュウノキュウジ', + '晢': 'セツ,コッセツスルノセツノシタニニチヨウビノニチ', + '晦': 'ミソカ,ニチヘン ニ マイ', + '晧': 'コウ,ヒヘンニツゲル', + '晤': 'ゴ,ニチヘンニタゴサクノゴ', + '晨': 'シン,ニチヨウビノニチノシタニジュウニシノタツ', + '晩': 'バンゴハン ノ バン', + '普': 'フキュウスル ノ フ', + '景': 'フウケイ ノ ケイ', + '晰': 'ズノウメイセキノセキ', + '面': 'ジメン ノ メン', + '晶': 'スイショウダマ ノ ショウ', + '晴': 'ハレ,セイテン ノ セイ', + '智': 'チ,シル ノ シタニ ニチヨウビ ノ ニチ', + '馗': 'ショウキサマノキ', + '惠': 'メグム,チエノエノキュウジ', + '靭': 'キョウジンナ ノ ジン', + '称': 'イチニンショウ ノ ショウ', + '馘': 'カクシュスルノカク,クビヘンニアル', + '移': 'イドウ ノ イ,ウツル', + '香': 'コウシンリョウ ノ コウ,カオリ', + '秤': 'テンビン ノ ビン,ハカリ', + '秧': 'オウ,ノギヘンニチュウオウシュウケンノオウ', + '秦': 'シン ノ シコウテイ ノ シン', + '秡': 'ハツ、ノギヘンニハライキヨメルノハライノツクリ', + '秣': 'リョウマツノマツ', + '秬': 'キョ、ノギヘンニキョダイナノキョ', + '秩': 'チツジョ ノ チツ', + '秕': 'シイナ,ノギヘンニヒカクスルノヒ', + '科': 'キョウカショ ノ カ', + '秒': 'ビョウヨミ ノ ビョウ', + '租': 'ソゼイ ノ ソ', + '靖': 'ヤスクニジンジャ ノ ヤス', + '秘': 'ヒミツ ノ ヒ', + '私': 'シテツ ノ シ,ワタシ', + '秀': 'シュウサイ ノ シュウ,ヒイデル', + '秉': 'コクモツノタンイヘイ', + '秋': 'アキマツリ ノ アキ,シュウ', + '庸': 'ボンヨウナ ノ ヨウ', + '庵': 'イオリ,タクアン ノ アン', + '庶': 'ショミン ノ ショ', + '康': 'ケンコウ ノ コウ,イエヤス ノ ヤス', + '庭': 'テイエン ノ テイ,ニワ', + '庫': 'レイゾウコ ノ コ', + '度': 'オンドケイ ノ ド', + '座': 'ザセキ ノ ザ,スワル', + '庠': 'ショウ,マダレニヒツジ', + '府': 'トドウフケン ノ フ', + '庚': 'コウシンヅカ ノ コウ,カノエ', + '底': 'ソコヂカラ ノ ソコ,テイ', + '庖': 'マダレ ノ ホウチョウ ノ ホウ', + '店': 'ミセ,ショウテン ノ テン', + '序': 'ジュンジョ ノ ジョ', + '床': 'トコヤ ノ トコ,ショウ', + '庄': 'ショウヤ ノ ショウ', + '庇': 'ヒゴスル ノ ヒ,ヒサシ', + '庁': 'キショウチョウ ノ チョウ', + '広': 'ヒロバ ノ ヒロ,コウ', + '╋': 'フトクロス', + '靈': 'レイエンノレイ、タマノキュウジ', + '╂': 'フトタテセンクロス', + '馳': 'ゴチソウ ノ チ,ハセル', + '馭': 'ギョシャノギョ,ウマヘンニマタ', + '餮': 'テツ,ムサボル', + '馮': 'ヒョウ,タノム,ニスイニウマ', + '馨': 'ジンメイ ノ カオル,ケイ,カグワシイ', + '皎': 'コウ,シロヘンニマジワル', + '鑼': 'ドラヤキノラ', + '鑿': 'コウグノノミ', + '鑾': 'ラン,コイビトノコイノキュウジノココロノカワリニキンヨウビノキン', + '皋': 'ショクブツノサツキノイタイジ', + '皈': 'キタクスルノキ,カエルノイタイジ', + '皆': 'ミナサマ ノ ミナ,カイ', + '皇': 'コウタイシ ノ コウ', + '的': 'モクテキ ノ テキ', + '皃': 'ビボウヲタモツノボウノイタイジ', + '皀': 'キョウ,ハクチョウノハクノシタニカタカナノヒ', + '皚': 'ガイ,シロヘンニヨロイノツクリ', + '皙': 'セキ,ブンセキスルノセキノシタニハクチョウノハク', + '皖': 'カン,シロヘンニカンリョウスルノカン', + '皓': 'メイボウコウシノコウ,シロヘンニツゲル', + '皐': 'ショクブツ ノ サツキ', + '鑢': 'コウグノヤスリ', + '皮': 'カワヲムク ノ カワ,ヒ', + '鑞': 'ロウヅケザイクノロウ', + '鑛': 'テッコウセキノコウノキュウジ', + '鑚': 'ケンサンヲツムノサンノイタイジ', + '鑑': 'ズカン ノ カン', + '鑓': 'ヤリ,カネヘン ニ ハケンスル ノ ケン', + '鑒': 'ズカンノカンノイタイジ', + '皿': 'サラウドン ノ サラ', + '皺': 'シワヲノバスノシワ', + '皸': 'クン,ショウグンノグンノミギニケガワノカワ', + '皹': 'クン,ショウグンノグンノヒダリニケガワノカワ', + '皷': 'ツヅミノイタイジ,ツクリガケガワノカワ', + '皴': 'シュン,シュンビンサノシュンノツクリニケガワノカワ', + '鑁': 'バンナジノバン', + '皰': 'ニキビ,ホウ,ケガワノカワニツツム', + '赤': 'アカンボウ ノ アカ,セキ', + '赦': 'オンシャ ノ シャ,ユルス', + '赧': 'カオヲアカラメルイミノタンガンノタン', + '邉': 'シュウヘンノヘン,アタリノキュウジノイタイジ', + '赭': 'シャ,アカイロノアカノミギニカガクシャノシャノキュウジタイ', + '赫': 'アカヲ フタツ ナラベタ カク', + '赴': 'フニンスル ノ フ,オモムク', + '起': 'キリツスル ノ キ,オキル', + '走': 'ハシル,キョウソウ ノ ソウ', + '赱': 'ハシル,キョウソウノソウノイタイジ', + '赳': 'キュウ、ソウニョウニサケブノツクリ', + 'i': 'アイ インク', + '釼': 'ケン、カネヘンニヤイバ', + '梳': 'ソ,クシケズル,キヘンニナガレルノツクリ', + '梱': 'コンポウスル ノ コン', + '械': 'キカイテキ ノ カイ', + '梶': 'カジノキ ノ カジ,キヘン ニ オ', + '梵': 'ボンジノボン', + '梺': 'フモト,ハヤシノシタニウエシタノシタ', + '梹': 'ショクブツノビンロウジュノビンノイタイジ,キヘンニヘイタイノヘイ', + '梼': 'トウ,キヘン ニ コトブキ', + '梢': 'マッショウシンケイ ノ ショウ,コズエ', + '梠': 'リョ,キヘンニオフロノロ', + '梧': 'ゴ,キヘン ニ ワレ,アオギリ', + '梦': 'ユメ,ムチュウノムノイタイジ', + '梨': 'クダモノ ノ ナシ', + '梯': 'ハシゴ,キヘン ニ オトウト', + '梭': 'サ,キヘンニシュンビンサノシュンノツクリ', + '梓': 'アズサ,ジョウシスル ノ シ', + '梗': 'ノウコウソク ノ コウ', + '梔': 'ショクブツノクチナシ', + '梛': 'ダ,キヘンニワカダンナノナ', + '鋏': 'ドウグノハサミ', + '梟': 'フクロウ', + '條': 'ジョウケンノジョウノキュウジ', + '梃': 'テコイレノテコ,テイ', + '梁': 'リョウザンパク ノ リョウ,ハリ', + '梅': 'ウメボシ ノ ウメ', + '梏': 'シッコクトナルノコク,テカセ', + '梍': 'ソウ,キヘンニシロクロノシロニカンスウジノナナ', + '蒼': 'ガンメンソウハク ノ ソウ,アオイ', + '蒿': 'コウ,クサカンムリニタカイヒクイノタカイ', + '蒹': 'ケン,クサカンムリニカネル', + '蒸': 'ジョウキ ノ ジョウ,ムス', + '蒻': 'コンニャクノニャク', + '鋲': 'ガビョウ ノ ビョウ', + '蒲': 'カバヤキ ノ カバ', + '蒭': 'スウ,クサカンムリニハンスウスルノスウ', + '蒡': 'キンピラゴボウノボウ', + '蒜': 'ショクブツ ノ ヒル', + '蒟': + 'コンニャクノイチモジメ,クサカンムリニドクリツノリツ,ソノミギニハイクノク', + '蒙': 'ケイモウスル ノ モウ', + '蒔': 'タネヲマク ノ マク', + '蒐': 'クサカンムリ ニ オニ ノ シュウ', + '蒋': 'クサカンムリ ニ ショウグン ノ ショウ', + '蒄': 'カン、クサカンムリニゲッケイカンノカン', + '蒂': 'タイ,クサカンムリニテイオウノテイ', + '‰': 'パーミル', + '″': 'ビョウ', + '褞': 'オン、コロモヘンニオンセンノオンノキュウジノツクリ', + '※': 'コメジルシ', + '?': 'クエスチョン', + '乾': 'カワク,カンソウキ ノ カン', + '坑': 'タンコウ ノ コウ,アナ', + '坐': 'ザセキ ノ ザカラマダレヲトッタザ,スワル', + '鋤': 'ノウグ ノ スキ,カネヘン ニ タスケル', + '乱': 'コンラン ノ ラン,ミダレル', + '乳': 'ギュウニュウ ノ ニュウ,チチ', + '均': 'ヘイキン ノ キン', + '址': 'シ,シロアトヲイミスルジョウシノシ', + '坂': 'サカミチ ノ サカ', + '坏': 'タカツキノツキ', + '坎': 'カン,アナ,ツチヘンニホケツノケツ', + '乢': 'カイ,ヤマヘンニレイギノレイノツクリ', + '坊': 'ボウズ ノ ボウ', + '九': 'カンスウジ ノ キュウ', + '乞': 'コウ,アマゴイスル ノ コウ', + '也': 'クウヤネンブツ ノ ヤ,ナリ', + '乘': 'ジョウシャスルノジョウ,ノルノキュウジ', + '乙': 'コウオツ ノ オツ', + '乕': 'ドウブツノトラノイタイジ', + '坿': 'フ,ツチヘンニフロクノフ', + '乗': 'ジョウシャスル ノ ジョウ,ノル', + '坤': 'ケンコン ノ コン,ツチヘン ニ モウス', + '乎': 'コ,ヨブ ノ ツクリ', + '坦': 'ヘイタンナミチ ノ タン', + '坡': 'ハ,ツチヘンニケガワノカワ', + '鋭': 'エイリナ ノ エイ,スルドイ', + '之': 'コレ,アクタガワリュウノスケ ノ ノ', + '久': 'エイキュウ ノ キュウ,ヒサシイ', + '坩': 'カン,ルツボ,ツチヘンニアマイ', + '乂': 'ガイ,クサカリノカリノヒダリガワ', + '坪': 'タテツボ ノ ツボ', + '褌': 'フンドシ、コロモヘンニグンタイノグン', + '硼': 'ゲンソノホウソノホウ', + '硴': 'カキ,イシヘンニハナビノハナ', + '硲': 'ハザマ,イシヘン ニ タニ', + '硯': 'スズリ', + '硬': 'ヒャクエンコウカ ノ コウ,カタイ', + '硫': 'リュウサン ノ リュウ', + '―': 'バー', + '硝': 'ショウサンエン ノ ショウ', + '硅': 'ゲンソノケイソノケイ,イシヘンニツチフタツ', + '“': 'クォーテーション', + '麁': 'ソ,アライ,カタカナノクノシタニシカ', + '麒': 'キリンジノキ,シカノミギニソノ', + '鴬': 'ウグイス', + '鴪': 'イツ,アナヲホルノアナノミギニトリ', + '鴫': 'シギヤキ ノ シギ', + '鴨': 'トリ ノ カモ', + '鴦': 'エンオウノオウ,オシドリ', + '麗': 'カレイナ ノ レイ,ウルワシイ', + '鴣': 'トリノシャコノコ,チュウコシャノコノミギニトリ', + '鴾': 'ボウ,シャカムニノムノミギニトリ', + '鴿': 'コウ,ゴウカクノゴウノミギニトリ', + '鴻': 'コウコク ノ ココロザシ ノ コウ,オオトリ', + '鴎': 'カモメ', + 'G': 'ジー ゴルフ', + '鴈': 'ガン,ガンダレニニンベンニトリ', + '鴉': 'キバニトリ,カラス', + '鴆': 'チン,シズムノツクリノミギニトリ', + '鴇': 'トリ ノ トキ', + '鴃': 'トリヘンニカイテキノカイ,モズ', + '麝': 'ジャコウジカノジャ,シカノシタニハンシャノシャ', + '鴟': 'シ,テイコウスルノテイノツクリノミギニトリ', + '鴛': 'エンオウ ノ エン,オシドリ', + '鴕': 'ダ,トリヘンニブッダノダノツクリ', + '鴒': 'セキレイノレイ', + '柄': 'ヒトガラ ノ ガラ', + '柆': 'ロウ,キヘンニドクリツノリツ', + '柁': 'カジ,キヘン ニ ウカンムリ ニ カタカナ ノ ヒ', + '柎': 'フ,キヘンニフロクノフ', + '柏': 'カシワモチ ノ カシワ', + '柊': 'ショクブツ ノ ヒイラギ,キヘン ニ フユ', + '柔': 'ジュウドウ ノ ジュウ,ヤワラカイ', + '某': 'ナニガシ ノ ボウ', + '柑': 'カンキツルイ ノ カン', + '染': 'センショク ノ セン,ソメル', + '柝': 'タク,キヘンニハイセキウンドウノセキ', + '柞': 'サク,キヘンニサクブンノサクノツクリ', + '柘': 'ザクロ ノ イチモジメ,キヘン ニ イシ', + '柚': 'ショクブツ ノ ユズ,ユウ', + '麥': 'ムギノキュウジ', + '柤': 'サ,キヘンニナオカツノカツ', + '柧': 'コ,キヘンニウリ', + '麦': 'ムギチャ ノ ムギ', + '柢': 'テイ,キヘンニヒクイノツクリ', + '柬': 'カン,イサメルノツクリ', + '柮': 'トツ,キヘンニガイシュツスルノトツ', + '柯': 'カ,キヘンニカノウセイノカ', + '開': 'カイハツ ノ カイ,ヒラク', + '柩': 'ヒツギ,レイキュウシャノキュウ', + '柴': 'シバイヌ ノ シバ,タキギ ノ シバ', + '柵': 'サクデカコム ノ サク', + '柱': 'ハシラ,チュウ', + '柳': 'ヤナギ,センリュウ ノ リュウ', + '柾': 'ショクブツ ノ マサキ,キヘン ニ タダシイ', + '柿': 'クダモノ ノ カキ', + '麪': 'メンルイノメンノイタイジ', + '査': 'ケンサ ノ サ', + '焔': 'ホノオ,ヒヘン ノ ホノオ', + '焙': 'バイセンスルノバイ,アブル', + '焚': 'フンショコウジュ ノ フン,タキビ ノ タキ', + '焜': 'コン,ヒヘンニコンチュウノコン', + '麭': 'ホウ,ムギノキュウジニツツム', + '焉': 'シュウエンノチノエン', + '金': 'キンヨウビ ノ キン,カネ', + '然': 'ダイシゼン ノ ゼン', + '焼': 'ニクヲヤク ノ ヤク', + '無': 'ムリ ノ ム,ナイ', + '焦': 'ショウテンキョリ ノ ショウ', + '闇': 'クラヤミ ノ ヤミ', + '路': 'ドウロ ノ ロ', + '釐': 'リ,ミライノミニノブンノシタニタンイノリン', + '跪': 'ヒザマズク,キ', + '跫': 'キョウ、キョウリュウノキョウノココロノカワリニテアシノアシ', + '跨': 'コセンキョウ ノ コ,マタグ', + '闍': 'アジャリノジャ', + '闌': 'ラン,ハランバンジョウノランノツクリ', + '跣': 'セン,アシヘンニイキサキノサキ', + '跡': 'ツイセキスル ノ セキ,アト', + '跿': 'ト,アシヘンニダッソウスルノソウ', + '跼': 'キョク,アシヘンニヤッキョクノキョク', + '闔': 'コウ,モンガマエニキョネンノキョニサラ', + 'V': 'ブイ ビデオ', + '践': 'ジッセンスル ノ セン', + '跳': 'チョウヤクスル ノ チョウ,トブ', + '闘': 'トウギュウシ ノ トウ,タタカウ', + '跏': 'カ、アシヘンニカソクドノカ', + '跌': 'ジンセイノサテツノテツ', + '跋': 'チョウリョウバッコノバツ', + '闡': 'セン,モンガマエニタンジュンナノタンノキュウジ', + '麼': 'モ,マスイノマノシタニイトガシラ', + '跂': 'キ,アシヘンニササエル', + '跟': 'コン,アシヘンニダイコンノコンノツクリ', + '距': 'キョリ ノ キョ', + '跚': 'スイホマンサンノサン、アシヘンニイッサツニサツノサツ', + '跛': 'ハ,アシヘンニケガワノカワ', + '跖': 'セキ、アシヘンニイシ', + '麿': 'ウタマロ ノ マロ', + '劭': 'ショウ,マネクノツクリニチカラ', + '針': 'ホウシン ノ シン,ハリ', + '帆': 'ハンセン ノ ハ,ホバシラ ノ ホ', + '市': 'シヤクショ ノ シ,イチ', + '布': 'ヌノ,モウフ ノ フ', + '希': 'キボウ ノ キ,マレ', + '帋': 'ガヨウシノシ,カミノイタイジ', + '帖': 'テチョウ ノ チョウ,ハバニウラナウ', + '帑': 'ド,ヤッコノシタニハバ', + '帝': 'テイオウ ノ テイ,ミカド', + '帚': 'ホウキ,ソウジキノソウノツクリ', + '帛': 'ハク,ハクチョウノハクノシタニハバ', + '帙': 'チツ,ハバヘンニウシナウ', + '帥': 'ダイゲンスイ ノ スイ', + '帯': 'ケイタイ ノ タイ,オビ', + '席': 'ザセキ ノ セキ', + '師': 'ボクシ ノ シ', + '非': 'ヒジョウグチ ノ ヒ', + '帶': 'ケイタイノタイ,オビノキュウジ', + '帷': 'カタビラ,ハバヘンニフルトリ', + '帳': 'レンラクチョウ ノ チョウ', + '帰': 'キタクスル ノ キ,カエル', + '帽': 'ダツボウスル ノ ボウ', + '常': 'ヒジョウグチ ノ ジョウ', + ',': 'コンマ', + '回': 'マワル,カイテン ノ カイ', + '四': 'カンスウジ ノ ヨン', + '囚': 'シュウジン ノ シュウ,トラワレル', + '囘': 'マワル,カイテンノカイノイタイジ,ドウガマエニジュウニシノミ', + '囗': 'イ,ブシュノクニガマエ', + '囓': 'ゲツ,クチヘンニゲッシルイノゲツ', + '囑': 'ショク,ショクタクスルノショクノキュウジ', + '囎': 'ソ,クチヘンニカイガラノカイニキソジノソノキュウジ', + '囈': 'ゲイ,クチヘンニゲイジュツノゲイノキュウジ', + '囃': 'ゴニンバヤシノハヤシ', + '囂': 'ケンケンゴウゴウノゴウ', + '囁': 'ササヤク', + '囀': 'サエズル,クチヘンニウンテンノテンノキュウジ', + '囿': 'ユウ,クニガマエニユウメイジンノユウ', + '国': 'コクゴ ノ コク,クニ', + '固': 'コタイ ノ コ,カタイ', + '囹': 'レイ,クニガマエニメイレイスルノレイ', + '図': 'トショカン ノ ト,ズ', + '囲': 'イゴ ノ イ,カコム', + '困': 'コンナン ノ コン,コマル', + '囮': 'オトリソウサノオトリ', + '団': 'ダンタイコウドウ ノ ダン', + '因': 'ゲンイン ノ イン,チナミニ', + '偉': 'イダイ ノ イ,エライ', + 'ё': 'キリル ィヨー', + '偏': 'ヘンセイフウ ノ ヘン,カタヨル', + 'с': 'キリル エス', + 'р': 'キリル エル', + 'у': 'キリル ウー', + 'т': 'キリル テー', + 'х': 'キリル ハー', + 'ф': 'キリル エフ', + 'ч': 'キリル チェー', + 'ц': 'キリル ツェー', + 'щ': 'キリル シシャー', + 'ш': 'キリル シャー', + 'ы': 'キリル ウィ', + 'ъ': 'キリル コウオンキゴウ', + 'э': 'キリル エー', + 'ь': 'キリル ナンオンキゴウ', + 'я': 'キリル ヤー', + 'ю': 'キリル ユー', + '覚': 'カンカク ノ カク,オボエル', + '蔆': 'ヒシガタノヒシノイタイジ', + '蔀': 'シトミ,クサカンムリ ニ ブチョウ ノ ブ', + '蔗': 'ショトウノショ,クサカンムリニショミンノショ', + '蔕': 'タイ,クサカンムリニオビノキュウジ', + '蔔': 'ホク,クサカンムリニホフクゼンシンノフク', + '蔓': 'マンエンスル ノ マン,ツル', + '蔑': 'ケイベツスル ノ ベツ,サゲスム', + '偐': 'ガン,ニンベンニヒコボシノヒコノキュウジ', + '蔟': 'ソク,クサカンムリニスイゾクカンノゾク', + '蔚': 'クサカンムリ ニ リクグンタイイ ノ イ', + '蔘': 'シン,クサカンムリニサンギインノサンノキュウジ', + '蔦': 'ショクブツ ノ ツタ', + '蔡': 'サイ,クサカンムリニシュクサイジツノサイ', + '蔭': 'クサカンムリ ノ カゲ', + '蔬': 'ソサイルイノソ', + '蔵': 'レイゾウコ ノ ゾウ', + '2': 'ニ', + '蔽': 'シャヘイスル ノ ヘイ', + '偖': 'シャ,ニンベンニカガクシャノシャノキュウジタイ', + '偬': 'ソウ,ニンベンニネギノクサカンムリヲトッタモノ', + '仆': 'ボク,ニンベンニウラナウノボク', + '仇': 'アダ,キュウテキ ノ キュウ', + '仄': 'ソクブンスルノソク,ホノカ', + '仂': 'ロク,ニンベンニチカラ', + '什': 'ジュウキ ノ ジュウ,ニンベン ニ カンスウジ ノ ジュウ', + '栲': 'コウ,キヘンニサンコウショノコウ', + '栽': 'サイバイスル ノ サイ', + '仏': 'ブツゾウ ノ ブツ,ホトケ', + '仍': 'ジョウ,ニンベンニノギタイショウノノ', + '根': 'ダイコン ノ コン,ネ', + '介': 'カイゴ ノ カイ,スケ', + '他': 'タニン ノ タ', + '仗': 'ギジョウヘイノジョウ', + '仔': 'シサイナ ノ シ,ニンベン ニ コドモ ノ コ', + '仕': 'シゴト ノ シ,ツカエル', + '校': 'ガッコウ ノ コウ', + '栢': 'カヤ,キヘン ニ ヒャク', + '仞': 'フカサノタンイノジン,ニンベンニカタナニテン', + '仟': 'セン,ニンベンニカンスウジノセン', + '仝': 'ドウジョウ', + '栩': 'ク,キヘンニウモウノウ', + '付': 'フロク ノ フ,ツケル', + '株': 'カブシキ ノ カブ', + '令': 'メイレイ ノ レイ', + '以': 'イジョウ,イカ ノ イ', + '代': 'ダイヒョウ ノ ダイ,カワル', + '栓': 'センヌキ ノ セン', + '仮': 'カメン ノ カ,カリ', + '栞': 'シオリヲハサムノシオリ', + '件': 'ジョウケン ノ ケン', + '栄': 'エイヨウ ノ エイ,サカエル', + '仲': 'ナカマ ノ ナカ', + '仰': 'ギョウテンスル ノ ギョウ,アオグ', + '栂': 'ショクブツ ノ ツガ,キヘン ニ ハハ', + '任': 'セキニン ノ ニン', + 'm': 'エム マイク', + '側': 'リョウガワ ノ ガワ,ソク', + '偶': 'グウゼン ノ グウ', + '磁': 'ジシャク ノ ジ', + '磅': 'オモサノタンイノポンド', + '磆': 'カツ,イシヘンニホネ', + '骸': 'ガイコツ ノ ガイ,ムクロ', + '磋': 'セッサタクマノサ,イシヘンニサ', + '磊': 'ゴウホウライラクノライ', + '骼': 'カク,ホネヘンニゴウカクノカクノツクリ', + '磑': 'ガイ,イシヘンニヨロイノツクリ', + '磐': 'ジョウバンセン ノ バン', + '磔': 'タッケイノタク,ハリツケ', + '骨': 'ガイコツ ノ コツ,ホネ', + '磚': 'セン,カワラ,イシヘンニセンモンノセンノキュウジ', + '骭': 'カン,ホネヘンニアセノツクリ', + '磧': 'セキ,カワラ,イシヘンニセキニンノセキ', + '磨': 'ケンマスル ノ マ,ミガク', + '磬': 'ケイ,コエノキュウジノミミノカワリニイシ', + '磯': 'イソヅリ ノ イソ', + '磴': 'トウ,イシヘンニトザンノト', + '磽': 'コウ,イシヘンニギョウシュンノギョウノキュウジ', + '李': 'リカニ カンムリヲ タダサズ ノ リ,スモモ', + '杏': 'アンズ,キョウリン ノ キョウ', + '杉': 'スギノキ ノ スギ', + '杆': 'カン、キヘンニホス', + '杁': 'イリ、キヘンニハイル', + '杞': 'キユウニオワルノキ', + '束': 'ヤクソク ノ ソク', + '杜': 'モリ,キヘン ニ ツチ', + '杙': 'ヨク、キヘンニダイヒョウノダイノツクリ', + '杖': 'ハクジョウ ノ ジョウ,ツエ', + '杓': 'シャクシジョウギ ノ シャク', + '材': 'ザイリョウ ノ ザイ', + '村': 'ムラ,シチョウソン ノ ソン', + '杯': 'カンパイ ノ ハイ,サカズキ', + '杭': 'クイヲウツ ノ クイ', + '杪': 'ビョウ、コズエ、キヘンニスクナイ', + '杤': 'トチギケンノトチノイタイジ、キヘンニマンネンヒツノマン', + '来': 'ライネン ノ ライ,クル', + '杢': 'モク,キ ノ シタニ コウ', + '杣': 'ソマ、キヘンニヤマ', + '杠': 'コウ、キヘンニズガコウサクノコウ', + '条': 'ジョウケン ノ ジョウ', + '松': 'マツノキ ノ マツ,ショウ', + '板': 'コクバン ノ バン,イタ', + '杼': 'ジョ、キヘンニヨテイノヨ', + '杷': 'ショクブツ ノ ビワ ノ ハ,キヘン ニ トモエ', + '杵': 'ウスキネ ノ キネ', + '杲': 'コウ,アキラカ,ニチヨウビノニチノシタニジュモクノモク', + '杳': 'ヨウトシテシレナイノヨウ,ヨウビノモクノシタニニチ', + '杰': 'ゴウケツノケツノイタイジ,モクザイノモクノシタニレンガ', + '東': 'トウザイ ノ トウ,ヒガシ', + '貅': 'キュウ、ムジナヘンニヤスム', + 'C': 'シー キャット', + '⑦': 'マルナナ', + '⑧': 'マルハチ', + '⑤': 'マルゴ', + '⑥': 'マルロク', + '③': 'マルサン', + '④': 'マルヨン', + '①': 'マルイチ', + '②': 'マルニ', + '⑮': 'マルジュウゴ', + '⑯': 'マルジュウロク', + '⑬': 'マルジュウサン', + '⑭': 'マルジュウヨン', + '⑪': 'マルジュウイチ', + '⑫': 'マルジュウニ', + '⑨': 'マルキュウ', + '⑩': 'マルジュウ', + '⑲': 'マルジュウキュウ', + '⑳': 'マルニジュウ', + '⑰': 'マルジュウナナ', + '⑱': 'マルジュウハチ', + '嶐': 'リュウ,ヤマノシタニリュウキスルノリュウニイッカククワエタカタチ', + '嶬': 'ギ,ヤマヘンニギムノギ', + '嶮': 'ケン,ヤマヘンニシケンヲウケルノケンノキュウジノツクリ', + '嶢': 'ギョウ,ヤマヘンニギョウシュンノギョウノキュウジ', + '嶺': 'サンレイ ノ レイ,ミネ', + '嶼': 'ショ,ヤマヘンニアタエルノキュウジ', + '嶽': 'サンガクブノガクノキュウジ', + '嶷': 'ギ,ヤマノシタニギモンノギ', + '黌': 'ショウヘイコウノコウ', + '熙': 'キ,モトシュショウノホソカワモリヒロノヒロ', + '熟': 'ジュクゴ ノ ジュク,ジュクスル', + '熔': 'ヨウガン ノ ヨウ,ヒヘン ニ ナイヨウ ノ ヨウ', + '熕': 'コウ,ヒヘンニシャカイコウケンノコウ', + '熊': 'ドウブツ ノ クマ', + '熈': 'コウキジテンノキノイタイジ', + '熏': 'クンセイノクン,クスベル', + '熄': 'ソク,ヒヘンニイキヲスルノイキ', + '熹': 'キ,キゲキノキニレンガ', + '熾': 'シレツナノシ', + '熱': 'ネツ,アツイ', + '熨': 'ノシ,リクグンタイイノイノシタニカヨウビノカ', + '熬': 'ゴウ,ゴウマンナノゴウノツクリニレンガ', + '鯵': 'アジ,サカナヘン ニ マイル', + '詰': 'ツメル,キツモン ノ キツ', + '話': 'ハナシ,デンワ ノ ワ', + '該': 'ガイトウスル ノ ガイ', + '詳': 'ショウサイ ノ ショウ,クワシイ', + '詼': 'カイ,ゴンベンニハイイロノハイノキュウジタイ', + '詠': 'エイタン ノ エイ,ヨム', + '詢': 'ジュン,ゴンベンニゲジュンノジュン', + '詣': 'モウデル,サンケイスル ノ ケイ', + '鯱': 'サカナノシャチ', + '試': 'シアイ ノ シ,ココロミル', + '詩': 'シヲツクル ノ シ', + '詫': 'オワビスル ノ ワビ', + '詬': 'コウ,ゴンベンニコウゴウヘイカノゴウ', + '詭': 'キベンヲロウスルノキ', + '詮': 'センサクスル ノ セン', + '詐': 'サギシ ノ サ', + '詑': 'タ,ゴンベン ニ ウカンムリ ニ カタカナ ノ ヒ', + '詒': 'タイ,ゴンベンニダイドコロノダイ', + '詔': 'ショウチョク ノ ショウ,ミコトノリ', + '評': 'ヒョウカスル ノ ヒョウ', + '詛': 'ジュソノソ、ゴンベンニナオカツノカツ', + '詞': 'サクシサッキョク ノ シ', + '詁': 'クンコガクノコ、ゴンベンニチュウコシャノコ', + '詆': 'テイ,ゴンベンニテイコウスルノテイノツクリ', + '詈': 'バリゾウゴンノリ', + '長': 'ナガイ,チョウタン ノ チョウ', + '榿': 'キ,キヘンニヨロイノツクリ', + '榾': 'コツ,キヘンニホネ', + '榻': 'トウ,キヘンニヨウビノニチノシタニハネ', + '榴': 'リュウ,ザクロ,キヘンニリュウガクスルノリュウ', + '榲': 'オツ,キヘンニオンセンノオンノキュウジタイノツクリ', + '榱': 'スイ,キヘンニオトロエル', + '榮': 'エイヨウノエイ,サカエルノキュウジ', + '榧': 'カヤノキノカヤ', + '榠': 'メイ,キヘンニメイフクヲイノルノメイ', + '榜': 'ヒョウボウスルノボウ', + '榛': 'ショクブツ ノ ハシバミ', + '榕': 'ヨウ,キヘンニヨウセキノヨウ', + '榔': 'ショクブツ ノ ビンロウジュ ノ ロウ', + '榑': 'フ,キヘンニハクブツカンノハクノキュウジノツクリ', + '榎': 'エノキ,キヘン ニ ナツ', + '榊': 'ショクブツ ノ サカキ,キヘン ニ カミサマ ノ カミ', + '概': 'ガイネン ノ ガイ,オオムネ', + '榁': 'ムロノキノムロ,キヘンニムロマチノムロ', + '鯛': 'サカナ ノ タイ', + 'Z': 'ゼット ズー', + 'レ': 'レモン ノ レ', + 'ロ': 'ロウカ ノ ロ', + '鯒': 'サカナノコチ,ウオヘンニオケノツクリ', + '鯑': 'カズノコ,ウオヘンニマレ', + '鷙': 'シ,シツジノシツノシタニトリ', + '噤': 'キン,ツグム,クチヘンニキンシスルノキン', + '器': 'ガッキ ノ キ,ウツワ', + '噫': 'アア,クチヘンニイミノイ', + '噪': 'ソウ,クチヘンニソウジュウスルノソウノツクリ', + '噬': 'ホゾヲカムノカム,クチヘンニゼイチクノゼイ', + '噴': 'フンカスル ノ フン,フク', + '噸': 'オモサ ノ タンイ ノ トン', + '噺': 'ハナシカ ノ ハナシ,クチヘン ニ アタラシイ', + '噂': 'ウワサバナシ ノ ウワサ', + '噌': 'ミソ ノ ソ', + '噎': 'エツ,ムセブ,クチヘンニケイヤクショニツカウイチノキュウジ', + '噐': 'ウツワ,ガッキノキノイタイジ', + '噛': 'カム,クチヘン ニ ハ', + '0': 'ゼロ', + 'モ': 'モミジ ノ モ', + '薈': 'ワイ,クサカンムリニカイシャインノカイノキュウジ', + '薊': 'ショクブツノアザミ', + '薀': 'ウンチクヲカタムケルノウン,サンズイ', + '薄': 'ウスイ,ケイハク ノ ハク', + '薇': 'ビ,バライロノバラノニモジメ', + '薙': 'クサナギ ノ ナギ', + '薛': 'カワラヨモギヲイミスルセツ', + '薜': 'ヘイ,クサカンムリニカベノウエガワ', + '薑': 'キョウ,クサカンムリニカシハラジングウノカシノツクリ', + '薐': 'リョウ,クサカンムリニヤマノリョウセンノリョウ', + '薔': 'ショウ,バライロノバラノイチモジメ', + '薗': 'ソノ,クサカンムリ ニ ガクエン ノ エン', + '薩': 'サツマハン ノ サツ', + '薨': 'コウキョスルノコウ,ミマカル', + '薫': 'クンプウ ノ クン,カオル', + '薪': 'タキギ,マキワリ ノ マキ', + '薬': 'ヤクヒン ノ ヤク,クスリ', + '薯': 'バレイショ ノ ショ,イモ', + '薮': 'ヤブ,クサカンムリ ニ サンスウ ノ スウ', + '薤': 'ラッキョウ', + '薦': 'スイセンジョウ ノ セン,ススメル', + '薹': 'ダイ,トウガタツノトウ', + '薺': 'ナナクサノナズナ,セイ', + '霽': 'セイ、アメカンムリニイッセイシャゲキノセイノキュウジ?', + '霹': 'セイテンノヘキレキノヘキ', + '霧': 'ノウム ノ ム,キリ', + '癧': 'ルイレキノレキ,ヤマイダレニレキシカノレキノキュウジ', + '霓': 'ゲイ、アメカンムリニジドウセイトノジノキュウジ', + '筋': 'キンニク ノ キン,スジ', + '等': 'イットウショウ ノ トウ,ヒトシイ', + '筈': 'テハズ ノ ハズ', + '筏': 'イカダ', + '筍': 'タケノコ,ジュン', + '筌': 'チャセンノセン,タケカンムリニゼンコクノゼン', + '騰': 'フットウスル ノ トウ', + '筆': 'フデバコ ノ フデ,ヒツ', + '筅': 'チャセンノセン,タケカンムリニイキサキノサキ', + '騫': 'ケン,サムイノシタニテンノカワリニウマ', + '騨': 'ヒダタカヤマ ノ ダ', + '筝': 'ソウキョクノソウ,コトノイタイジ', + '筒': 'ツツ,スイトウ ノ トウ', + '筑': 'チクゼンニ ノ チク', + '筐': 'キョウタイノキョウ,ハコ', + '策': 'サクリャク ノ サク', + '答': 'コタエ,トウアン ノ トウ', + '騙': 'ダマス', + '筮': 'ゼイチクノゼイ', + '筬': 'セイ,オサ,タケカンムリニセイリツスルノセイ', + '騒': 'サワグ,ソウオン ノ ソウ', + '験': 'ニュウガクシケン ノ ケン', + '筧': 'カケヒ,タケカンムリニケンブツスルノケン', + '筥': 'ロ,タケカンムリニオフロノロ', + '筺': 'キョウタイノキョウ,ハコノイタイジ', + '騎': 'キヘイタイ ノ キ', + '騏': 'キリンノキ,ウマヘンニソノ', + '筱': 'ジョウ,シノダケノシノノイタイジ', + '筰': 'サク,タケカンムリニサクブンノサク', + '筵': 'エン,ムシロ,タケカンムリニエンキスルノエン', + '筴': 'キョウ,タケカンムリニセマイノキュウジノツクリ', + '惑': 'メイワク ノ ワク', + '惓': 'ケン,リッシンベンニノリマキノマキ', + '惘': 'ボウ,リッシンベンニモウマクノモウノツクリ', + '惚': 'ホレル,コウコツ ノ コツ', + '惜': 'オシム,セキハイ ノ セキ', + '惟': 'シイ ノ イ,リッシンベン ニ フルトリ', + '情': 'ユウジョウ ノ ジョウ,ナサケ', + '惆': 'チュウ,リッシンベンニシュウヘンノシュウ', + '惇': 'リッシンベン ニ キョウラクテキ ノ キョウ,トン', + '惰': 'タイダ ノ ダ', + '惱': 'ナヤム,クノウスルノノウノキュウジ', + '想': 'カンソウブン ノ ソウ', + '惴': 'ズイ,リッシンベンニゼンソクノゼンノツクリ', + '惶': 'コウ,リッシンベンニコウタイシノコウ', + '惷': 'シュン,キセツノハルノシタニココロ', + '惹': 'ジャッキスル ノ ジャク,ヒク', + '惺': 'セイ,リッシンベンニホシ', + '惻': 'ソクインノジョウノソク,リッシンベンニホウソクノソク', + 'q': 'キュー クエスチョン', + '惡': 'ゼンアクノアク,ワルイノキュウジ', + '惣': 'オソウザイ ノ ソウ', + '惧': 'キグスルノグ', + '惨': 'ザンパイスル ノ ザン,ミジメ', + '霖': 'リンウノリン、アメエカンムリニサンリンノリン', + '瀝': 'ヒレキスルノレキ', + '瀞': 'ナガトロ ノ トロ,サンズイ ニ シズカ', + '瀟': 'ショウシャナタテモノノショウ', + '瀘': 'ロ,サンズイニハゼノキノハゼノツクリ', + '瀚': 'コウカンナゾウショノカン', + '瀛': 'ウミヲイミスルサンズイノエイ', + '瀕': 'ヒンシ ノ ジュウショウ ノ ヒン', + '瀑': 'ナイアガラバクフノバク', + '瀏': 'リュウ,サンズイニリュウホウノリュウ', + '瀉': 'イッシャセンリノシャ,サンズイニシャシンノシャノキュウジ', + '瀋': 'チュウゴクノシンヨウノシン,サンズイニシンサスルノシン', + '瀁': 'ヨウ,サンズイニヤシナウ', + '瀾': 'ハランバンジョウノラン', + '瀰': 'ビ,サンズイニアミダブツノミノキュウジ', + '瀲': 'レン,サンズイニイッテンニシュウレンスルノレン', + '瀬': 'セトモノ ノ セ', + '瀦': 'ミズタマリヲ イミスル チョ', + '瀧': 'タキ ノ キュウジ', + '諺': 'コトワザ,ゲン', + '鋒': 'キュウセンポウ ノ ホウ,ホコサキ', + '諸': 'ショクン ノ ショ', + '諾': 'ショウダクスル ノ ダク', + '諳': 'ソランズル,アン', + '諱': 'イミナ,ゴンベンニイダイナノイノツクリ', + '諷': 'フウシノフウ,ゴンベンニカゼ', + '諫': 'イサメル,カン', + '諮': 'シモンスル ノ シ,ハカル', + '諭': 'キョウユ ノ ユ,サトス', + '諢': 'コン,ゴンベンニグンタイノグン', + '諠': 'ケン,ゴンベンニセンデンスルノセン', + '諡': 'オクリナ,シゴウノシ', + '諦': 'アキラメル,テイカンスル ノ テイ', + '諧': 'カイギャクノカイ', + '諤': 'カンカンガクガクノガク', + '諚': 'ジョウ,ゴンベンニサダメル', + '諛': 'ユ,ゴンベンニシュユノマノユ', + '諞': 'ヘン,ゴンベンニヘンペイソクノヘン', + '諜': 'チョウホウキカン ノ チョウ', + '諒': 'リョウカイスル ノ リョウ,ゴンベン ニ キョウト ノ キョウ', + '鋺': 'カナマリ、カネヘンニウデノツクリ', + '鋸': 'ノコギリ,キョ', + '論': 'ケツロン ノ ロン', + '鋼': 'コウテツ ノ コウ,ハガネ', + '請': 'セイキュウショ ノ セイ,コウ', + '諏': 'スワコ ノ ス', + '諌': 'イサメル,カンゲンスル ノ カン', + '諍': 'イサカイ,ソウ', + '諂': 'ヘツラウ,テン', + '倚': 'イ,ニンベンニキミョウナノキ', + '鋩': 'ボウ、カネヘンニクサカンムリニボウメイスルノボウ', + '談': 'ジョウダンヲイウ ノ ダン', + '諄': 'ジュン,ゴンベンニキョウラクテキノキョウ', + '倖': 'ギョウコウ ノ コウ,ニンベン ニ サチ', + '適': 'テキトウ ノ テキ', + '倔': 'クツ,ニンベンニリクツノクツ', + 'ニ': 'ニホン ノ ニ', + '遥': 'ヨウハイスル ノ ヨウ,ハルカ', + '崑': 'コンロンサンミャクノコン,ヤマノシタニコンチュウノコン', + '崖': 'ガケ,ダンガイ ノ ガイ', + '崗': 'カコウガンノコウ,オカヤマケンノオカノイタイジ', + '崔': 'サイ,ヤマノシタニフルトリ', + '崕': 'ガケ,ダンガイノガイノイタイジ', + '崚': 'リョウ,ヤマヘンニリョウセンノリョウノツクリ', + '崛': 'クツ,ヤマヘンニリクツノクツ', + '崘': 'コンロンサンミャクノロンノイタイジ', + '崙': 'コンロンサンミャクノロン', + '崟': 'ギン,ヤマノシタニキンヨウビノキン', + '倭': 'ギシワジンデン ノ ワ', + '崇': 'スウハイスル ノ スウ,アガメル', + '崋': 'ワタナベカザンノカ', + '崎': 'ナガサキ ノ サキ', + '遽': 'キュウキョキタクスルノキョ', + '崢': 'ソウ,ヤマヘンニアラソウノキュウジ', + '倦': 'ケンタイカン ノ ケン,ウム', + '崩': 'ホウカイスル ノ ホウ,クズレル', + '選': 'センキョ ノ セン,エラブ', + 'ナ': 'ナマエ ノ ナ', + '遺': 'イデン ノ イ', + '侘': 'タ,ワビシイノワビ,ニンベンニジュウタクノタク', + '遷': 'サセンスル ノ セン', + '遲': 'チコクスルノチ,オソイノキュウジ', + '遍': 'フヘンテキナ ノ ヘン', + '嗣': 'ヨツギ ノ ツギ,セイシ ノ シ', + '遏': 'アツ,シンニョウニカッショクノカツノツクリ', + '嗤': 'シ,ワラウ,アザワラウ', + '倶': 'クラブ ノ ク', + '嗹': 'レン,クチヘンニレンラクノレン', + '嗾': 'ソウ,ソソノカス,クチヘンニスイゾクカンノゾク', + '嗽': 'ソウ,クチススグ,クチヘンニナツメソウセキノソウノツクリ', + '嗷': 'ゴウ,クチヘンニゴウマンノゴウノツクリ', + '嗇': 'リンショクカノショク', + '嗅': 'キュウカクノキュウ,カグ', + '嗄': 'コエガカレルノカレル,クチヘンニナツ', + '嗚': 'オエツノオ,クチヘンニカラス', + '嗟': 'トッサノサ,クチヘンニサベツカスルノサ', + '嗜': 'シコウヒンノシ,タシナム', + '遇': 'ユウグウスル ノ グウ', + '嗔': 'シン,イカル,クチヘンニマゴコロノマノキュウジ', + '遙': 'ヨウハイスルノヨウ,ハルカノキュウジ', + '霙': 'ミゾレ、アメカンムリニエイユウノエイ', + '違': 'イハン ノ イ,チガウ', + '達': 'ハイタツ ノ タツ', + '震': 'ジシン ノ シン,フルエル', + '舒': 'ジョ,シュクシャノシャノキュウジノミギニヨテイノヨ', + '舐': 'ナメル,シタヘンニウジガミノウジ', + '舗': 'ホソウスル ノ ホ', + '舖': 'ホソウドウロノホノキュウジ', + '舛': 'ソムクヲ イミスル セン,マス', + '舘': 'ヤカタ ノ イタイジ,カン', + '舟': 'ゴエツドウシュウ ノ シュウ,フネ', + '舞': 'カブキ ノ ブ,マウ', + '舜': 'ギョウシュン ノ シュン', + '舂': 'ウスヅク,ショウ', + '舁': 'カゴヲカクノカク', + '與': 'アタエル,キュウヨノヨノキュウジ', + '舅': 'シュウト', + '舊': 'キュウレキノキュウノキュウジ', + '舉': 'センキョノキョ,アゲルノキュウジノイタイジ', + '興': 'キョウミ ノ キョウ', + '舎': 'ガッコウ ノ コウシャ ノ シャ', + '舍': 'ガッコウノコウシャノシャノキュウジ', + '舌': 'シタヲカム ノ シタ', + '舳': 'フネノヘサキ,フネヘンニリユウノユウ', + '舷': 'ウゲンサゲン ノ ゲン,フナバタ', + '舶': 'ハクライヒン ノ ハク', + '舵': 'カジ,ソウダシュ ノ ダ', + '船': 'フネ,センチョウ ノ セン', + '舸': 'カ,フネヘンニカノウセイノカ', + '舫': 'モヤイムスビノモヤイ', + '航': 'コウクウキ ノ コウ', + '舩': 'フネ,フネヘンニオオヤケ', + '舮': 'フネノトモ,フネヘンニトジマリノト', + '般': 'イッパンテキ ノ ハン', + '椁': 'カク,キヘンニキョウラクテキナノキョウ', + '椀': 'キヘン ノ シルワン ノ ワン', + '椅': 'イス ノ イ', + '椄': 'ショウ,キヘンニメカケ', + '椈': 'キク,キヘンニキクノハナノキクノクサカンムリナシ', + '椋': 'ムクドリ ノ ムク,キヘン ニ キョウト ノ キョウ', + '植': 'ショクブツ ノ ショク,ウエル', + '椌': 'コウ,キヘンニクウキノクウ', + '椏': 'ア,キヘンニアネッタイノアノキュウジ', + '椎': 'セキツイ ノ ツイ,シイ', + '椒': 'サンショウウオノショウ', + '椙': 'スギ,キヘン ニ ニチガ フタツ', + '椛': 'カバ,キヘン ニ ハナ', + '椚': 'ショクブツノクヌギ,キヘンニセンモンノモン', + '検': 'ケンサ ノ ケン', + '椡': 'ショクブツノクヌギ,キヘンニトウチャクノトウ', + '椣': 'ショクブツノシデ,キヘンニコクゴジテンノテン', + '椢': 'カイ,キヘンニコクゴノコク', + '椥': 'チ,キヘンニチシキノチ', + '椦': 'ケン,キヘンニジョウシャケンノケンノカタナノカワリニチカラ', + '椨': 'タブノキ,キヘンニトドウフケンノフ', + '椪': 'ショクブツノポンカンノポン,キヘンニナラブ', + '椰': 'ヤシノキノヤ', + '椴': 'トドマツ ノ トド,キヘン ニ シュダン ノ ダン', + '椶': 'シュロノキノシュノイタイジ', + '椹': 'チン,キヘンニハナハダシイ', + '椽': 'テン,キヘンニエンガワノエンノキュウジタイノツクリ', + '椿': 'ショクブツ ノ ツバキ,キヘン ニ ハル', + '篌': 'コウ,タケカンムリニオウコウキゾクノコウ', + '篏': 'ハメキザイクノハメル,カンノイタイジ', + '築': 'ケンチク ノ チク,キズク', + '鮹': 'タコ,ウオヘンニショウゾウガノショウ', + '篋': 'キョウ,タケカンムリニハコガマエノナカニセマイノキュウジノツクリ', + '鮴': 'サカナノゴリ,ウオヘンニヤスム', + '範': 'モハン ノ ハン', + '篇': 'タケカンムリ ノ ヘンシュウスル ノ ヘン', + '篆': 'テンコクノテン', + '篁': 'コウ,タカムラ,タケカンムリニコウタイシノコウ', + '節': 'キセツ ノ セツ,フシ', + '篝': 'コウ,カガリビノカガリ', + '鮭': 'サケ,サカナヘン ニ ツチ フタツ', + '鮮': 'シンセンナ ノ セン,アザヤカ', + '鮨': 'スシ,ウオヘンニウマイ', + '鮪': 'マグロ,サカナヘン ニ アル', + '鮫': 'サメ,サカナヘン ニ マジワル', + '鮠': 'サカナノハヤ,ウオヘンニアブナイ', + '篭': 'カゴ ノ イタイジ,タケカンムリ ニ キョウリュウ ノ リュウ', + '鮟': 'サカナノアンコウノアン,ウオヘンニヤスイ', + '篩': 'フルイニカケルノフルイ', + '鰤': 'サカナノブリ', + '霍': 'カク,アメカンムリニフルトリ', + '篥': 'ヒチリキノリキ,タケカンムリニクリノキノクリ', + '篤': 'キトクジョウタイ ノ トク', + '鮖': 'カジカ,ウオヘンニイシ', + '篦': 'ヘラ', + '篠': 'シノダケ ノ シノ', + '鮒': 'フナ,サカナヘン ニ ツケル', + '鮓': 'スシ,ウオヘンニサクブンノサクノツクリ', + '鮎': 'アユ,サカナヘン ニ ウラナウ', + '篷': 'ホウ,トマ,タケカンムリニダンジョノアイビキノアイ', + '篶': 'エン,タケカンムリニシュウエンノチノエン', + '篳': 'ヒチリキノヒチ,タケカンムリニヒッキョウノヒツ', + '鮃': 'ヒラメ,ウオヘンニタイラ', + '恚': 'イ,ツチフタツノシタニココロ', + '恙': 'ヨウ,ツツガナククラスノツツガ', + '恟': 'キョウ,リッシンベンニカラダノムネノツクリ', + '恒': 'コウオンドウブツ ノ コウ,ツネニ', + '鰮': 'オン,ウオヘンニトラワレビトノシュウノシタニサラ', + '恐': 'キョウフ ノ キョウ,オソロシイ', + '恕': 'カンジョ ノ ジョ,ユルス', + '恊': 'キョウリョクスルノキョウノイタイジ', + '恋': 'コイビト ノ コイ,レン', + '恍': 'コウコツノヒトノコウ', + '恂': 'ジュン,リッシンベンニゲジュンノジュン', + '恃': 'キョウジヲタモツノジ', + '恁': 'ジン,セキニンノニンノシタニココロ', + '恆': 'コウオンドウブツノコウ,ツネニノキュウジ', + '^': 'ベキジョウ', + '恰': 'カップクガヨイ ノ カツ,アタカモ', + '恷': 'キュウ,キュウジツノキュウノシタニココロ', + '恵': 'メグム,チエ ノ エ', + '恪': 'カク,リッシンベンニカクジノカク', + '恫': 'ドウカツスルノドウ', + '恨': 'ウラミ,ツウコン ノ コン', + '恩': 'オンガエシ ノ オン', + '息': 'イキヲスル ノ イキ,ソク', + '恬': 'ムヨクテンタンノテン', + '恭': 'キョウジュン ノ キョウ,ウヤウヤシイ', + '恢': 'テンモウカイカイ ノ カイ', + '恣': 'シイテキナノシ,ホシイママ', + '恠': 'カイブツノカイノイタイジ,リッシンベンニソンザイノザイ', + '恤': 'ジュツ,リッシンベンニケツエキノケツ', + '恥': 'ハジヲカク ノ ハジ', + '鰺': 'サカナノアジノイタイジ,カタカナノムガミッツ', + '寃': 'エンザイヲハラスノエンノイタイジ', + '寂': 'セイジャク ノ ジャク,サビシイ', + '寇': 'モウコシュウライノゲンコウノコウ', + '密': 'ヒミツ ノ ミツ', + '寅': 'トラ,ジュウニシ ノ トラ', + '寄': 'キフスル ノ キ,ヨル', + '寉': 'トリノツルノイタイジ,ウカンムリニフルトリ', + '富': 'ホウフ ノ フ,トム', + '寓': 'グウワ ノ グウ', + '寒': 'アツイサムイ ノ サムイ,カン', + '寐': 'ムビノビ,ネムル', + '寔': 'ショク,ウカンムリニゼヒノゼ', + '寛': 'カンダイナ ノ カン,ヒロイ', + '鰆': 'サワラ,ウオヘンニハル', + '察': 'ケイサツ ノ サツ', + '寞': 'セキバクノバク', + '寝': 'シンシツ ノ シン,ネル', + '寢': 'シンシツノシン,ネルノキュウジ', + '寡': 'カモクナ ノ カ,スクナイ', + '寧': 'テイネイ ノ ネイ', + '實': 'ジツリョクノジツ,ミノキュウジ', + '寥': 'セキリョウカンノリョウ', + '寤': 'サメルヲイミスルゴ', + '寫': 'シャシンノシャ,ウツスノキュウジ', + '審': 'シンサスル ノ シン', + '寨': 'サイ,サムイノシタニテンノカワリニモクザイノモク', + '寮': 'ガクセイリョウ ノ リョウ', + '寳': 'ホウセキノホウ,タカラノキュウジノイタイジ', + '寰': 'カン,ウカンムリニシゼンカンキョウノカンノツクリ', + '寶': 'ホウセキノホウ,タカラノキュウジ', + '寵': 'チョウアイヲウケル ノ チョウ', + '寺': 'テラ,ジイン ノ ジ', + '寸': 'スンポウ ノ スン', + '寿': 'コトブキ,ジュミョウ ノ ジュ', + '対': 'ハンタイ ノ タイ', + '鰌': 'ドジョウ,ウオヘンニシュウチョウサンノシュウ', + '鰓': 'エラ,ウオヘンニオモウ', + '4': 'ヨン', + '岔': 'タ,ハンブンノブンノシタニヤマ', + '岐': 'ブンキテン ノ キ', + '岑': 'シン,ヤマノシタニコンゲツノコン', + '鰛': 'オン,ウオヘンニオンセンノオンノツクリ', + '岌': 'キュウ,ヤマノシタニフキュウスルノキュウ', + '岶': 'ハク,ヤマヘンニシロイ', + '岷': 'ビン,ヤマヘンニコクミンノミン', + '岱': 'ダイヒョウ ノ ダイ ノ シタニ ヤマ,タイ', + '岳': 'サンガク ノ ガク,タケ', + '岼': 'ユリ,ヤマヘンニタイラ', + '岾': 'ハケ,ヤマヘンニドクセンスルノセン', + '岸': 'カイガン ノ ガン,キシ', + '岻': 'チ,ヤマヘンニヒクイノツクリ', + '岡': 'オカヤマケン ノ オカ', + '岬': 'エリモミサキ ノ ミサキ', + '岨': 'ケンソ ノ ソ,ヤマヘン ニ カツ', + '岩': 'イワ,ガンセキ', + '岫': 'シュウ,イワアナ,ヤマヘンニリユウノユウ', + '鹵': 'ロカクノロ,シオ', + '鹸': 'コナセッケン ノ ケン', + '鮗': 'コノシロ,ウオヘンニフユ', + '鮑': 'アワビ,ウオヘンニツツム', + '饐': 'イ,スエル', + '饕': 'トウ,ムサボル', + '鳶': 'トリ ノ トビ', + 'T': 'ティー タイム', + '饉': 'キキンニミマワレルノキン', + '饋': 'キ,オクル,ショクヘンニキチョウヒンノキ', + '饌': 'セン,ソナエル,ショクヘンニエラブノツクリ', + '炮': 'ホウ,ヒヘンニツツム', + '炯': 'ケイガンノシノケイ,ヒヘンニドウガマエニクチ', + '炬': 'キョ,カガリビ,ヒヘンニキョダイナノキョ', + '炭': 'セキタン ノ タン,スミ', + '炳': 'ヘイ,ヒヘンニコウオツヘイノヘイ', + '為': 'コウイ ノ イ,タメ', + '炸': 'バクダンガサクレツスルノサク', + '点': 'テンスウ ノ テン', + '饂': 'ドン,ウドンノイチモジメ', + '炎': 'エンジョウスル ノ エン,ホノオ', + '饅': 'マンジュウノマン', + '炊': 'スイハンキ ノ スイ,タク', + '炉': 'ダンロ ノ ロ', + '炒': 'イタメル,チャーハンノイチモジメ', + '炙': 'ジンコウニカイシャスルノシャ,アブル', + '譽': 'メイヨノヨ、ホマレノキュウジ', + '鉗': 'カンシブンベンノカン', + '鉐': 'セキ、カネヘンニイシ', + '譴': 'ケンセキショブンノケン、セメル', + '護': 'ホゴシャ ノ ゴ', + '議': 'カイギシツ ノ ギ', + '譱': 'ゼンアクノゼン,ヨイノイタイジ', + '譲': 'ジョウホスル ノ ジョウ,ユズル', + '鉚': 'リュウ、カネヘンニジュウニシノウ', + '譬': 'タトエバナシノタトエ、ヒ', + '鉄': 'テツドウ ノ テツ', + '譯': 'ツウヤクスルノヤク、ワケノキュウジ', + '譫': 'センモウジョウタイノセン', + '警': 'ケイサツ ノ ケイ', + '鉉': 'ゲン、カネヘンニゲンマイノゲン', + '鉈': 'ナタ', + '鉋': 'ダイクドウグノカンナ', + '譜': 'フメン ノ フ', + '譟': 'ソウ、ゴンベンニソウジュウスルノソウノツクリ', + '識': 'チシキ ノ シキ', + '譚': 'タン,ゴンベンニニシノシタニハヤオキノハヤイ', + '譛': 'シン,ゴンベンニフリカエノカエ', + '譖': 'シン,ゴンベンニセンエツナガラノセンノツクリ', + '鉾': 'カマボコ ノ ホコ', + '譌': 'オクニナマリノナマリノイタイジ', + '鉤': 'コウ、カギ、カネヘンニハイクノク', + '譎': 'ケツ、ゴンベンニタチバナノツクリ', + '譏': 'キ、ゴンベンニキカガクノキ', + 'u': 'ユー ユージュアリー', + '證': 'ショウ、ショウメイショノショウノキュウジ', + '鉢': 'ハチウエ ノ ハチ', + '譁': 'カ、ゴンベンニチュウカナベノカ', + 'z': 'ゼット ズー', + '檎': 'リンゴ ノ ゴ', + '檍': 'ヨク,キヘンニイミガナイノイ', + '檀': 'ダンカ ノ ダン', + '檄': 'ゲキヲトバスノゲキ', + '檜': 'ショクブツノヒノキ,キヘンニカイシャノカイノキュウジ', + '檐': 'エン,サンタンタルノタンノツクリ', + '檗': 'オウバクシュウノバク,カベノツチノカワリニショクブツノキ', + '檪': 'クヌギ,レキ,キヘンニオンガクカノガク', + '檮': 'トウ,キヘンニコトブキノキュウジ', + '檬': 'モウ,レモンノニモジメ', + '檣': 'ショウ,ホバシラ', + '檢': 'ケンサスルノケンノキュウジ', + '檠': 'ケイ,ソンケイスルノケイノシタニモクザイノモク', + '檻': 'セッカンスルノカン,オリ', + '檸': 'ネイ,レモンノイチモジメ', + '檳': 'ショクブツノビンロウジュノビン', + 'K': 'ケイ キッチン', + '啣': 'クツワノイタイジ,クチヘンニオロシウリノオロシ', + '啼': 'テイ,ナク,クチヘンニテイオウノテイ', + '啾': 'シュウ,ナク,クチヘンニアキマツリノアキ', + '啻': 'タダ,テイオウノテイノシタニクチ', + '啌': 'コウ,クチヘンニクウキノクウ', + '問': 'モンダイ ノ モン,トウ', + '啅': 'タク,クチヘンニタッキュウノタク', + '啄': 'タクボク ノ タク,ツイバム', + '商': 'ショウバイ ノ ショウ', + '啀': 'イガミアウノイガム,ガイ', + '啝': 'カ,クチヘンニワフクノワ', + '啜': 'ススル,セツ', + '啗': 'タン,クラウ,クチヘンニアンコノアンノツクリ', + '啖': 'タンカヲキルノタン', + '啓': 'ケイハツ ノ ケイ', + '銑': 'センテツ ノ セン,カネヘン ニ サキ', + '銖': 'シュ、カネヘンニシュイロノシュ', + '孅': 'セン,オンナヘンニクジビキノクジノシタガワ', + '孀': 'ソウ,ヤモメ,オンナヘンニシモバシラノシモ', + '孃': 'オジョウサマノジョウノキュウジ', + '銜': 'カン、ギョウガマエニキンヨウビノキン', + '孕': 'ハラム,ヨウ', + '孔': 'コウシモウシ ノ コウ', + '字': 'ローマジ ノ ジ', + '孑': 'ノコリヲイミスルケツ,コドモノコノミギウデガカケタカタチ', + '子': 'コドモ ノ コ', + '孝': 'オヤフコウ ノ コウ', + '孜': 'ツトム,コヘン ニ ノブン', + '孟': 'コウシモウシ ノ モウ', + '存': 'ソンザイスル ノ ソン', + '孛': 'ボツ,ボッパツスルノヒダリガワ', + '孚': 'フ,ハグクム,ツメノシタニコドモノコ', + '孥': 'ド,ヤッコノシタニコドモノコ', + '孤': 'コドク ノ コ', + '学': 'マナブ,ガクシュウ ノ ガク', + '季': 'キセツフウ ノ キ', + '孩': 'ガイ,コヘンニジュウニシノイノシシ', + '孫': 'マゴノテ ノ マゴ,ソン', + '孵': 'タマゴガフカスルノフ', + '→': 'ミギヤジルシ', + '↑': 'ウエヤジルシ', + '←': 'ヒダリヤジルシ', + '孱': 'サン,シカバネニコドモノコガミッツ', + '孰': 'シュク,ガクシュウジュクノジュクカラツチヲトッタカタチ', + '孳': 'ジ,ジヒブカイノジノココロノカワリニコドモノコ', + '學': 'マナブ,ガクシュウノガクノキュウジ', + '孺': 'ジュ,コヘンニヒツジュヒンノジュ', + '芒': 'ボウ、クサカンムリニボウメイスルノボウ', + '芝': 'シバフ ノ シバ', + '芟': 'サン、クサカンムリニルマタ', + '芙': 'ショクブツ ノ フヨウ ノ フ', + '芍': 'ショクブツノシャクヤクノシャク', + '芋': 'ヤキイモ ノ イモ', + '!': 'カンタンフ', + '花': 'ハナ,カビン ノ カ', + '芳': 'カンバシイ,ホウコウザイ ノ ホウ', + '芽': 'ハツガ ノ ガ,キノメ ノ メ', + '芹': 'ショクブツ ノ セリ', + '芸': 'ゲイジュツ ノ ゲイ', + '芻': 'スウ、ハンスウドウブツノスウ', + '芥': 'アクタガワショウ ノ アクタ', + '芦': 'アシ,クサカンムリ ニ トジマリ ノ ト', + '芭': 'バショウ ノ バ', + '芬': 'アクシュウフンプンノフン', + '芯': 'エンピツ ノ シン ノ シン', + '芫': 'ゲン、クサカンムリニゲンキナノゲン', + '謖': 'ナイテバショクヲキルノショク', + '週': 'イッシュウカン ノ シュウ', + '逵': 'キ、シンニョウニリクジョウノリクノツクリ', + '賽': 'サイセンバコノサイ', + '逸': 'イツダツスル', + '銭': 'ツリセン ノ セン', + '逡': 'シュンジュンスルノシュン', + '穗': 'イナホノホノキュウジ', + '穐': 'アキ,ノギヘン ニ カメ', + '穆': 'ノギヘン ノ ボク', + '穃': 'ヨウ,ノギヘンニヨウセキノヨウ', + '穂': 'イナホ ノ ホ', + '穀': 'コクモツ ノ コク', + '穏': 'ヘイオン ノ オン,オダヤカ', + '穎': 'スグレルヲ イミスル エイ,ホサキ,ノギヘン', + '積': 'メンセキ ノ セキ,ツモル', + '穉': 'ヨウチエンノチノイタイジ', + '究': 'ケンキュウ ノ キュウ', + '穴': 'アナヲホル ノ アナ', + '穰': 'ゴコクホウジョウノジョウノキュウジ', + '穿': 'ウガツ,センコウスル ノ セン', + '逮': 'タイホジョウ ノ タイ', + '穽': 'オトシアナヲイミスルカンセイノセイ', + '空': 'クウキ ノ クウ,ソラ', + '穹': 'ソウキュウノキュウ,アナカンムリニユミ', + '穣': 'ゴコクホウジョウ ノ ジョウ', + '穢': 'ケガレ,ワイ', + '穡': 'ショク,ノギヘンニリンショクノショク', + '穫': 'シュウカクスル ノ カク,トリイレル', + '穩': 'ヘイオンノオン,オダヤカノキュウジ', + '鬆': 'ショウ,カミガシラニマツノキノマツ', + '懐': 'カイチュウデントウ ノ カイ,フトコロ', + '懌': 'エキ,リッシンベンニサワノキュウジノツクリ', + '懍': 'リン,リッシンベンニリンギスルリン', + '懈': 'ケタイスルノケ,リッシンベンニカイケツスルノカイ', + '應': 'オウエンスルノオウノキュウジ', + '懊': 'オウノウスルノオウ,ナヤム', + '懋': 'ボウ,ハヤシノアイダニムジュンスルノム,ソノシタニココロ', + '鬟': 'カン,カミガシラニジュンカンスルノカンノツクリ', + '懆': 'ソウ,リッシンベンニソウジュウスルノソウノツクリ', + '懇': 'コンシンカイ ノ コン,ネンゴロ', + '鬚': 'シュ,ヒゲ,カミガシラニヒッスノス', + '鬘': 'マン,カミガシラニマンダラノマン', + '懃': 'インギンブレイノギン', + '懼': 'キョウクスルノク,リッシンベンニメガフタツノシタニフルトリ', + '懽': 'カン,リッシンベンニカンガイヨウスイノカンノツクリ', + '懾': 'ショウ,リッシンベンニミミミッツ', + '懿': 'ダイヨンダイイトクテンノウノイ', + '懸': 'イッショウケンメイ ノ ケン,カケル', + '鬣': 'リョウ,カミガシラニリョウジュウノリョウノキュウジノツクリ', + '懺': 'ザンゲスルノザン,クイル', + '懴': 'ザンゲスルノザン,クイルノイタイジ', + '鬯': 'チョウ,ブシュノニオイザケ', + '懶': 'ランダナノラン,リッシンベンニイライスルノライノキュウジ', + '懷': 'カイチュウデントウノカイ,フトコロノキュウジ', + '鬪': 'トウギュウシノトウノキュウジ,タタカウ', + '懲': 'コラシメル,チョウバツ ノ チョウ', + '鬩': 'ゲキ,トウガマエニニラムノツクリ', + '鬲': 'カク,ヘダタリノツクリ', + '鬱': 'ユウウツナノウツ', + '懦': 'キョウダノダ,ヨワイ,リッシンベンニヒツジュヒンノジュ', + '鬻': 'シュク,カユノシタニヘダテルノツクリ', + '懣': 'フンマンヤルカカタナシノマン', + '猩': 'ショウコウネツノショウ,ケモノヘンニホシ', + '猪': 'イノシシ,チョトツモウシン ノ チョ', + '猫': 'ヤマネコ ノ ネコ', + '献': 'ケンケツスル ノ ケン', + '猯': 'タン,ケモノヘンニマッタンノタンノツクリ', + '猥': 'ヒワイナノワイ', + '猾': 'コウカツナジンブツノカツ,ケモノヘンニホネ', + '猿': 'ルイジンエン ノ エン,サル', + '猴': 'コウ,ケモノヘンニオウコウキゾクノコウ', + '猶': 'ユウヨスル ノ ユウ', + '猷': 'ハカリゴトヲ イミスル ユウ', + '猊': 'ゲイカノゲイ', + '猛': 'モウショ ノ モウ', + '猜': 'サイギシンノサイ', + '猝': 'ソツ,ケモノヘンニソツギョウノソツ', + '猟': 'リョウジュウ ノ リョウ', + '猖': 'ショウケツヲキワメルノショウ', + '猗': 'イ,ケモノヘンニキミョウナノキ', + '鏝': 'ハンダゴテノコテ', + '鏘': 'ショウ、カネヘンニショウグンノショウノキュウジ', + '鏗': 'コウ、カネヘンニケンジツナノケン', + '鏖': 'オウ、ドウブツノシカノシタニキンヨウビノキン', + '逅': 'メグリアイノカイコウノコウ', + '鏑': 'カブラヤ ノ カブラ', + '鏐': 'リョウ、カネヘンニニカワノツクリ', + '鏈': 'レン、カネヘンニレンラクノレン', + '鏃': 'ユミヤノヤジリ', + 'b': 'ビー ボーイ', + '透': 'トウメイナ ノ トウ,スケル', + '鏨': 'コウグノタガネ', + '鏥': 'シュウ,カネヘンニヤド', + '鏤': 'ルキンノル,チリバメル', + '鏡': 'カガミ,ソウガンキョウ ノ キョウ', + '㍾': 'メイジ', + '㍽': 'タイショウ', + '㍼': 'ショウワ', + '㍻': 'ヘイセイ', + '㍍': 'カナメートル', + '㍊': 'カナミリバール', + '㍉': 'カナミリ', + '㍗': 'カナワット', + '㍑': 'カナリットル', + '尚': 'オショウサン ノ ショウ', + '尖': 'トガル,センエイ ノ セン', + '尓': 'ジ,アミダブツノミノツクリ', + '少': 'オオイスクナイ ノ ショウ,ショウ', + '導': 'ユウドウ ノ ドウ,ミチビク', + '小': 'ダイショウ ノ ショウ,チイサイ', + '對': 'ハンタイノタイノキュウジ', + '尊': 'ソンケイスル ノ ソン,トウトブ', + '尋': 'ジンモンスル ノ ジン,タズネル', + '專': 'センモンノセンノキュウジ', + '尉': 'リクグンタイイ ノ イ', + '将': 'ショウグン ノ ショウ', + '將': 'ショウグンノショウノキュウジ', + '射': 'ハンシャ ノ シャ', + '尅': 'ゲコクジョウノコクノイタイジ,コクフクスルノコクニスン', + '専': 'センモン ノ セン', + '封': 'フウトウ ノ フウ', + '尾': 'ビコウスル ノ ビ,オッポ ノ オ', + '尿': 'トウニョウビョウ ノ ニョウ', + '尼': 'アマデラ ノ アマ,ニ', + '尽': 'ジンリョクスル ノ ジン,ツクス', + '尺': 'シャクハチ ノ シャク', + '尻': 'シリゴミスル ノ シリ', + '尸': 'シ,ブシュノシカバネ', + '尹': 'イン,イセエビノイノツクリ', + '就': 'シュウショク ノ シュウ,ツク', + '尭': 'ギョウシュン ノ ギョウ', + '尨': 'ボウ,ムクイヌ', + '尤': 'セツゾクシ ノ モットモ', + '尢': 'オウ,ブシュノマゲアシ', + '尠': 'セン,ハナハダシイニスクナイ', + '8': 'ハチ', + '哲': 'テツガク ノ テツ', + '哽': 'コウ,クチヘンニサラシナノサラ', + '哺': 'ホニュウルイノホ', + '哦': 'ガ,クチヘンニガマンノガ', + '哥': 'ウタ,カ,カノウセイノカヲカサネル', + '哢': 'ロウ,クチヘンニホンロウスルノロウ', + '員': 'ガッキュウイイン ノ イン', + '哮': 'ホエル,ホウコウスルノコウ', + '哭': 'ドウコクスルノコク,ナク', + '哩': 'タンイ ノ マイル,クチヘン ニ サト', + '哨': 'ゼンショウセン ノ ショウ', + '哘': 'サソウ,クチヘンニリョコウノコウ', + '哇': 'アイ,クチヘンニツチフタツ', + '哄': 'コウ,クチヘンニキョウツウノキョウ', + '哂': 'シン,ワラウ,クチヘンニニシヒガシノニシ', + '品': 'シナモノ ノ シナ,ヒン', + '哀': 'キドアイラク ノ アイ,アワレム', + '哉': 'ゼンザイ ノ サイ,カナ', + '哈': 'ゴウ,クチヘンニゴウカクノゴウ', + '剱': + 'ケン,ツルギノイタイジ,ジョウヨウカンジノケンノツクリガヤイバノイタイジ', + '茜': 'アカネイロ ノ アカネ', + '茘': 'クダモノノレイシノレイ,クサカンムリニカタナガミッツ', + '茗': 'ミョウガノミョウ,クサカンムリニナマエノナ', + '茖': 'カク、クサカンムリニオノオノ', + 'む': 'ムシ ノ ム', + '茎': 'クキ,チカケイ ノ ケイ', + 'め': 'メガネ ノ メ', + '茉': 'マツ、クサカンムリニネンマツノマツ', + 'ゆ': 'ユカタ ノ ユ', + '茅': 'カヤブキ ノ カヤ', + '茄': 'クサカンムリ ニ クワエル ノ カ,ナス', + '范': 'ハン、クサカンムリニカワガハンランスルノハン', + '茂': 'ハンモ ノ モ,シゲル', + '剴': 'ガイ,ヨロイノツクリニリットウ', + '茹': 'ジョ,ユデル,クサカンムリニトツジョノジョ', + '茸': 'マツタケ ノ タケ,キノコ', + '茶': 'チャイロ ノ チャ', + '茵': 'イン、クサカンムリニインガオウホウノイン', + '茴': 'ウイキョウノウイ、クサカンムリニカイスウケンノカイ', + '茲': 'シ、クサカンムリニイトガシラフタツ', + '茱': 'シュ,クサカンムリニシュイロノシュ', + '茯': 'ブクリョウノブク,クサカンムリニキフクニトムノフク', + '茫': 'ボウゼンジシツノボウ,クサカンムリニサンズイニボウメイスルノボウ', + '茨': 'イバラキケン ノ イバラ', + '茣': 'ゴザノゴ,クサカンムリニゴフクヤノゴノキュウジケイ', + 'ゎ': 'チイサイ ワカメ ノ ワ', + '剿': 'ハチノスノスニリットウ', + '剣': 'ケンドウ ノ ケン,ツルギ', + '矼': 'コウ,イシヘンニズガコウサクノコウ', + '紀': 'キゲンゼン ノ キ', + '紂': 'インノチュウオウノチュウ,イトヘンニスンポウノスン', + '約': 'ヤクソク ノ ヤク', + '紅': 'コウチャ ノ コウ,ベニ', + '紆': 'ウヨキョクセツノウ', + '紊': 'ブン,フウキビンランノビン', + '紋': 'モンショウ ノ モン', + '納': 'ノウゼイ ノ ノウ,オサメル', + '紐': 'コシヒモ ノ ヒモ', + '純': 'ジュンスイ ノ ジュン', + '紕': 'ヒ,イトヘンニヒカクスルノヒ', + '紗': 'オリモノ ノ シャ,イトヘン ニ スクナイ', + '紘': 'ハッコウイチウ ノ コウ', + '紙': 'ガヨウシ ノ シ,カミ', + '級': 'サイコウキュウ ノ キュウ', + '紛': 'フンシツスル ノ フン,マギレル', + '紜': 'ウン,イトヘンニデンセツノデンノツクリ', + '素': 'ソシツ ノ ソ', + '紡': 'ボウセキ ノ ボウ,ツムグ', + '索': 'サクイン ノ サク', + '紫': 'シガイセン ノ シ,ムラサキ', + '紬': 'ツムギ,イトヘン ニ リユウ ノ ユウ', + '紮': 'ケッサツノサツ,ナフダノフダノシタニイト', + '累': 'ルイセキスル ノ ルイ', + '細': 'ホソイフトイ ノ ホソイ,サイ', + '紲': 'セツ,イトヘンニセカイノセ', + '紳': 'シンシテキナ ノ シン', + '紵': 'チョ,イトヘンニチョキンノチョノツクリ', + '紹': 'ジコショウカイ ノ ショウ', + '紺': 'コンイロ ノ コン', + '紿': 'タイ,イトヘンニダイドコロノダイ', + '樌': 'カン,キヘンニイッカンスルノカン', + '樋': 'ヒグチイチヨウ ノ ヒ,トイ', + '樊': 'トリカゴノイミノハンロウノハン', + '樅': 'モミノキノモキ', + '樂': 'オンガクノガク,タノシイノキュウジ', + '樟': 'ショウノウ ノ ショウ,クス', + '樞': 'チュウスウノスウノキュウジ', + '標': 'モクヒョウ ノ ヒョウ', + '樛': 'キュウ,キヘンニニカワノツクリ', + '樔': 'ソウ,キヘンニハチノスノス', + '樗': 'ショクブツ ノ オウチ,チョ', + '樓': 'マテンロウノロウノキュウジ', + '剔': 'テキシュツスルノテキ,ボウエキノエキ,ヤサシイニリットウ', + '樮': 'ホクソ,キヘンニニシノシタニカヨウビノカ', + '権': 'ケンリ ノ ケン', + '樫': 'カシノキ ノ カシ', + '横': 'タテヨコ ノ ヨコ,オウ', + '剖': 'カイボウスル ノ ボウ', + '模': 'モケイ ノ モ', + '樣': 'カミサマノサマ,ヨウノキュウジ', + '樢': 'チョウ,キヘンニヤキトリノトリ', + '樽': 'タルザケ ノ タル', + '樹': 'ジュモク ノ ジュ', + '樸': 'ボク,キヘンニイチニンショウノボクノツクリ', + '樺': 'シラカバ ノ カバ', + 'y': 'ワイ ヤング', + '樶': 'サイ,キヘンニサイダイサイショウノサイ', + '剛': 'シツジツゴウケン ノ ゴウ', + '站': 'ヘイタンセンノタン', + '竚': 'チョ,タツヘンニウカンムリニイッチョウメノチョウ', + '竝': 'ナラブノキュウジ', + '竜': 'キョウリュウ ノ リュウ,タツ', + '竟': 'ヒッキョウノキョウ', + '竓': 'リョウノタンイノミリリットル', + '竒': 'キミョウナノキノイタイジ', + '竕': 'リョウノタンイノデシリットル', + '竈': 'カマド', + '立': 'ドクリツ ノ リツ,タツ', + '竊': 'セットウハンノセツノキュウジ', + '竍': 'リョウノタンイノデカリットル', + '竏': 'リョウノタンイノキロリットル', + '竃': 'カマド', + '剞': 'キ,キミョウナノキニリットウ', + '竅': 'キョウ,アナカンムリニシゲキノゲキノツクリ', + '竄': 'カイザンスルノザン,アナカンムリニネズミ', + '竇': 'トウ,アナカンムリニハンバイノバイノキュウジ', + '竹': 'タケ,ショウチクバイ ノ チク', + '竸': 'キョウソウスルノキョウ,キソウノイタイジ', + '竺': 'テンジク ノ ジク', + '竿': 'サオダケ ノ サオ,カン', + '竰': 'リョウノタンイノセンチリットル', + '剃': 'ソル,テイハツ ノ テイ', + '競': 'キョウソウスル ノ キョウ,キソウ', + '竪': 'タテゴト ノ タテ', + '竭': 'ケツ,タツヘンニカッショクノカツノツクリ', + '端': 'タンマツ ノ タン,ハシ', + '竡': 'リョウノタンイノヘクトリットル', + '章': 'ブンショウヲヨム ノ ショウ', + '竣': 'シュンコウシキ ノ シュン', + '竢': 'シ,タツヘンニアイサツノアイノツクリ', + '童': 'グリムドウワ ノ ドウ', + '竦': 'スクム,ショウ', + '慧': 'ケイガン ノ ケイ,サトイ', + '慥': 'ソウ,リッシンベンニカイゾウスルノゾウ', + '慢': 'ジマンスル ノ マン', + '慣': 'シュウカン ノ カン,ナレル', + '慮': 'エンリョスル ノ リョ', + '慯': 'ショウ,リッシンベンニキリキズノキズ', + '慫': 'ショウ,フクジュウスルノジュウノキュウジノシタニココロ', + '慨': 'カンガイムリョウ ノ ガイ', + '慶': 'ケイチョウキュウカ ノ ケイ,ヨロコブ', + '慷': 'ヒフンコウガイノコウ,リッシンベンニイエヤスノヤス', + '慴': 'ショウ,リッシンベンニレンシュウスルノシュウ,ナラウ', + '慵': 'ヨウ,リッシンベンニボンヨウナノヨウ', + '慳': 'ケン,リッシンベンニケンジツナノケン', + '慰': 'イシャリョウ ノ イ,ナグサメル', + '慱': 'タン,リッシンベンニセンモンノセンノキュウジ', + '慾': 'ヨクボウ ノ ヨク,シタゴコロアリ', + '剋': 'ゲコクジョウノコク,コクフクスルノコクニリットウ', + '風': 'カゼ,タイフウ ノ フウ', + '慇': 'インギンナノイン', + '慄': 'センリツスルノリツ', + '削': 'サクゲンスル ノ サク,ケズル', + '慂': 'ヨウ,コワクダニノワクノシタニココロ', + '颯': 'サッソウトシタノサツ', + '慎': 'シンチョウナ ノ シン,ツツシム', + 'ゾ': 'ゾウキン ノ ゾ', + '慌': 'アワテル,キョウコウ ノ コウ', + '慍': 'ウン,リッシンベンニオンセンノオンノキュウジタイノツクリ', + '慊': 'ケン,リッシンベンニカネル', + '態': 'タイド ノ タイ', + '慈': 'ジヒブカイ ノ ジ,イツクシム', + 'タ': 'タバコ ノ タ', + '慕': 'ボジョウ ノ ボ,シタウ', + '慓': 'ヒョウ,リッシンベンニトウヒョウスルノヒョウ', + '慟': 'ドウコクスルノドウ', + '慝': 'トク,トクメイノトクノシタニココロ', + '慚': 'ザンキニタエナイノザン,リッシンベン', + '慘': 'ザンパイスルノザン,ミジメノキュウジ', + '慙': 'ザンキニタエナイノザン,シタゴコロ', + '嫌': 'キラウ,ケンオ ノ ケン', + '嫋': 'ジョウ,タオヤカ', + '嫉': 'シットスル ノ シツ,ソネム', + '嫂': 'ソウ,アニヨメ', + 'Å': 'オングストローム', + '嫗': 'オウ,オンナヘンニクベツノクノキュウジ', + '嫖': 'ヒョウ,オンナヘンニトウヒョウノヒョウ', + '嫐': 'ドウ,ナヤマシイ,オンナ,オトコ,オンナ', + '嫩': 'ドン,オンナヘンニセイリスルノセイノウエガワ', + '嫦': 'ジョウ,オンナヘンニヒジョウグチノジョウ', + '嫣': 'エン,オンナヘンニシュウエンノチノエン', + '嫡': 'チャクナン ノ チャク', + '№': 'ナンバー', + '嫻': 'カン,オンナヘンニモンガマエニモクヨウビノモク', + '嫺': 'カン,オンナヘンニモンガマエニツキ', + '㏄': 'シーシー', + '㏍': 'ケーケー', + '厠': 'カワヤ,ガンダレニホウソクノソク', + '厥': 'ユウボクミンゾクノトッケツノケツ', + '厦': 'カ,ガンダレニナツ', + '厨': 'チュウボウ ノ チュウ,クリヤ', + '厩': 'キュウシャ ノ キュウ,ウマヤ', + '厭': 'エンセイカン ノ エン,イトウ', + '厮': 'シ,ガンダレニシカイノケンイノシ', + '厰': 'カイグンコウショウノショウノイタイジ,ガンダレ', + '♯': 'シャープ', + '♭': 'フラット', + '♪': 'オンプ', + '厶': 'シ,ワタクシ,カタカナノム', + '去': 'キョネン ノ キョ,サル', + '厂': 'カン,ブシュノガンダレ', + '厄': 'ヤクドシ ノ ヤク', + '厖': 'ボウダイナノボウ,ガンダレニムクイヌ', + '厘': 'クブクリン ノ リン', + '厚': 'アツガミ ノ アツ', + '♂': 'オス', + '♀': 'メス', + '原': 'ゲンイン ノ ゲン,ハラ', + '俺': 'オレサマ ノ オレ', + '%': 'パーセント', + '俶': 'シュク,ニンベンニシュクジョノシュクノツクリ', + '俵': 'ドヒョウ ノ ヒョウ,タワラ', + '俯': 'ウツムク,フカンスルノフ', + '行': 'リョコウ ノ コウ,イク', + '衍': 'フエンスルノエン', + '血': 'ケツエキ ノ ケツ,チ', + '衂': 'ジク,チヘンニヤイバノイタイジ', + '衄': 'ジク,チヘンニジュウニシノウシ', + '衆': 'シュウギイン ノ シュウ', + '衙': 'ヤクショヲオイミスルカンガノガ', + '衛': 'エイセイテキ ノ エイ', + '衝': 'ショウトツスル ノ ショウ', + '衞': 'エイセイテキノエイノキュウジ', + '衒': 'キヲテラウノテラウ,ゲン', + '術': 'ゲイジュツ ノ ジュツ', + '街': 'ガイロジュ ノ ガイ', + '表': 'ウラオモテ ノ オモテ,ヒョウ', + '衫': 'サン,コロモヘンニサンヅクリ', + '衡': 'ヘイコウカンカク ノ コウ', + '衢': 'チマタヲイミスルガイクノク', + '衣': 'イフク ノ イ,コロモ', + '衽': 'ジン、コロモヘンニジンシンノランノジン', + '衾': 'ドウキンスルノキン', + '衿': 'エリ,コロモヘン ニ イマ', + '衰': 'スイジャクスル ノ スイ,オトロエル', + '衲': 'ノウ、コロモヘンニコクナイノナイ', + '衵': 'ジツ、コロモヘンニニチヨウビノニチ', + '衷': 'ワヨウセッチュウ ノ チュウ', + '保': 'ホケンシツ ノ ホ,タモツ', + '俐': 'レイリノリ,ニンベンニケンリノリ', + '玲': 'レイロウナ ノ レイ,オウヘン ニ メイレイ ノ レイ', + '玳': 'ドウブツノタイマイノタイ,オウヘンニダイヒョウノダイ', + '玻': 'ハ,オウヘンニケガワノカワ', + '玩': 'ガング ノ ガン,モテアソブ', + '俊': 'シュンビンサ ノ シュン', + '玖': 'オウヘン ニ ヒサシイ ノ ク', + '率': 'ヒリツ ノ リツ,ヒキイル', + '玄': 'ゲンマイ ノ ゲン', + '王': 'オウサマ ノ オウ', + '玉': 'ミズタマ ノ タマ,ギョク', + '鍠': 'コウ、カネヘンニコウタイシノコウ', + '鍬': 'ノウグ ノ クワ,カネヘン ニ アキ', + '鍮': 'キンゾクノシンチュウノチュウ', + '鍵': 'カギ,ケンバン ノ ケン', + '鍼': 'シン,ハリキュウノハリ', + '鍾': 'ショウニュウドウ ノ ショウ', + '鍄': 'リョウ、カネヘンニトウキョウノキョウ', + '鍋': 'ナベモノ ノ ナベ', + '鍍': 'トキン ノ ト,カネヘン ニ オンドケイ ノ ド', + '鍔': 'カタナ ノ ツバ,ガク', + '鍖': 'チン、カネヘンニハナハダシイ', + '鍛': 'キタエル,タンレン ノ タン', + '鍜': 'カ,カネヘンニヒマツブシノヒマノツクリ', + '綉': 'シシュウスルノシュウノイタイジ', + '綏': 'スイゼイテンノウノスイ', + '続': 'レンゾク ノ ゾク,ツヅク', + '綛': 'カスリ,イトヘンニシノビ', + '継': 'ケイゾクスル ノ ケイ,ツグ', + '綟': 'レイ,イトヘンニモドル', + '綜': 'サクソウスル ノ ソウ,イトヘン ニ シュウキョウ ノ シュウ', + '經': 'ケイケンスルノケイノキュウジ', + '綫': 'シンカンセンノセンノイタイジ', + '綮': 'ケイ,ケイハツノケイノクチノカワリニイト', + '綯': 'ナワヲナウノナウ', + '綬': 'シジュホウショウ ノ ジュ,イトヘン ニ ウケル', + '維': 'イジスル ノ イ', + '綢': 'チュウ,イトヘンニシュウヘンノシュウノキュウジタイ', + '綣': 'ケン,イトヘンニノリマキノマキノキュウジ', + '綺': 'キレイナノキ,イトヘンニキミョウナノキ', + '綻': 'ハタンスル ノ タン,ホコロビル', + '綸': 'リンゲンアセノゴトシノリン', + '綾': 'アヤオリ ノ アヤ', + '綿': 'ワタ,モメン ノ メン', + '綽': 'ヨユウシャクシャクノシャク', + '網': 'モウマク ノ モウ,アミ', + '綰': 'ワン,イトヘンニケイサツカンノカン', + '綱': 'ツナヒキ ノ ツナ,コウ', + '綴': 'ツヅル', + '綵': 'サイ,イトヘンニハクシュカッサイノサイノキュウジタイ', + '殖': 'ヨウショクスル ノ ショク,フヤス', + '殕': 'ホウ,カバネヘンニバイリツノバイノツクリ', + '殞': 'イン,カバネヘンニガッキュウイインノイン', + '殘': 'ザンネンノザン,ノコルノキュウジ', + '殆': 'ホトンド', + '殄': 'テン,カバネヘンニシンサツスルノシンノツクリ', + '殃': 'オウ,カバネヘンニチュウオウノオウ', + '殀': 'ヨウ,カバネヘンニヨウカイヘンゲノヨウノツクリ', + '殍': 'ヒョウ,カバネヘンニツメノシタニコドモノコ', + '残': 'ザンネン ノ ザン,ノコル', + '殊': 'トクシュ ノ シュ,コトニ', + '殉': 'ジュンキョウシャ ノ ジュン', + '殷': 'チュウゴクノオウチョウノイン', + '段': 'シュダン ノ ダン', + '殴': 'オウダスル ノ オウ,ナグル', + '殳': 'シュ,ブシュノルマタ', + '殲': 'テキヲセンメツスルノセン', + '殱': 'テキヲセンメツスルノセンノイタイジ', + 'f': 'エフ フレンド', + '殿': 'トノサマ ノ トノ', + '殼': 'カイガラノカラ,カクノキュウジ', + '殻': 'カイガラ ノ ガラ,カク', + '殺': 'サツジン ノ サツ,コロス', + '会': 'カイシャ ノ カイ,アウ', + '殤': 'ショウ,カバネヘンニキリキズノツクリ', + '殯': 'ヒン,モガリ,カバネヘンニライヒンノヒン', + '殫': 'タン,カバネヘンニタンジュンノタンノキュウジ', + '殪': 'エイ,カバネヘンニケイヤクショニツカウスウジイチノキュウジ', + '餞': 'ハナムケ,センベツノセン', + '呻': 'シンギンスルノシン,ウメク', + '命': 'ウンメイ ノ メイ,イノチ', + '呼': 'コキュウスル ノ コ,ヨブ', + '呱': 'ココノコエヲアゲルノコ', + '呰': 'シ,ヒガンシガンノシノシタニクチ', + '味': 'イミ ノ ミ,アジ', + '呵': 'タンカヲキルノカ,クチヘンニカノウセイノカ', + '呷': 'コウ,サケヲアオルノアオル,クチヘンニコウオツノコウ', + '呶': 'ド,クチヘンニヤッコ', + '周': 'シュウヘン ノ シュウ,マワリ', + '呪': 'ノロウ,ジュモン ノ ジュ', + '呟': 'ツブヤク', + '呑': 'ヘイドンスル ノ ドン,ノム', + '呉': 'ゴフクヤ ノ ゴ,クレ', + '呈': 'ゾウテイスル ノ テイ', + '告': 'コウコク ノ コク,ツゲル', + '呎': 'ナガサノタンイノフィート', + '呀': 'カ,クチヘンニキバ', + '呂': 'オフロ ノ ロ', + '呆': 'アキレル,ボウゼントスル ノ ボウ', + '<': 'ショウナリ', + '婚': 'ケッコンスル ノ コン', + '婁': 'ロウカク ノ ロウ ノ キュウジ ノ ツクリ', + '婀': 'アダッポイノア', + '婆': 'ロウバシン ノ バ', + '婉': 'エンキョクヒョウゲンノエン', + '婿': 'ハナムコ ノ ムコ', + '婢': 'ヒ,オンナヘンニヒクツナノヒ', + '婦': 'フウフ ノ フ', + '婪': 'ドンランナノラン,ハヤシノシタニオンナ', + '婬': 'イン,オンナヘンニインランノインノツクリ', + '莠': 'ユウ,クサカンムリニヒイデル', + '莢': 'キョウ,マメノサヤ', + '鷦': 'ショウ,コゲルノミギニトリ', + '莨': 'ロウ、タバコ、クサカンムリニカイリョウスルノリョウ', + '莫': 'バクダイナ ノ バク', + '莪': 'ガ,クサカンムリニガマンノガ', + '莱': 'ホウライサン ノ ライ', + '莵': 'ト,クサカンムリニウサギノイタイジ', + '莽': 'ソウモウノシンノモウ', + '莅': 'リ,クサカンムリニタンイノイ', + '莇': 'ショ、クサカンムリニキュウジョスルノジョ', + '莉': 'リ、クサカンムリニリエキノリ', + '莊': 'ベッソウチノソウノイタイジ', + '莎': 'サ、クサカンムリニゴブサタノサ', + '鷯': 'リョウ,ドウリョウノリョウノツクリノミギニトリ', + '莓': 'クダモノノイチゴ、クサカンムリニマイニチノマイ', + '莖': 'チカケイノケイノキュウジ', + '莚': 'エン,ムシロ,クサカンムリニエンキスルノエン', + '莟': 'カン,クサカンムリニフクメル', + '莞': 'クサカンムリ ニ カンリョウスル ノ カン', + '鷲': 'トリ ノ ワシ', + '鷽': 'ガク,ガクカンムリノキュウジタイノシタニトリ', + '鷺': 'シラサギ ノ サギ', + '鷆': 'テン,マゴコロノマノキュウジノミギニトリ', + '餐': 'バンサン ノ サン', + '畢': 'ヒッキョウ ノ ヒツ,オワル', + '畠': 'ハタケ,シロ ノ シタニ タ', + '畧': 'リャクゴノリャクノイタイジ', + '畦': 'アゼミチ ノ アゼ,タ ニ ツチ フタツ', + '略': 'リャクゴ ノ リャク', + '畤': 'ジ,タヘンニテラ', + '畫': 'ガヨウシノガノキュウジ', + '番': 'バンゴウ ノ バン', + '畩': 'ケサ,タヘンニコロモガエノコロモ', + '畭': 'ヨ,タヘンニアマリ', + '畳': 'タタミ,ヨジョウハン ノ ジョウ', + '異': 'イコク ノ イ,コトナル', + '畷': 'シジョウナワテシ ノ ナワテ', + '當': 'トウバンノトウ,アタルノキュウジ', + '畴': 'ハン,タヘンニコトブキ', + '畸': 'キ,タヘンニキミョウナノキ', + '畿': 'キンキチホウ ノ キ', + '畆': 'メンセキノタンイノセ,ウネノイタイジ', + '畄': 'リュウガクノリュウノイタイジ', + '畋': 'テン,スイデンノデンニノブン', + '畊': 'コウ,タガヤスノイタイジ', + '畉': 'フ,タガヤス,タヘンニオット', + '畏': 'イフスル ノ イ,カシコマル', + '畍': 'セカイノカイノイタイジ', + '界': 'セカイ ノ カイ', + '畑': 'タハタ ノ ハタ,ハタケ', + '畔': 'コハン ノ ハン,ホトリ', + '畛': 'シン,アゼ,タヘンニシンサツスルノシンノツクリ', + '畚': 'ホン,オマイリノマイノサンズクリノカワリニスイデンノデン', + '留': 'リュウガク ノ リュウ', + '畝': 'ハタケ ノ ウネ,メンセキ ノ タンイ ノ セ', + '畜': 'カチク ノ チク', + '頒': 'ハンプスル ノ ハン', + '頓': 'セイトンスル ノ トン', + '預': 'ヨキン ノ ヨ,アズケル', + '頑': 'ガンバル ノ ガン', + '括': 'ソウカツ ノ カツ,ククル', + '拭': 'フッショク ノ ショク,ヌグウ', + '拮': 'キッコウスルノキツ', + '拯': 'ジョウ,テヘンニダイジンヲイミスルジョウショウノジョウ', + '拠': 'キョテン ノ キョ', + '拡': 'カクダイ ノ カク', + '領': 'ダイトウリョウ ノ リョウ', + '昊': 'コウ,ニチヨウビノニチノシタニテンキヨホウノテン', + '頂': 'チョウテン ノ チョウ,イタダキ', + '頃': 'コロアイ ノ コロ', + '頁': 'ページ', + '順': 'ジュンバン ノ ジュン', + '拾': 'オカネヲ ヒロウ ノ ヒロウ', + '拿': 'ダホスルノダ,ゴウカクノゴウノシタニテ', + '拱': 'コマヌク,キョウ,テヘンノキョウツウノキョウ', + '須': 'ヒッス ノ ス,スベカラク', + '拳': 'ケンジュウ ノ ケン,コブシ', + '拵': 'コシラエル,ソン', + '拶': 'アイサツ ノ サツ', + '拷': 'ゴウモンスル ノ ゴウ', + '拈': 'ネン,テヘンニドクセンスルノセン', + '拉': 'ラチスルノラ', + '拊': 'フ,テヘンニフロクノフ', + '拌': 'カクハンスルノハン,カキマゼル', + '拍': 'ハクシュスル ノ ハク', + '頴': 'スグレルヲ イミスル エイ,ホサキ,シメス', + '拏': 'ダホスルノダ,ヤッコノシタニテ', + '頻': 'ヒンパンナ ノ ヒン', + '拂': 'カネヲハラウノハラウノキュウジ', + '担': 'タンニン ノ タン', + '拆': 'タク,テヘンニハイセキウンドウノセキ', + '拇': 'ボインヲオスノボ', + '拘': 'コウソクジカン ノ コウ', + '拙': 'チセツ ノ セツ,ツタナイ', + '招': 'マネク,ショウタイスル ノ ショウ', + '拜': 'オガムノキュウジ', + '拝': 'オガム,ハイケイ ノ ハイ', + '頤': 'オトガイ', + '拐': 'ユウカイジケン ノ カイ', + '拑': 'カン,テヘンニアマイ', + '拒': 'キョヒスル ノ キョ,コバム', + '拓': 'カイタクスル ノ タク', + '拔': 'バツグンノバツ,ヌケルノキュウジ', + '頬': 'ホオヅエ ノ ホオ', + '拗': 'ヨウオンノヨウ,テヘンニオオサナイ', + '爵': 'ハクシャク ノ シャク', + '父': 'フボ ノ フ,チチ', + '爰': 'オウエンスルノエンノキュウジノツクリ', + '爲': 'コウイノイ,タメノキュウジ', + '爼': 'マナイタ,ソジョウノソノイタイジ', + '爽': 'サワヤカ,ソウカイナ ノ ソウ', + '爾': 'ソツジナガラ ノ ジ,ナンジ', + '爿': 'ショウヘン,ショウグンノショウノキュウジノヘン', + '爺': 'コウコウヤ ノ ヤ,ジイ', + '爻': 'コウ,ハンバクスルノバクノツクリ', + '爬': 'ハチュウルイノハ', + '爭': 'アラソウノキュウジ', + '爨': 'ハンゴウスイサンノサン', + '爪': 'ツメキリ ノ ツメ', + '爐': 'ダンロノロノキュウジ', + '爛': 'テンシンランマンノラン', + '爆': 'バクハツスル ノ バク', + '爍': 'シャク,ヒヘンニタノシイノキュウジ', + '況': 'ジッキョウチュウケイ ノ キョウ', + '部': 'ブチョウ ノ ブ', + '泄': 'ハイセツブツノセツ', + '泅': 'シュウ,サンズイニシュウジンフクノシュウ', + '郭': 'リンカク ノ カク,クルワ', + '泉': 'オンセン ノ セン,イズミ', + '泊': 'シュクハクスル ノ ハク,トマル', + '泌': 'ヒニョウキ ノ ヒ', + '郤': 'ケキ,タニノミギニオオザト', + '泓': 'オウ,サンズイニコウボウタイシノコウ', + '法': 'ホウリツ ノ ホウ', + '都': 'トカイ ノ ト,ミヤコ', + '泗': 'シ,サンズイニカンスウジノヨン', + '泙': 'ヘイ,サンズイニヘイワノヘイ', + '泛': 'ハン,サンズイニビンボウノボウ', + '郷': 'ウマレコキョウ ノ キョウ', + '泝': 'ソ,サンズイニハイセキウンドウノセキ', + '郵': 'ユウビン ノ ユウ', + '泡': 'アワ,スイホウ ノ ホウ', + '波': 'ツナミ ノ ナミ,ハ', + '泣': 'ナク,ゴウキュウスル ノ キュウ', + '泥': 'デイスイ ノ デイ,ドロ', + '注': 'チュウモクスル ノ チュウ,ソソグ', + '泪': 'ナミダノイタイジ,サンズイニモクテキノモク', + '泯': 'ビン,サンズイニコクミンノミン', + '泰': 'アンタイ ノ タイ', + '泱': 'オウ,サンズイニチュウオウノオウ', + '泳': 'スイエイ ノ エイ,オヨグ', + 'ほ': 'ホケン ノ ホ', + 'ぺ': 'ペット ノ ペ', + 'べ': 'ベルト ノ ベ', + 'へ': 'ヘイワ ノ ヘ', + 'み': 'ミカン ノ ミ', + 'ま': 'マッチ ノ マ', + 'ぽ': 'ポスト ノ ポ', + 'ぼ': 'ボタン ノ ボ', + 'び': 'ビール ノ ビ', + 'ひ': 'ヒカリ ノ ヒ', + 'ぱ': 'パジャマ ノ パ', + 'ば': 'バナナ ノ バ', + 'ぷ': 'プリント ノ プ', + 'ぶ': 'ブランコ ノ ブ', + 'ふ': 'フトン ノ フ', + 'ぴ': 'ピアノ ノ ピ', + 'に': 'ニホン ノ ニ', + 'な': 'ナマエ ノ ナ', + 'ど': 'ドレミ ノ ド', + 'と': 'トウキョウ ノ ト', + 'は': 'ハガキ ノ ハ', + 'の': 'ノハラ ノ ノ', + 'ね': 'ネズミ ノ ネ', + 'ぬ': 'ヌリエ ノ ヌ', + 'っ': 'チイサイ ツバメ ノ ツ', + 'ぢ': 'ハナヂ ノ ヂ', + 'ち': 'チキュウ ノ チ', + 'だ': 'ダルマ ノ ダ', + 'で': 'デンワ ノ デ', + 'て': 'テガミ ノ テ', + 'づ': 'ツヅミ ノ ヅ', + 'つ': 'ツバメ ツ', + 'せ': 'セカイ ノ セ', + 'ず': 'ズボン ノ ズ', + 'す': 'スズメ ノ ス', + 'じ': 'ジカン ノ ジ', + 'た': 'タバコ ノ タ', + 'ぞ': 'ゾウキン ノ ゾ', + 'そ': 'ソロバン ノ ソ', + 'ぜ': 'ゼンブ ノ ゼ', + 'こ': 'コドモ ノ コ', + 'げ': 'ゲーム ノ ゲ', + 'け': 'ケシキ ノ ケ', + 'ぐ': 'グランド ノ グ', + 'し': 'シンブン ノ シ', + 'ざ': 'ザブトン ノ ザ', + 'さ': 'サクラ ノ サ', + 'ご': 'ゴリラ ノ ゴ', + 'か': 'カゾク ノ カ', + 'お': 'オオサカ ノ オ', + 'ぉ': 'チイサイ オオサカ ノ オ', + 'え': 'エイゴ ノ エ', + 'く': 'クスリ ノ ク', + 'ぎ': 'ギンコウ ノ ギ', + 'き': 'キッテ ノ キ', + 'が': 'ガッコウ ノ ガ', + 'ぃ': 'チイサイ イチゴ ノ イ', + 'あ': 'アサヒ ノ ア', + 'ぁ': 'チイサイ アサヒ ノ ア', + 'ぇ': 'チイサイ エイゴ ノ エ', + 'う': 'ウサギ ノ ウ', + 'ぅ': 'チイサイ ウサギ ノ ウ', + 'い': 'イチゴ ノ イ', + '匪': 'ヒゾク ノ ヒ,ハコガマエ ニ ヒジョウグチ ノ ヒ', + '匯': 'カイ,ハコガマエニサンズイトフルトリ', + '匣': 'コウ,ハコガマエニコウオツノコウ', + '匠': 'キョショウ ノ ショウ,タクミ', + '匡': 'タダス,キョウ,ハコガマエ ニ オウ', + '区': 'クベツ ノ ク', + '医': 'オイシャサン ノ イ', + 'S': 'エス スポーツ', + '匹': 'イッピキニヒキ ノ ヒキ', + '匿': 'トクメイ ノ トク,カクス', + '匳': 'ハコガマエニシケンヲウケルノケンノキュウジノツクリ', + '匱': 'キ,ハコガマエニキチョウヒンノキ', + '匈': 'ユウボクミンゾクノキョウドノキョウ', + '匏': 'ホウ,ヒサゴ,ハカマノツクリニ,ヒョウガフルノヒョウノシタガワ', + '匍': 'ホフクゼンシンノホ', + '匂': 'イイニオイ ノ ニオイ', + '匁': 'オモサ ノ タンイ ノ モンメ', + '匆': 'ソウ,ネギカラクサカンムリトココロヲトッタカタチ', + '包': 'ホウタイ ノ ホウ,ツツム', + '匚': 'ホウ,ブシュノハコガマエ', + '匙': 'サジカゲン ノ サジ', + '匝': 'ソウ,ハコガマエ ニ ハバ', + '匐': 'ホフクゼンシンノフク', + '化': 'カセキ ノ カ,バケル', + '北': 'キタミナミ ノ キタ,ホク', + '匕': 'サジヲイミスルヒ', + '餉': 'ショウ,ショクヘンニムカウ', + '餃': 'ギョーザノイチモジメ', + '裔': 'マツエイノエイ', + '裕': 'ヨユウ ノ ユウ', + '裘': 'キュウ、カワゴロモ', + '裙': 'クン、コロモヘンニショクンノクン', + '裟': 'オボウサン ノ ケサ ノ サ', + '補': 'ホジョ ノ ホ,オギナウ', + '裝': 'フクソウノソウノキュウジ', + '裂': 'ブンレツスル ノ レツ,サケル', + '裃': 'レイフクノカミシモ', + '裁': 'サイバン ノ サイ,サバク', + '裄': 'ユキタケノユキ、コロモヘンニリョコウキノコウ', + '装': 'フクソウ ノ ソウ', + '鋳': 'チュウゾウスル ノ チュウ,イル', + '裏': 'ウラオモテ ノ ウラ', + '裲': 'リョウ、コロモヘンニリョウテノリョウノキュウジ', + '裳': 'イショウ ノ ショウ,モスソ', + '裴': 'ハイ、ヒジョウグチノヒノシタニコロモ', + ')': 'トジカッコ', + '裸': 'ハダカ,ラタイ ノ ラ', + '裹': 'カ、コロモノアイダニコウカテキノカ', + '裾': 'スソノ ノ スソ', + '餬': 'コ,カユ,ショクヘンニクロコショウノコ', + '裼': 'セキ、コロモヘンニボウエキフウノエキ', + '製': 'セイゾウスル ノ セイ', + '裡': 'キンリ ノ リ,コロモヘン ニ サト', + '裨': 'ヒ、コロモヘンニヒクツナノヒ', + '耨': 'ドウ,スキヘンニブジョクスルノジョク', + '耡': 'ジョ,スキヘンニキュウジョスルノジョ', + '耻': 'ハジヲカクノハジノイタイジ', + '耿': 'コウ,ミミヘンニカヨウビノカ', + '耽': 'タンデキスル ノ タン,フケル', + '耳': 'ミミ,ジビカ ノ ジ', + '耶': 'ウヤムヤ ノ ヤ', + '耋': 'テツ,ロウジンノロウノシタニダイシキュウノシ,', + '而': 'シコウシテ,ケイジジョウ ノ ジ', + '考': 'カンガエル,サンコウショ ノ コウ', + '老': 'ロウジン ノ ロウ', + '耀': 'エイヨウエイガ ノ ヨウ,カガヤク', + '耆': 'キ,ロウジンノロウノシタニマイニチノニチ', + '者': 'ガクシャ ノ シャ,モノ', + '耄': 'モウロクスルノモウ,ロウジンノロウノシタニケイトノケ', + '耙': 'ハ,スキヘンニトモエ', + '耘': 'コウウンキノウン,ブシュノスキヘンニウンヌンノウン', + '耜': 'シ,スキヘンニケイサツカンノカンノシタガワ', + '耒': 'ライ,ブシュノスキヘン', + '耐': 'ニンタイ ノ タイ,タエル', + '耗': 'ショウモウヒン ノ モウ', + '耕': 'タガヤス,ノウコウ ノ コウ', + '簍': 'ロウ,タケカンムリニロウカクノロウノキュウジノツクリ', + '簇': 'ソウ,ムラガル,タケカンムリニスイゾクカンノゾク', + '簀': 'スノコノス', + '簟': 'テン,タカムシロ,タケカンムリニニシノシタニハヤオキノハヤイ', + '簔': 'ミノノイタイジ,タケカンムリニオトロエルノヘンケイ', + '簗': 'サカナヲトルヤナ,タケカンムリニリョウザンパクノリョウ', + '簑': 'ミノノイタイジ,タケカンムリニオトロエル', + '簒': 'サンダツスルノサン,ウバウ', + '簓': 'ササラ', + '簪': 'カンザシ,シン', + '簫': 'ショウ,タケカンムリニゲンシュクナノシュクノキュウジ', + '簧': 'コウ,タケカンムリニキイロノキノキュウジ', + '簡': 'カンタンナ ノ カン', + '簣': 'キ,タケカンムリニキチョウヒンノキ', + '簽': 'セン,タケカンムリニシケンヲウケルノケンノキュウジノツクリ', + '簾': 'スダレ,レン', + '簿': 'メイボ ノ ボ', + '簸': 'ハ,タケカンムリ ニ ソノタ ノ ソニ カワ', + '簷': 'エン、タケカンムリニタンニンノタンノキュウジノツクリ', + '鉞': 'フエツノエツ、マサカリ', + '欝': 'ユウウツナ ノ ウツ', + '欟': 'カン,キヘンニカンキャクノカンノキュウジ', + '黄': 'キイロ ノ キ,オウ', + '欒': 'イッカダンランノラン', + '黏': 'ネバル,ネン,キビヘンニドクセンスルノセン', + '黎': 'レイメイキノレイ', + '黍': 'コクモツ ノ キビ,ショ', + '欖': 'カンランサンノラン,キヘンニハクランカイノランノキュウジ', + '黒': 'コクバン ノ コク,クロ', + '權': 'ケンリノケンノキュウジ', + '鉛': 'エンピツ ノ エン,ナマリ', + '黔': 'クロイ,ケン,クロイノミギニイマ', + '黛': 'マユズミ', + '黙': 'チンモク ノ モク,ダマル', + '默': 'チンモクスルノモク,ダマルノキュウジ', + '欅': 'ケヤキ,キヘンニセンキョケンノキョノキュウジ', + '欄': 'クウラン ノ ラン', + '黝': 'アオグロイ,ユウ,クロノミギニオサナイ', + '黜': 'シリゾケル,チュツ,クロノミギニデル', + '欹': 'キ,キミョウナノキニフカケツノケツ', + '欸': 'アイ,アイサツノアイノツクリニフカケツノケツ', + '欺': 'サギ ノ ギ,アザムク', + '欽': 'キンテイケンポウ ノ キン', + '黥': 'ゲイ,イレズミ,クロノミギニトウキョウノキョウ', + '款': 'エンシャッカン ノ カン', + '欲': 'ヨクボウ ノ ヨク,ホシイ', + '黯': 'クライ,アン,クロノミギニオンガクノオン', + '欷': 'キ,キボウノキニフカケツノケツ', + '黷': 'ケガス,トク,クロノミギニハンバイノバイノキュウジ', + '黶': 'ホクロ,エン', + '黴': 'カビ,バイキンノバイ', + '次': 'モクジ ノ ジ,ツギ', + '欠': 'ホケツ ノ ケツ,カケル', + '欣': 'キンキジャクヤク ノ キン,ヨロコブ', + '欧': 'オウベイ ノ オウ', + '黼': 'ヌイトリノモヨウヲイミスルフ', + '痣': 'アザ,ヤマイダレニココロザシ', + '痢': 'ゲリヲスル ノ リ', + '痩': 'ヤセル,ソウシン ノ ソウ', + '痴': 'グチ ノ チ', + '痰': 'タンガカラムノタン', + '痳': 'リン,ヤマイダレニハヤシ', + '痲': 'ヤマイダレノマヒスルノマ', + '痼': 'ジビョウヲイミスルコシツノコ', + '痿': 'イ,ヤマイダレニガッキュウイインノイ', + '痾': 'ア,ヤマイダレニアミダブツノア', + '痺': 'マヒスルノヒ,シビレル', + '病': 'ビョウキ ノ ビョウ,ヤマイ', + '症': 'カフンショウ ノ ショウ', + '痃': 'ケン,ヤマイダレニゲンマイノゲン', + '痂': 'カ,カサブタ,ヤマイダレニカソクドノカ', + '痍': 'ショウイグンジンノイ', + '痊': 'セン,ヤマイダレニゼンコクノゼン', + '痕': 'コンセキヲ ノコス ノ コン', + '痔': 'イボジ ノ ジ', + '痒': 'カッカソウヨウノヨウ,カユイ', + '痞': 'ヒ,ヤマイダレニヒテイスルノヒ', + '痙': 'イケイレンノケイ', + '痘': 'テンネントウ ノ トウ', + '痛': 'ズツウ ノ ツウ,イタイ', + '首': 'シュト ノ シュ,クビ', + '扱': 'アツカウ', + '扶': 'フヨウカゾク ノ フ', + '批': 'ヒハンスル ノ ヒ', + '找': 'カ,テヘンニホコヅクリ', + '承': 'ショウダクスル ノ ショウ', + '扼': 'セッシヤクワンノヤク', + '扣': 'コウ,テヘンニクチ', + '扠': 'サ,テヘンニヤシャノシャ', + '鉱': 'テッコウセキ ノ コウ', + '扨': 'サテ,テヘンニヤイバノイタイジ', + '扮': 'フンソウヲコラス ノ フン', + '馴': 'カイナラス ノ ナラス,ジュン', + '打': 'タゲキ ノ ダ,ウツ', + '払': 'カネヲハラウ ノ ハラウ', + '馼': 'ブン,ウマヘンニサクブンノブン', + '扛': 'コウ,テヘンニズガコウサクノコウ', + '托': 'タクハツ ノ タク', + 'j': 'ジェイ ジャパン', + '扞': 'カン,テヘンニホス', + '馥': 'フクイクタルノフク,カオリ', + '所': 'ジュウショ ノ ショ,トコロ', + '扁': 'ヘン,ヘンシュウスル,アムノツクリ', + '扇': 'センプウキ ノ セン,オウギ', + '馬': 'ウマ,バシャ ノ バ', + '手': 'テアシ ノ テ,シュ', + '扈': 'チョウリョウバッコノコ', + '扉': 'トビラ,モンピ ノ ヒ', + '扎': 'サツ,テヘンニレイギノレイノツクリ', + '才': 'サイノウ ノ サイ', + '鉦': 'ショウコ ノ ショウ,カネヘン ニ タダシイ', + '姚': 'ヨウ,オンナヘンニイッチョウエンノチョウ', + '姙': 'ニン,ニンシンスルノニンノイタイジ', + '′': 'フン', + '姜': 'ショウガノニモジメ,ヒツジノシタニオンナ', + '姓': 'セイメイハンダン ノ セイ', + '姑': 'コソク ノ コ,シュウトメ', + '姐': 'アネゴハダ ノ アネ', + '委': 'ガッキュウイイン ノ イ', + '始': 'カイシスル ノ シ,ハジメル', + '†': 'ダガー', + '姉': 'アネ,シマイ ノ シ', + '‥': 'テンテン', + '…': 'テンテンテン', + '姆': 'ボ,オンナヘンニハハ', + '姻': 'コンイン ノ イン', + '‐': 'ハイフン', + '姿': 'スガタ,シセイ ノ シ', + '’': 'トジシングル', + '‘': 'シングル', + '”': 'トジクォーテーション', + '姶': 'オンナヘン ニ ゴウカク ノ ゴウ', + '姫': 'オヒメサマ ノ ヒメ', + '姪': 'オイメイ ノ メイ', + '姨': 'イ,オンナヘンニソンノウジョウイノイ', + '釣': 'サカナツリ ノ ツリ', + '姦': 'カシマシイ,オンナミッツ ノ カン', + '姥': 'ウバザクラ ノ ウバ', + 'ヽ': 'クリカエシ', + 'ー': 'チョウオン', + 'ヾ': 'クリカエシダクテン', + '・': 'ナカテン', + 'ヵ': 'チイサイ カゾク ノ カ', + 'ヴ': 'ウサギ ノ ウニ ダクテン', + 'ヶ': 'チイサイ ケシキ ノ ケ', + 'ヱ': 'ムカシ ノ エ', + 'ヰ': 'ムカシ ノ イ', + 'ン': 'オシマイ ノ ン', + 'ヲ': 'ヲワリ ノ オ', + 'ロ': 'ロウカ ノ ロ', + 'レ': 'レモン ノ レ', + 'ワ': 'ワカメ ノ ワ', + 'ヮ': 'チイサイ ワカメ ノ ワ', + 'ラ': 'ラジオ ノ ラ', + 'ヨ': 'ヨット ノ ヨ', + 'ル': 'ルスバン ノ ル', + 'リ': 'リンゴ ノ リ', + 'ュ': 'チイサイ ユカタ ノ ユ', + 'ヤ': 'ヤカン ノ ヤ', + 'ョ': 'チイサイ ヨット ノ ヨ', + 'ユ': 'ユカタ ノ ユ', + 'メ': 'メガネ ノ メ', + 'ム': 'ムシ ノ ム', + 'ャ': 'チイサイ ヤカン ノ ヤ', + 'モ': 'モミジ ノ モ', + 'ポ': 'ポスト ノ ポ', + 'ボ': 'ボタン ノ ボ', + 'ミ': 'ミカン ノ ミ', + 'マ': 'マッチ ノ マ', + 'ベ': 'ベルト ノ ベ', + 'ヘ': 'ヘイワ ノ ヘ', + 'ホ': 'ホケン ノ ホ', + 'ペ': 'ペット ノ ペ', + 'フ': 'フトン ノ フ', + 'ピ': 'ピアノ ノ ピ', + 'プ': 'プリント ノ プ', + 'ブ': 'ブランコ ノ ブ', + 'パ': 'パジャマ ノ パ', + 'バ': 'バナナ ノ バ', + 'ビ': 'ビール ノ ビ', + 'ヒ': 'ヒカリ ノ ヒ', + 'ネ': 'ネズミ ノ ネ', + 'ヌ': 'ヌリエ ノ ヌ', + 'ハ': 'ハガキ ノ ハ', + 'ノ': 'ノハラ ノ ノ', + 'ド': 'ドレミ ノ ド', + 'ト': 'トウキョウ ノ ト', + 'ニ': 'ニホン ノ ニ', + 'ナ': 'ナマエ ノ ナ', + 'ヅ': 'ツヅミ ノ ヅ', + 'ツ': 'ツバメ ノ ツ', + 'デ': 'デンワ ノ デ', + 'テ': 'テガミ ノ テ', + 'チ': 'チキュウ ノ チ', + 'ダ': 'ダルマ ノ ダ', + 'ッ': 'チイサイ ツバメ ノ ツ', + 'ヂ': 'ハナヂ ノ ヂ', + '劬': 'ク,ハイクノクニチカラ', + '@': 'アットマーク', + '助': 'キュウジョ ノ ジョ,タスケル', + '努': 'ドリョク ノ ド', + '劫': 'ミライエイゴウ ノ ゴウ', + '加': 'ツイカ ノ カ,クワエル', + '劣': 'オトル,ユウレツ ノ レツ', + '劼': 'カツ,ダイキチノキチニチカラ', + '劾': 'ダンガイスル ノ ガイ', + '効': 'コウカテキ ノ コウ', + '労': 'ロウドウ ノ ロウ', + '劵': 'ケン,ジョウシャケンノケンノカタナノカワリニチカラ', + '励': 'ゲキレイスル ノ レイ,ハゲマス', + '劍': 'ケン,ツルギノキュウジ', + '劈': 'ヘキ,カベノツチノカワリニカタナ', + '劉': 'リュウホウ ノ リュウ', + '劇': 'ニンギョウゲキ ノ ゲキ', + '劃': 'ワカツ,カクゼン ノ カク', + '釟': 'ハツ、カネヘンニカンスウジノハチ', + '功': 'フセイコウ ノ コウ', + '力': 'チカラ,タイリョク ノ リョク', + '劔': 'ケン,ツルギノイタイジ,ツクリガヤイバノイタイジ', + '劑': 'ヤクザイシノザイノキュウジ', + '劒': 'ケン,ツルギノイタイジ,ツクリガカタナニテン', + '鋪': 'カネヘン ノ ホ', + '踊': 'オドル,ブヨウ ノ ヨウ', + '踉': 'ヨロメク,ソウロウノロウ', + '踈': 'カソチノソノイタイジ,アシヘンニヤクソクノソク', + '踏': 'フム,ザットウ ノ トウ', + '踐': 'ジッセンスルノセンノキュウジ', + '釘': 'クギ', + '踟': 'チ,アシヘンニケンチジノチ', + '踞': 'ソンキョスルノキョ,アシヘンニジュウキョノキョ', + '踝': 'クルブシ,カ', + '踪': 'シッソウジケンノソウ', + '踰': 'ユ,アシヘンニニレノキノニレノツクリ', + '踵': 'カカト,ショウ', + '踴': 'オドル,ブヨウノヨウノイタイジ,アシヘンニイサマシイ', + '釁': 'スキマヲイミスルキンゲキノキン', + '釀': 'ジョウゾウスルノジョウ,カモスノキュウジ', + '野': 'ヤサイ ノ ヤ,ノハラ ノ ノ', + '里': 'サトガエリ ノ サト,リ', + '釈': 'シャクホウスル ノ シャク', + '襖': 'ショウジフスマ ノ フスマ', + '襞': 'ヒダ,カベノツチノカワリニコロモ', + '襟': 'エリマキ ノ エリ', + '襄': 'ジョウ,ユズルノキュウジノツクリ', + '襁': 'キョウ、コロモヘンニベンキョウノキョウ', + '襃': 'キヨホウヘンノホウノイタイジ', + '襌': 'タン、コロモヘンニタンジュンノタンノキュウジ', + '襍': 'ザツオンノザツノイタイジ', + '襴': 'キンランドンスノラン', + '襷': 'タスキ', + '襲': 'シュウゲキ ノ シュウ,オソウ', + '襾': 'エ,ブシュノオオイカンムリ', + '西': 'ニシヒガシ ノ ニシ,セイ', + '襤': 'ランルヲマトウノラン', + '襦': 'ジュバンノジュ', + '襠': 'トウ、コロモヘンニベントウノトウノキュウジ', + '襭': 'ケツ,コロモヘンニダイキチノキチニページ', + '襯': 'シン、コロモヘンニオヤコノオヤ', + '襪': 'ベツ,コロモヘンニケイベツスルノベツ', + '鸛': 'トリノコウノトリ,カン', + '鸞': 'シンランショウニンノラン', + '犹': 'ユウ,ケモノヘンニセツゾクシノモットモ', + '状': 'ネンガジョウ ノ ジョウ', + '犲': 'サイ,ケモノヘンニカタカナノオ', + '犯': 'ハンザイ ノ ハン', + '犬': 'イヌ,モウドウケン ノ ケン', + '黠': 'カツ,クロノミギニダイキチノキチ', + '犧': 'ギセイシャノギノキュウジ', + '犢': 'トク,コウシ,ウシヘンニハンバイスルノバイノキュウジ', + '犠': 'ギセイシャ ノ ギ', + '犖': 'ラク,ホタルノキュウジノムシノカワリニドウブツノウシ', + '犒': 'コウ,ウシヘンニタカイヒクイノタカイ', + '犇': 'ホン,ヒシメク,ドウブツノウシミッツ', + '犂': 'レイ,カラスキ', + '犀': 'ドウブツ ノ サイ', + '犁': 'レイ,カラスキノイタイジ', + '遭': 'ソウナンスル ノ ソウ', + '遯': 'トン,シンニョウニトンジルノトン', + '遮': 'シャダンスル ノ シャ,サエギル', + '汎': 'ハンヨウセイ ノ ハン', + '遨': 'ゴウ,シンニョウニゴウマンナノゴウノツクリ', + '求': 'ヨウキュウ ノ キュウ,モトメル', + '汀': 'ミギワ,サンズイ ニ イッチョウメ ノ チョウ', + '汁': 'ミソシル ノ シル,カジュウ ノ ジュウ', + '遡': 'サカノボル,ソジョウスル ノ ソ', + '遠': 'エンソク ノ エン,トオイ', + '遣': 'ハケンスル ノ ケン,ツカワス', + '汚': 'オセン ノ オ,キタナイ', + '遼': 'ゼントリョウエン ノ リョウ,ハルカ', + '避': 'ヒショチ ノ ヒ,サケル', + '汞': 'コウ,ズガコウサクノコウノシタニミズ', + '江': 'エドジダイ ノ エ', + '汝': 'ナンジ,サンズイ ニ オンナ', + '遵': 'ジュンシュスル ノ ジュン,シンニョウ ニ ソンケイ ノ ソン', + '汐': 'チョウセキ ノ セキ,シオ', + '遶': 'ジョウ,シンニョウニギョウシュンノギョウノキュウジ', + '汗': 'アセ,ハッカン ノ カン', + '汕': 'サン,サンズイニヤマ', + '汪': 'オウ,サンズイニオウサマノオウ', + '汨': 'ベキラノベキ,サンズイニヨウビノニチ', + '過': 'カコ ノ カ,スギル', + '遉': 'テイ,シンニョウニテイシュクナノテイ', + '運': 'ウンドウ ノ ウン,ハコブ', + '遊': 'ユウエンチ ノ ユウ,アソブ', + '汢': 'ヌタ,サンズイニツチ', + '池': 'チョスイチ ノ チ,イケ', + '遁': 'トンソウスル ノ トン', + '遂': 'スイコウスル ノ スイ,トゲル', + '決': 'タスウケツ ノ ケツ,キメル', + '遜': 'ケンソンスル ノ ソン', + '遞': 'テイシンショウノテイノキュウジ', + '汾': 'フン,サンズイニハンブンノブン', + '遘': 'コウ,シンニョウニミゾノツクリ', + '汽': 'キテキ ノ キ', + '汲': 'クム,キュウキュウトスル ノ キュウ', + '汳': 'ハン,サンズイニハンタイスルノハン', + '汰': 'シゼントウタ ノ タ', + '遖': 'アッパレ,シンニョウニミナミ', + '遑': 'コウ、シンニョウニコウタイシノコウ', + '遐': 'カ,シンニョウニヒマツブシノヒマノツクリ', + '道': 'ミチ,ドウロ ノ ドウ', + '遒': 'シュウ,シンニョウニシュウチョウサンノシュウ', + '粗': 'ソマツナ ノ ソ,アライ', + '粕': 'サケカス ノ カス,コメヘン ニ シロ', + '粒': 'ツブ,リュウシ ノ リュウ', + '粐': 'ヌカ,コメヘンニトジマリノト', + '粟': 'キビアワ ノ アワ', + '粛': 'ゲンシュクナ ノ シュク', + '粘': 'ネバル,ネンド ノ ネン', + '粂': 'クメ,ヒサシイ ノ シタニ コメ', + '粃': 'シイナ,コメヘンニヒカクスルノヒ', + '粁': 'キョリ ノ タンイ ノ キロメートル', + '粍': 'ナガサ ノ タンイ ノ ミリメートル', + '粋': 'ジュンスイナ ノ スイ,イキ', + '粉': 'フンマツ ノ フン,コナ', + '粲': 'サン,サンゼントカガヤクノサンノツクリ', + '粳': 'ウルチマイノウルチ', + '粱': 'リョウ,リョウザンパクノリョウノキノカワリニコメ', + '精': 'セイシンテキ ノ セイ', + '粽': 'ソウ,チマキ', + '粹': 'ジュンスイナノスイノキュウジ', + '粧': 'オケショウ ノ ショウ', + '粤': 'チュウゴクカントンショウヲイミスルエツ', + '粥': 'オカユ ノ カユ', + '粢': 'シトギ,モクジノジノシタニコメ', + '粡': 'トウ,コメヘンニオナジ', + '粮': 'ショクリョウノリョウ,カテノイタイジ', + '粭': 'スクモ,コメヘンニゴウカクノゴウ', + '粫': 'ウルチ,コメヘンニケイジジョウノジ', + '粨': 'ナガサノタンイノヘクトメートル', + '撥': 'ハネル,ハツ,テヘンニハツメイノハツノキュウジ', + '撤': 'テッタイスル ノ テツ', + '撫': 'アイブスル ノ ブ,ナデル', + '撩': 'リョウランノリョウ,テヘンニドウリョウノリョウノツクリ', + '撮': 'サツエイスル ノ サツ,トル', + '播': 'デンパスル ノ ハ,マク', + '撲': 'ダボク ノ ボク', + '撰': 'チョクセンワカシュウ ノ セン,エラブ', + '撻': 'ベンタツスルノタツ', + '撹': 'カクランスル ノ カク', + '撼': 'シンカンサセルノカン,テヘンニカンソウブンノカン', + '撃': 'コウゲキ ノ ゲキ,ウツ', + '撈': 'ギョロウノロウ,テヘンニロウドウノロウノキュウジ', + '撓': 'フトウフクツノトウ,タワム', + '撒': 'ミズヲマク ノ マク,サン', + '撕': 'シ,テヘンニシカイノケンイノシ', + '鹽': 'シオノキュウジ,エン', + '撚': 'ヒネル,テヘン ニ シゼン ノ ゼン', + '鹿': 'ドウブツ ノ シカ', + '鹹': 'カンスイコノカン,カライ,ロカクノロノミギニハリキュウノハリノツクリ', + '撞': 'ジカドウチャク ノ ドウ,ツク', + 'W': 'ダブリュー ウィンドウ', + '×': 'カケル', + '魄': 'ハク,シロヘンニオニ', + '÷': 'ワル', + '奘': 'サンゾウホウシゲンジョウノジョウ', + '奚': 'ケイ,ケイリュウヅリノケイノキュウジノツクリ', + '奕': 'イゴヲイミスルエキ', + '奔': 'ホンソウスル ノ ホン', + '套': 'ジョウトウシュダン ノ トウ', + '契': 'ケイヤクスル ノ ケイ', + '奐': 'カン,カンキセンノカンノツクリ', + '奏': 'エンソウスル ノ ソウ,カナデル', + '奎': 'ケイ,オオキイノシタニツチフタツ', + '奉': 'ホウシカツドウ ノ ホウ,タテマツル', + '奈': 'ナラケン ノ ナ', + '奄': 'アマミオオシマ ノ イチモジメ ノ エン', + '奇': 'キミョウナ ノ キ', + '魎': 'チミモウリョウノリョウ', + '好': 'ダイスキ ノ スキ,コウ', + '奸': 'カン,オンナヘンニホス', + '奴': 'ドレイ ノ ド,ヤツ', + '女': 'オンナ,ジョシ ノ ジョ', + '奬': 'ショウガクキンノショウノキュウジ', + '奮': 'コウフン ノ フン,フルウ', + '奩': 'レン,ハコ,オオキイノシタニクベツノクノキュウジ', + '奨': 'ショウガクキン ノ ショウ', + '奪': 'ウバウ,リャクダツ ノ ダツ', + '奥': 'オクバ ノ オク', + '奧': 'オクバノオクノキュウジ', + '奠': 'オコウデンノデン,シュウチョウノシュウノシタニオオキイ', + '奢': 'ゴウシャノシャ,オゴリ', + '肭': 'ドツ,ニクヅキニコクナイノナイ', + '肬': 'イボ,ユウ,ニクヅキニモットモ', + '肯': 'コウテイヒテイ ノ コウ', + '肩': 'カタコリ ノ カタ,ケン', + '肪': 'シボウブン ノ ボウ', + '肥': 'ヒマン ノ ヒ,コエル', + '股': 'コカンセツ ノ コ,マタ', + '肢': 'センタクシ ノ シ', + 'ル': 'ルスバン ノ ル', + '肺': 'ハイカツリョウ ノ ハイ', + '肴': 'シュコウ ノ コウ,サカナ', + '肱': 'ココウノシン ノ コウ,ヒジ', + '育': 'キョウイク ノ イク,ソダテル', + '肌': 'ハダイロ ノ ハダ', + '肉': 'ギュウニク ノ ニク', + 'ワ': 'ワカメ ノ ワ', + '肋': 'ロクマクエン ノ ロク', + '肅': 'ゲンシュクナノシュクノキュウジ', + '肄': 'イ,ギモンノギノヒダリガワニフデヅクリ', + '肇': 'クニヲハジメル ノ ハジメ,チョウ', + '肆': 'シ,ケイヤクショニツカウスウジノヨン', + '-': 'マイナス', + '肝': 'カンゾウ ノ カン,キモ', + '肘': 'ヒジ,ニクヅキニスンポウ ノ スン', + '肛': 'オシリノコウモンノコウ', + '肚': 'ズ,ニクヅキニドヨウビノド', + '肖': 'ショウゾウガ ノ ショウ', + '肓': 'ヤマイコウコウノウシロノコウ', + 'ム': 'ムシ ノ ム', + 'ラ': 'ラジオ ノ ラ', + 'ハ': 'ハガキ ノ ハ', + 'ノ': 'ノハラ ノ ノ', + '躅': 'チョク,アシヘンニサンゴクシノショク', + '躄': 'ヘキ,カベノツチノカワリニテアシノアシ', + '躇': 'チュウチョスルノチョ', + '躁': 'ソウウツビョウノソウ', + '躍': 'カツヤクスル ノ ヤク', + '躋': 'セイ,アシヘンニヘソノツクリ', + '躊': 'チュウチョスルノチュウ', + '躔': 'テン,アシヘンニマトウノツクリ', + '躑': 'テキ,アシヘンニトウテキキョウギノテキノツクリ', + '躓': 'ツマズク,チ', + '躙': 'ジュウリンスルノリン', + '躡': 'ジョウ、アシヘンニミミミッツ', + '躬': 'キュウ、ミヘンニユミ', + '躯': 'タイク ノ ク,ミ', + '身': 'シンチョウタイジュウ ノ シン,ミ', + '躪': 'ジュウリンスルノリンノイタイジ', + '躱': 'タ、ミヘンニジダノジ', + '躰': 'タイ,ミヘンニホンモノノホン', + '躾': 'シツケ、ミヘンニウツクシイ', + '遅': 'オソイ,チコク ノ チ', + '雲': 'クモノウエ ノ クモ,ウン', + '瑯': 'ホウロウナベノロウ,オウヘンニモモタロウノロウ', + '瑪': 'メノウノメ', + '瑩': 'ホタルノキュウジノムシノカワリニタマ', + '瑤': 'ヨウ,オウヘンニユレルノツクリノキュウジ', + '瑣': 'ハンサナテツヅキノサ', + '瑠': 'ルリイロ ノ ル', + '瑾': 'キン,キズヲイミスルカキンノキン', + '瑶': 'ヨウ,オウヘンニユレルノツクリ', + '瑳': 'セッサタクマ ノ サ,オウヘン ニ サ', + '瑰': 'オウヘンニオニ', + '瑁': 'ドウブツノタイマイノマイ', + '瑟': 'キンシツアイワスノシツ', + '瑞': 'ズイウン ノ ズイ,シルシ', + '瑜': 'ユ,オウヘンニニレノキノニレノツクリ', + '瑛': 'オウヘン ニ エイゴ ノ エイ', + '瑚': 'サンゴショウ ノ ゴ', + '瑙': 'メノウノノウ', + '瑕': 'キズヲイミスルカシノカ', + '援': 'オウエンスル ノ エン', + '揶': 'ヤユスルノヤ', + '餝': 'ショク,カザルノイタイジ,ショクヘンニホウコウザイノホウ', + '餘': 'ヨユウノヨ,アマルノキュウジ', + '餔': 'ホ,クラウ,ショクヘンニシジンノトホノホ', + '餒': 'ダイ,ショクヘンニダキョウスルノダ,ウエル', + '餓': 'ガシスル ノ ガ,ウエル', + '揺': 'ユレル,ドウヨウスル ノ ヨウ', + '餌': 'エサ,エヅケ ノ エ', + '養': 'エイヨウ ノ ヨウ,ヤシナウ', + '握': 'アクリョク ノ アク,ニギル', + '揣': 'シマオクソクノシ,テヘンニタンマツノタンノツクリ', + '揮': 'シキスル ノ キ', + '餅': 'モチツキ ノ モチ', + '揩': 'カイ,テヘンニミナサマノミナ', + '餾': 'リュウ,ムス,ショクヘンニリュウガクノリュウ', + '揖': 'イチユウ ノ ユウ,テヘン ニ クチ ノ シタニ ミミ', + '餽': 'キ,マツル,ショクヘンニオニ', + '提': 'テイアン ノ テイ', + '雅': 'ユウガ ノ ガ,ミヤビ', + '插': 'ソウニュウスルノソウ,サスノキュウジ', + '揚': 'アゲル,カラアゲ', + '換': 'カンキセン ノ カン,カエル', + '揄': 'ヤユスルノユ', + '雋': 'フルトリノシタニオウトツノオウノシタ1カクヲトッタモノ', + '揆': 'ヒャクショウイッキノキ', + '揀': 'カン,テヘンニサカナノニシンノツクリ', + '館': 'トショカン ノ カン', + '揃': 'ソロエル', + '餤': 'タン,クラウ,ショクヘンニホノオ', + '描': 'エガク,ビョウシャスル ノ ビョウ', + '揉': 'モム,テヘンニジュウドウノジュウ', + '餠': 'モチツキノモチノキュウジ', + '餡': 'クズアンノアン', + '雖': 'イエドモ', + '淌': 'ショウ,サンズイニオショウサンノショウ', + '釶': 'シ、カネヘンニクウヤネンブツノヤ', + '釵': 'サイ、カネヘンニヤシャノシャ', + '淋': 'サビシイ,サンズイ ニ ハヤシ', + '釿': 'ギン、カネヘンニパンイッキンノキン', + '淅': 'セキ,サンズイニブンセキスルノセキ', + '淆': 'ギョクセキコンコウノコウ', + '淇': 'キ,サンズイニキホンノキカラツチヲトッタカタチ', + '淀': 'ヨドガワ ノ ヨド', + '釧': 'クシロ,コンセンゲンヤ ノ セン', + '釦': 'イフク ノ ボタン', + '淞': 'ショウ,サンズイニマツノキノマツ', + '淘': 'シゼントウタ ノ トウ', + '淙': 'ソウ,サンズイニシュウキョウカイカクノシュウ', + '釡': 'カマメシノカマノイタイジ', + '淕': 'リク,サンズイニリクジョウノリクノツクリ', + '淑': 'シュクジョ ノ シュク', + '淒': 'セイ,サンズイニツマオットノツマ', + '淬': 'サイ,サンズイニソツギョウノソツ', + '釖': 'トウ、カネヘンニカタナ', + '淮': 'ワイガノワイ,サンズイニフルトリ', + '淨': 'ジョウスイキノジョウノキュウジ', + '淪': 'リン,サンズイニケツロンノロンノツクリ', + '淫': 'インラン ノ イン,ミダラ', + '淤': 'オケツノオ,トドコオル', + '淦': 'カン,サンズイニキンヨウビノキン', + '釜': 'カマメシ ノ カマ', + '釛': 'コク,カネヘンニチカラ', + '淡': 'タンスイギョ ノ タン,アワイ', + 'n': 'エヌ ノベンバー', + '采': 'ハクシュカッサイ ノ サイ', + '釆': 'ハン,バンゴウ ノ バン カラ タ ヲ トッタ ジ', + '淹': 'エン,サンズイニアマミオオシマノイチモジメ', + '淺': 'アサイノキュウジ', + '添': 'ソエル,テンプスル ノ テン', + '量': 'コウスイリョウ ノ リョウ,ハカル', + '淵': 'ミズガ ヨドンデ フカイ フチ', + '重': 'タイジュウ ノ ジュウ,オモイ', + '混': 'コンザツ ノ コン', + '釋': 'シャクホウスルノシャクノキュウジ', + '深': 'シンコクナ ノ シン,フカイ', + '釉': 'ユウヤクノユウ,ウワグスリ', + '淳': 'ジュン,サンズイ ニ キョウラクテキナ ノ キョウ', + '副': 'フクカイチョウ ノ フク', + '制': 'セイゲンスル ノ セイ', + '刷': 'インサツ ノ サツ,スル', + '刳': 'クリヌクノクル,コ', + '到': 'トウチャクスル ノ トウ,イタル', + '刺': 'シゲキスル ノ シ,サス', + '刻': 'ジコク ノ コク,キザム', + '券': 'ジョウシャケン ノ ケン', + '刹': 'セツナテキナノナ', + '刧': 'ミライエイゴウノゴウノイタイジ', + '判': 'ハンダン ノ ハン', + '別': 'トクベツ ノ ベツ,ワカレル', + '刮': 'カツモクスルノカツ', + '刪': 'サン,ケズル,イッサツニサツノサツノミギニリットウ', + '利': 'ケンリ ノ リ', + '列': 'ギョウレツ ノ レツ', + '刔': 'ケツ,エグル,タスウケツノケツノツクリノミギニリットウ', + '刑': 'ケイムショ ノ ケイ', + '初': 'サイショ ノ ショ,ハジメテ', + '分': 'ハンブン ノ ブン,ワケル', + '切': 'タイセツ ノ セツ,キル', + '刄': 'ハモノノハ,ヤイバノイタイジ', + '刃': 'ハモノ ノ ハ,ヤイバ', + '刀': 'カタナ,ニホントウ ノ トウ', + '刎': 'フンケイノマジワリノフン', + '刊': 'シュウカンシ ノ カン', + '刋': 'セン,カタカナノチノミギニリットウ', + '刈': 'クサカリ ノ カリ,カル', + '軟': 'ジュウナン ノ ナン,ヤワラカ', + '項': 'コウモク ノ コウ,キョウツウコウ ノ コウ', + 'D': 'ディー デスク', + '觜': 'クチバシ,シ,ヒガンシガンノシノシタニツノ', + '觝': 'テイ,ツノヘンニテイコウスルノテイノツクリ', + '觚': 'コ,ツノヘンニウリ', + '角': 'カクド ノ カク,ツノ', + '觀': 'カンキャクノカン,ミルノキュウジ', + '觸': 'セッショクスルノショク,フレルノキュウジ', + '觴': 'ショウ、ツノヘンニキリキズノキズノツクリ', + '触': 'セッショクスル ノ ショク,フレル', + '觧': 'カイ,ツノヘンニヒツジ', + '解': 'カイケツスル ノ カイ', + '脳': 'ズノウ ノ ノウ', + '脱': 'ヌグ,ダツボウ ノ ダツ', + '脾': 'ゾウキノヒゾウノヒ', + '脹': 'ボウチョウスル ノ チョウ,ニクヅキニナガイ', + '脣': 'シン,クチビル,ジュウニシノタツノシタニニクヅキ', + '脯': 'ホ,ニクヅキニシジンノトホノホ', + '脩': 'ソクシュウヲオサメルノシュウ', + '脛': 'ケイ,スネ,ニクヅキニケイツイノケイノヒダリガワ', + '脚': 'キャクホン ノ キャク,アシ', + '脇': 'ワキヤク ノ ワキ', + '脆': 'ゼイジャクナ ノ ゼイ,モロイ', + '脅': 'キョウハク ノ キョウ,オドス', + '脂': 'シボウ ノ シ,アブラ', + '脊': 'セキズイ ノ セキ', + '脉': 'サンミャクノミャクノイタイジ,ニクヅキニエイキュウノエイ', + '脈': 'サンミャク ノ ミャク', + '缸': 'コウ,ホトギヘンニズガコウサクノコウ', + '缺': 'ホケツノケツ,カケルノキュウジ', + '缶': 'カンヅメ ノ カン', + '搦': 'カラメテノカラメ,テヘンニキョウジャクノジャク', + '搭': 'トウジョウテツヅキ ノ トウ', + '搬': 'ハンニュウスル ノ ハン', + '搨': 'トウ,テヘンニニチヨウビノニチノシタニハネ', + '搴': 'ケン,サムイノシタニテンノカワリニテ', + '搶': 'ソウ,テヘンニカマクラバクフノクラ', + '搾': 'サクシュ ノ サク,シボル', + '携': 'ケイタイ ノ ケイ,タズサエル', + '搆': 'コウ,テヘンニミゾノツクリ', + '損': 'ソンガイ ノ ソン', + '搏': 'ミャクハクノハク,テヘンニハクブツカンノハクノツクリ', + '搗': 'モチツキノツキ', + '搖': 'ユレル,ドウヨウスルノヨウノキュウジ', + '搓': 'サ,テヘンニサベツカスルノサ', + '搜': 'ソウサジョウノソウ,サガスノキュウジ', + '瓱': 'ミリグラム,カワラニウモウノモウ', + '瓰': 'デシグラム,カワラニハンブンニスルノブン', + '瓲': 'トン,カワラニチュウトンスルノトン', + '瓷': 'シ,カワラノウエニモクジノジ', + '瓶': 'アキビン ノ ビン', + '瓸': 'ヘクトグラム,カワラニカンスウジノヒャク', + '瓠': 'コ,ヒサゴ,ハカマノツクリニウリ', + '瓣': 'ハナビラノベンノキュウジ', + '瓢': 'ヒョウタン ノ ヒョウ,ヒサゴ', + '瓧': 'デカグラム,カワラニカンスウジノジュウ', + '瓦': 'レンガ ノ ガ,カワラ', + '瓩': 'キログラム,カワラニカンスウジノセン', + '瓮': 'オウ,オオヤケノシタニカワラ', + '瓔': 'ヨウ,オウヘンニサクラノキュウジノツクリ', + '瓜': 'ウリ,スイカ ノ カ', + '瓊': 'ケイ,ヤサカニノマガタマノニ', + '瓏': 'レイロウタルノロウ,オウヘンニキョウリュウノリュウノキュウジ', + '隠': 'インキョスル ノ イン,カクレル', + '隣': 'トナリ,リンジン ノ リン', + '捺': 'ナツインスル ノ ナツ', + '捻': 'ネンザ ノ ネン,ヒネル', + '隧': 'トンネルヲイミスルスイドウノスイ', + '捶': 'スイ,テヘンニスイチョクノスイ', + '捷': 'ビンショウナ ノ ショウ', + '險': 'ボウケンカノケンノキュウジ', + '捲': 'マクル,ケンドジュウライ ノ ケン', + '据': 'スエル,スエオキ ノ スエ', + '隱': 'イン、カクレルノキュウジ', + '隲': 'シツ、コザトヘンニスコシノシタニバシャノバ', + '隴': 'リョウ、コザトヘンニキョウリュウノリュウノキュウジ', + '捫': 'モン,テヘンニセンモンノモン', + '捨': 'シシャゴニュウ ノ シャ,ステル', + '捩': 'レイ,ネジル,テヘンニモドル', + '隸': 'レイ、ドレイカイホウノレイノキュウジ', + '捧': 'ササゲル,ホウ', + '隻': 'フネイッセキ ノ セキ', + '隼': 'トリ ノ ハヤブサ', + '捜': 'ソウサジョウ ノ ソウ,サガス', + '隅': 'ヨスミ ノ スミ,グウ', + '隆': 'リュウキスル ノ リュウ', + '隈': 'クマ,カイワイ ノ ワイ', + '捗': 'シンチョクジョウキョウ ノ チョク,ハカドル', + '隊': 'グンタイ ノ タイ', + '捕': 'タイホスル ノ ホ,トラエル', + '隍': 'コウ、コザトヘンニコウタイシノコウ', + '捐': 'ギエンキンノエン,テヘンニキヌイトノキヌノツクリ', + '随': 'ズイヒツ ノ ズイ', + '捏': 'ネツゾウスルノネツ,コネル', + '捌': 'ウリサバク ノ サバク,テヘン ニ ワカレル', + '捍': 'カン,テヘンニヒデリヲイミスルカンバツノカン', + '隔': 'カンカク ノ カク,ヘダタリ', + '隕': 'インセキノイン、オチル', + '捉': 'トラエル,テヘン ニ アシ', + '隘': 'アイロノアイ、セマイ', + '隙': 'スキマ ノ スキ,ゲキ', + '際': 'ジッサイ ノ サイ', + '障': 'ショウガイブツ ノ ショウ', + '↓': 'シタヤジルシ', + '壥': 'ツチヘンニガンダレニボクジュウノボクノキュウジ', + '壤': 'ドジョウカイリョウノジョウノキュウジ', + '壯': 'ソウダイナノソウノキュウジ', + '壮': 'ソウダイナ ノ ソウ', + '壬': 'ジンシンノラン ノ ジン', + '士': 'ベンゴシ ノ シ', + '壷': 'オモウツボ ノ ツボ', + '売': 'ショウバイ ノ バイ,ウル', + '壱': 'ケイヤクショニ ツカウ スウジ ノ イチ', + '声': 'コエ,オンセイ ノ セイ', + '[': 'カクカッコ', + '壼': 'コン,サムライノシタニワカンムリ,アネッタイノアノキュウジ', + '壻': 'ハナムコノムコノイタイジ,ツチヘン', + '壺': 'オモウツボノツボノセイジ', + '壹': 'ケイヤクショノツカウスウジイチノキュウジ', + '壇': 'ブツダン ノ ダン', + '壅': 'ヨウ,ヨウリツスルノヨウノツクリノシタニツチ', + '壁': 'ヘキガ ノ ヘキ,カベ', + '壌': 'ドジョウカイリョウ ノ ジョウ', + '壊': 'ハカイ ノ カイ,コワス', + '⌒': 'コキゴウ', + '壗': 'ママ,ツチヘンニワガママノママノツクリ', + '壕': 'ボウクウゴウ ノ ゴウ', + '壓': 'アツリョクノアツノキュウジ', + '壑': 'タニヲイミスルガク', + '(': 'カッコ', + '壟': 'ロウ,キョウリュウノリュウノキュウジノシタニツチ', + '壞': 'コワス,ハカイノカイノキュウジ', + '壜': 'ビン,ツチヘンニクモリ', + '壙': 'コウ,ツチヘンニヒロバノヒロノキュウジ', + '壘': 'ルイセキスルノルイノキュウジ', + '冽': 'リンレツノレツ,ニスイニギョウレツノレツ', + '冰': 'ヒョウガノヒョウ,コオリノイタイジ,ニスイ', + '冱': 'コ,ニスイニゴカクノゴ', + '冲': 'チュウ,ニスイニチュウガッコウノチュウ', + '决': 'タスウケツノケツ,キメルノイタイジ,ニスイ', + '冴': 'メガサエル ノ サエル', + '况': 'ジッキョウチュウケイノキョウノイタイジ,ニスイ', + '冶': 'ヤキンガク ノ ヤ', + '冷': 'レイトウ ノ レイ,ツメタイ', + '冨': 'フジサン ノ フ ノ イタイジ,ワカンムリ', + '冩': 'シャシンノシャ,ウツスノキュウジノイタイジ,ワカンムリ', + '冪': 'ベキ,ワカンムリニジマクノマク', + '冫': 'ヒョウ,ブシュノニスイ', + '冬': 'フユヤスミ ノ フユ,トウ', + '冠': 'カンムリ,エイカン ノ カン', + '冢': 'チョウ,カイヅカノツカノモトノジ', + '冤': 'エンザイヲハラスノエン', + '冥': 'メイフクヲ イノル ノ メイ', + '冦': 'モウコシュウライノゲンコウノコウノイタイジ', + '写': 'シャシン ノ シャ,ウツス', + '冐': 'ボウケンカノボウノイタイジ', + '冑': 'カッチュウノチュウ,カブト', + '冒': 'ボウケンカ ノ ボウ', + '冓': 'コウ,ミゾノツクリ', + '冕': 'ベン,カンムリ', + '冖': 'ベキ,ブシュノワカンムリ', + '冗': 'ジョウダンヲイウ ノ ジョウ', + '冉': 'ゼン,フタタビカライッカクメヲトッタカタチ', + '冊': 'イッサツニサツ ノ サツ', + '册': 'イッサツニサツノサツノキュウジ', + '再': 'フタタビ,サイ', + '冏': 'ケイ,ドウガマエニカタカナノルトロ', + '冀': 'キ,キタノシタニコトナル', + '冂': 'ケイ,ブシュノドウガマエ', + '内': 'コクナイ ノ ナイ,ウチ', + '円': 'ヒャクエンダマ ノ エン', + '輌': 'リョウ、クルマヘンニリョウテノリョウ', + '輊': 'チ、クルマヘンニゲシトウジノシ', + '載': 'レンサイ ノ サイ,ノセル', + '輅': 'ロ、クルマヘンニカクジノカク', + '較': 'ヒカクテキ ノ カク', + '輟': 'テツ、クルマヘンニツヅルノツクリ', + '輝': 'カガヤク,キ', + '輜': 'シチョウヘイノシ', + '輛': 'リョウ、クルマヘンニリョウテノリョウノキュウジ', + '輙': 'チョウ,クルマヘンニウケトルノトル', + '輕': 'カルイオモイノカルイノキュウジ', + '輔': 'クルマヘン ノ ホサ ノ ホ', + '輓': 'バン,クルマヘンニメンキョノメン', + '輒': 'チョウ,クルマヘンニミミニオツ', + '輯': 'ヘンシュウ ノ シュウ,クルマヘン ニ クチニ ミミ', + '輪': 'シャリン ノ リン,ワ', + '輩': 'センパイ コウハイ ノ ハイ', + '輦': 'ホウレンノレン、オットフタツノシタニクルマ', + '1': 'イチ', + '輾': 'テン、クルマヘンニハッテンノテン', + '輻': 'フク、クルマヘンニシュクフクノフクノツクリ', + '輹': 'フク、クルマヘンニオウフクスルノフクノツクリ', + '輸': 'ユニュウ ノ ユ', + '輳': 'ソウ、クルマヘンニカナデル', + '虧': 'キ,トラガシラニフルトリミギニオセンスルノオノツクリ', + '虫': 'ムシ,コンチュウ ノ チュウ', + '虱': 'シラミ,カゼノイッカクメヲトッタモノ', + '虹': 'ニジ,ナナイロ ノ ニジ', + '虻': 'アブハチトラズ ノ アブ', + '虍': 'コ,ブシュノトラガシラ', + '虎': 'トラ,モウコ ノ コ', + '虐': 'ギャクタイ ノ ギャク,シイタゲル', + '虔': 'ケイケンナイノリノケン', + '處': 'ショブンスルノショノキュウジ', + '虚': 'キョエイシン ノ キョ', + '虜': 'ホリョ ノ リョ,トリコ', + '虞': 'グビジンソウ ノ グ', + '號': 'バンゴウノゴウノキュウジ', + '酸': 'サンソ ノ サン', + '浜': 'スナハマ ノ ハマ', + '酲': 'テイ,ジュウニシノトリノミギニゾウテイスルノテイ', + '浚': 'シュセツスルノシュン', + '酷': 'ザンコク ノ コク,ヒドイ', + '浙': 'セッコウショウノセツ,サンズイニコッセツスルノセツノツクリ', + '酩': 'メイテイスルノメイ', + '浄': 'ジョウスイキ ノ ジョウ', + '浅': 'アサイ フカイ ノ アサイ', + '酬': 'ホウシュウ ノ シュウ', + '流': 'リュウコウ ノ リュウ,ナガス', + '酣': 'カン,ジュウニシノトリノミギニアマイ', + '酢': 'スノモノ ノ ス', + '酥': 'ソ,ジュウニシノトリノミギニノギヘンノノギ', + '海': 'ウミ,カイガイ ノ カイ', + '浴': 'ニュウヨクスル ノ ヨク,アビル', + '酒': 'サケ,ニホンシュ ノ シュ', + '酔': 'ヨウ,デイスイ ノ スイ', + '浸': 'シントウスル ノ シン,ヒタス', + '浹': 'ショウ,サンズイニセマイノキュウジノツクリ', + '浦': 'ツツウラウラ ノ ウラ', + '浤': 'コウ,サンズイニウカンムリニカタカナノナトム', + '酊': 'メイテイスルノテイ', + '配': 'ハイタツ ノ ハイ,クバル', + '浣': 'カンチョウスルノカン,サンズイニカンリョウスルノカン', + '酎': 'イモジョウチュウ ノ チュウ', + '浮': 'フリョク ノ フ,ウク', + '浬': 'タンイ ノ カイリ,サンズイ ニ サト', + '浪': 'ロウヒスル ノ ロウ', + '浩': 'コウゼン ノ コウ,サンズイ ニ ツゲル', + '羣': 'グンシュウノグン,ムレルノイタイジ', + '群': 'グンシュウ ノ グン,ムレ', + '羨': 'センボウスル ノ セン,ウラヤム', + '義': 'ギム ノ ギ', + '羮': 'ミズヨウカンノカン,アツモノノイタイジ', + '羯': 'ガッキノカッコノカツ', + '羲': 'チュウゴクノデンセツジョウノテンシ,フクギノギ', + '丼': 'ドンブリ', + '羶': 'セン,ヒツジヘンニブツダンノダンノツクリ', + '羸': 'ルイジャクノルイ', + '羹': 'ミズヨウカンノカン,アツモノ', + '羽': 'ハネ,ウモウ ノ ウ', + '羂': 'ケン,アミガシラニキヌイトノキヌ', + '羃': 'ベキ,アミガシラニジマクノマク', + '羆': 'ヒグマ,アミガシラニクマ', + '羇': 'キ,アミガシラニカクメイノカクニキミョウナノキ', + '羅': 'モウラスル ノ ラ', + '羊': 'ヨウモウ ノ ヨウ,ヒツジ', + '羈': 'キビセイサクノキ', + '美': 'ビジン ノ ビ,ウツクシイ', + '羌': 'チュウゴクホクセイブミンゾクノヒトツ,キョウ,ヒツジノシタニヒトアシ', + '羔': 'コウ,コヒツジ,ヒツジノシタニレンガ', + '羚': 'レイ,ヒツジヘンニメイレイスルノレイ', + '羞': 'シュウチシンノシュウ', + '羝': 'テイ,オヒツジ,ヒツジヘンニテイコウスルノテイノツクリ', + '斯': 'シカイ ノ ケンイ ノ シ,カク', + '断': 'ハンダン ノ ダン', + '斬': 'ザンシンナ ノ ザン,キル', + '斫': 'シャク,イシヘンニパンイッキンノキン', + '齔': 'シン,ハノキュウジノミギニカタカナノヒ', + '斧': 'ドウグ ノ オノ', + '斥': 'ハイセキスル ノ セキ,シリゾケル', + '斤': 'ショクパンイッキン ノ キン', + '斡': 'アッセンスル ノ アツ', + '施': 'シセツ ノ シ,ホドコス', + '於': 'ナニナニニオイテ ノ オ', + '方': 'オヤカタ ノ カタ,ホウガク ノ ホウ', + '斷': 'ダンネンスルノダンノキュウジ', + '齋': 'ショサイノサイノキュウジ', + '齊': 'イッセイシャゲキノセイノキュウジ', + '齏': 'ナマスヲイミスルセイ', + '新': 'アタラシイ,シンブン ノ シン', + '斎': 'ショサイニコモル ノ サイ', + '斌': 'ヒン,ブンブリョウドウ ノ ブント ブ', + '斉': 'イッセイシャゲキ ノ セイ', + '斈': 'マナブ,ガクシュウノガクノイタイジ', + '文': 'サクブン ノ ブン', + '斃': 'ノタレジニヲイミスルヘイシノヘイ', + '斂': 'イッテンニシュウレンスルノレン', + '斟': 'シンシャクスルノシン,クム', + '齠': 'チョウ,ハノキュウジノミギニショウシュウレイジョウノショウ', + '齣': 'コマ,ハノキュウジノミギニハイクノク', + '斜': 'ナナメ,シャメン ノ シャ', + '斛': 'ヨウリョウノタンイノコク,ツノヘンニタンイノト', + '料': 'リョウリスル ノ リョウ', + '齦': 'ギン,ハグキ', + '斗': 'ホクトシチセイ ノ ト', + '齪': 'アクセクスルノセク,ハノキュウジノミギニアシ', + '齬': 'ソゴヲキタスノゴ', + '斑': 'マダラ,ハンテン ノ ハン', + '斐': 'ヒ,カイノクニ ノ ニモジメ', + '剄': 'ケイドウミャクノケイノヒダリガワニリットウ', + '並': 'ナミキ ノ ナミ,ナラブ', + '不': 'フシギ ノ フ', + '下': 'ジョウゲ ノ ゲ,シタ', + '塩': 'ショクエン ノ エン,シオ', + '填': 'ジュウテンスル ノ テン,ハメル', + 'H': 'エイチ ホテル', + '塢': 'オ,ツチヘンニウゴウノシュウノウ', + '塹': 'ザンゴウノザン', + '塾': 'ガクシュウジュク ノ ジュク', + '塰': 'アマ,ウミノシタニツチ', + '塲': 'バショノバノイタイジ', + '塵': 'フンジン ノ ジン,チリ', + '塋': 'エイ,ハカ,エイギョウノエイノキュウジノロノカワリニツチ', + '塊': 'ダンカイ ノ カイ,カタマリ', + '塁': 'マンルイ ノ ルイ', + '塀': 'ヘイ,イタベイ ノ ヘイ', + '塙': 'ハナワ,ツチヘン ニ タカイ', + '塘': 'トウ,ツチヘン ニ ケントウシ ノ トウ', + '塚': 'ツカ,カイヅカ ノ ツカ', + '塞': 'ノウコウソク ノ ソク,フサガル', + '塑': 'カソセイ ノ ソ', + '塒': 'ジ,ネグラ,ツチヘンニニチジノジ', + '塔': 'ゴジュウ ノ トウ', + '塗': 'トソウ ノ ト,ヌル', + '膸': 'セキズイノズイノイタイジ', + '膺': 'ケンケンフクヨウノヨウ', + '膽': 'ダイタンナノタンノキュウジ', + '膿': 'カノウスル ノ ノウ,ウミ', + '膾': 'ジンコウニカイシャスルノカイ,ナマス', + '膰': 'ハン,ニクヅキニバンゴウノバン', + '膳': 'アゲゼンスエゼン ノ ゼン', + '膵': 'スイゾウノスイ', + '膩': 'ジ,ニクヅキニケイヤクショニツカウカンスウジノニノキュウジ', + '膨': 'ボウチョウスル ノ ボウ,フクラム', + '膠': 'コウゲンビョウノコウ,ニカワ', + '膣': 'チツ,ニクヅキニチッソノチツ', + '膤': 'ユキ,ニクヅキニユキグニノユキ', + '膚': 'ヒフ ノ フ,ハダ', + '膝': 'ヒザマクラ ノ ヒザ', + '膜': 'モウマク ノ マク', + '膓': 'チョクチョウノチョウノイタイジ,ニクヅキニキリキズノキズノツクリ', + '膕': 'カク,ニクヅキニユキグニノクニノキュウジ', + '膈': 'カク,ニクヅキニヘダテルノツクリ', + '膊': 'ジョウハクコツノハク', + '膏': 'ナンコウヲヌル ノ コウ', + '膀': 'ボウコウエンノボウ', + '膃': 'オットセイノオツ', + '膂': 'リョ,リョヒノリョノシタニニクヅキ', + '辛': 'コウシンリョウ ノ シン,カライ', + '辜': 'ムコノコ,チュウコシャノコノシタニカライ', + '辟': 'ヘキエキスルノヘキ', + '辞': 'コクゴジテン ノ ジ', + '辱': 'ブジョクスル ノ ジョク,ハズカシメル', + '辰': 'タツ,ジュウニシ ノ タツ', + '農': 'ノウギョウ ノ ノウ', + '辷': 'シンニョウニカンスウジノイチ,スベル', + '辻': 'ヨツツジ ノ ツジ', + '辺': 'シュウヘン ノ ヘン,アタリ', + '込': 'モウシコム ノ コム', + '辿': 'タドル', + '辣': 'ラツワンノラツ', + '辧': 'ベンベツスルノベンノキュウジ,カライ,シンフタツノアイダニカタナ', + '辨': 'ベンベツスルノベンノキュウジ,カライ,シンフタツノアイダニリットウ', + '辭': 'コクゴジテンノジノキュウジ', + '辯': 'ベンゴシノベンノキュウジ,カライフタツノアイダニゲンゴノゲン', + '辮': 'ベンパツノベン,カライ,シンフタツノアイダニイト', + '⊇': 'ブブンシュウゴウギャク', + '⊆': 'ブブンシュウゴウ', + '睹': 'ト,メヘンニカガクシャノシャノキュウジタイ', + '⊃': 'シンブブンシュウゴウギャク', + '睾': 'ダンセイノコウガンノコウ', + '睫': 'マツゲ,ショウ', + '睨': 'ヘイゲイスルノゲイ,ニラム', + '督': 'エイガカントク ノ トク', + '睡': 'スイミン ノ スイ', + '睦': 'シンボクカイ ノ ボク,ムツマジイイ', + '睥': 'ヘイゲイスルノヘイ,ニラム', + '睛': 'ガリョウテンセイヲカクノセイ,ヒトミ', + '睚': 'ガイ,メヘンニイッショウガイノガイノツクリ', + '⊥': 'スイチョク', + '⊿': 'サンカクケイ', + '着': 'キモノ ノ キ,チャク', + '睇': 'テイ,メヘンニアニオトウトノオトウト', + '阪': 'オオサカ ノ サカ,ハン', + '阨': 'アイ,コザトヘンニヤクドシノヤク', + '阮': 'ゲン,コザトヘンニガンタンノガン', + '阯': 'シ,コザトヘンニキンシスルノシ', + '阡': 'セン,コザトヘンニカンスウジノセン', + '阻': 'ソシスル ノ ソ,ハバム', + '阿': 'アミダブツ ノ ア', + '防': 'ヨボウスル ノ ボウ,フセグ', + '阜': 'ギフケン ノ フ,オカ', + '儂': 'ノウ,ニンベンニノウギョウノノウ', + '儀': 'ギシキ ノ ギ', + '儁': 'シュン,ニンベンニフルトリニユミ', + '億': 'オクマンチョウジャ ノ オク', + '儉': 'ケンヤクスルノケンノキュウジ', + '儒': 'ジュガク ノ ジュ', + '儖': 'ラン,ニンベンニカントクスルノカン', + '儔': 'チュウ,ニンベンニコトブキノキュウジ', + '儕': 'セイ,ニンベンニイッセイシャゲキノセイノキュウジ', + '儚': 'ボウ,ニンベンニユメ,ハカナイ', + '儘': 'ワガママノママ,ジン', + '償': 'バイショウキン ノ ショウ,ツグナウ', + '儡': 'カイライセイケンノライ', + '優': 'ユウショウスル ノ ユウ,ヤサシイ', + '儲': 'モウカル,ニンベン ニ ショクン ノ ショ', + '儷': 'レイ,ニンベンニウルワシイ', + '儺': 'ダ,ニンベンニコンナンノナン', + '儻': 'トウ,ニンベンニヨトウヤトウノトウノキュウジ', + '儿': 'ジン,ブシュノヒトアシ', + '儼': 'ゲン,ニンベンニゲンジュウナノゲン', + '滝': 'タキツボ ノ タキ', + '滞': 'ジュウタイスル ノ タイ,トドコオル', + '滑': 'エンカツ ノ カツ,ナメラカ', + '滓': 'ザンシノシ,サンズイニウカンムリニカライ', + '滔': 'ミズガトウトウトナガレルノトウ', + '滕': 'トウ,フジノハナノフジノクサカンムリナシ', + '滉': 'コウ,サンズイニホロバシャノホロノツクリ', + '滋': 'ジヨウキョウソウ ノ ジ', + '滌': 'テキ,サンズイニジョウケンノジョウノキュウジ', + '滂': 'ボウ,サンズイニロボウノボウノツクリ', + '滄': 'ソウ,サンズイニカマクラバクフノクラ', + '滅': 'ハメツスル ノ メツ,ホロビル', + '滸': 'スイコデンノコ', + '滾': 'タギル,コン', + '滿': 'マンゾクノマンノキュウジ', + '滲': 'シン,ニジム,サンズイニサンカスルノサンノキュウジ', + '滴': 'スイテキ ノ テキ,シズク', + '滷': 'ロ,サンズイニロカクヒンノロ', + '滬': 'コ,サンズイニバッコスルノコ', + '滯': 'ジュウタイスルノタイ,トドコオルノキュウジ', + '_': 'アンダーライン', + '蛩': 'キョウ、キョウリュウノキョウノココロノカワリニムシ', + '蛮': 'ナンバンボウエキ ノ バン', + '蛯': 'エビ,ムシヘンニロウジンノロウ', + '蛬': 'キョウ、キョウツウスルノキョウノシタニムシ', + '蛭': 'チヲスウドウブツ ノ ヒル', + '蛤': 'ハマグリ,ムシヘン ニ アウ', + '蛻': 'モヌケノカラノモヌケ', + '蛸': 'ギョカイルイ ノ タコ', + '蛹': 'ムシノサナギ、ヨウ', + '蛾': 'ガ,ムシ ノ ガ', + '蛋': 'タンパクシツ ノ タン', + '蛉': 'トンボノニモジメ,レイ,ムシヘンニメイレイスルノレイ', + '蛎': 'ウミ ノ カキ,レイ', + '蛍': 'ホタル,ケイコウトウ ノ ケイ', + '蛆': 'ウジムシノウジ,ショ', + '蛇': 'ヘビ,ダイジャ ノ ジャ', + '蛄': 'スシネタノシャコノコ', + '蛛': 'クモ,ムシヘンニシュイロノシュ', + '蛙': 'ドウブツ ノ カエル', + '蛞': 'ナメクジノイチモジメ,ムシヘンニシタヲカムノシタ', + '蛟': 'コウ、ミズチ、ムシヘンニマジワル', + '蛔': 'カイ、ムシヘンニカイスウケンノカイ', + 'Ψ': 'ギリシャ プサイ', + 'Ω': 'ギリシャ オメガ', + 'Π': 'ギリシャ パイ', + 'Ρ': 'ギリシャ ロー', + 'Σ': 'ギリシャ シグマ', + 'Τ': 'ギリシャ タウ', + 'Υ': 'ギリシャ ウプシロン', + 'Φ': 'ギリシャ ファイ', + 'Χ': 'ギリシャ カイ', + 'θ': 'ギリシャ シータ', + 'ι': 'ギリシャ イオタ', + 'κ': 'ギリシャ カッパ', + 'λ': 'ギリシャ ラムダ', + 'μ': 'ギリシャ ミュー', + 'ν': 'ギリシャ ニュー', + 'ξ': 'ギリシャ グザイ', + 'ο': 'ギリシャ オミクロン', + 'α': 'ギリシャ アルファ', + 'β': 'ギリシャ ベータ', + 'γ': 'ギリシャ ガンマ', + 'δ': 'ギリシャ デルタ', + 'ε': 'ギリシャ イプシロン', + 'ζ': 'ギリシャ ゼータ', + 'η': 'ギリシャ イータ', + 'Θ': 'ギリシャ シータ', + 'Ι': 'ギリシャ イオタ', + 'Κ': 'ギリシャ カッパ', + 'Λ': 'ギリシャ ラムダ', + 'Μ': 'ギリシャ ミュー', + 'Ν': 'ギリシャ ニュー', + 'Ξ': 'ギリシャ グザイ', + 'Ο': 'ギリシャ オミクロン', + 'Α': 'ギリシャ アルファ', + 'Β': 'ギリシャ ベータ', + 'Γ': 'ギリシャ ガンマ', + 'Δ': 'ギリシャ デルタ', + 'Ε': 'ギリシャ イプシロン', + 'Ζ': 'ギリシャ ゼータ', + 'Η': 'ギリシャ イータ', + '縦': 'タテヨコ ノ タテ,ジュウ', + '縡': 'サイ,イトヘンニテッケツサイショウノサイ', + '縢': 'イトカガリノカガル,トウ', + '縣': 'トドウフケンノケンノキュウジ', + '縮': 'タンシュク ノ シュク,チヂム', + '縫': 'サイホウスル ノ ホウ,ヌウ', + '縵': 'マン,イトヘンニマンダラノマン', + '縷': 'イチルノノゾミノル', + '縱': 'ジュウ,タテヨコノタテノキュウジ', + '縲': 'ルイ,イトヘンニルイセキスルノルイ', + '總': 'ソウリダイジンノソウノキュウジ', + '績': 'セイセキヒョウ ノ セキ', + '縹': 'ヒョウ,ハナダ,イトヘンニトウヒョウスルノヒョウ', + '縺': 'レン,モツレル', + '縻': 'キビセイサクノビ', + '縄': 'ナワ,ジョウモンドキ ノ ジョウ', + '縅': 'ヨロイノオドシ,イトヘンニイカクスルノイ', + '縁': 'エンガワ ノ エン,フチ', + '縉': 'シン,イトヘンニチュウゴクノコクメイノシン,ススムノキュウジ', + '縊': 'イシスルノイ,クビル', + '縋': 'スガリツクノスガル,ツイ,イトヘンニツイセキスルノツイ', + '縒': 'ヨリヲモドスノヨリ,イトヘンニサベツカノサ', + '縞': 'シマモヨウ ノ シマ', + '縟': 'ジョク,イトヘンニブジョクスルノジョク', + '縛': 'シバル,ソクバク ノ バク', + '攵': 'ボク,ブシュノノブン,ハイボクスルノハイノツクリ', + '攴': 'ボク,ブシュノトマタ', + '攷': 'コウ,ギコウテキナノコウノツクリノミギニノブン', + '收': 'シュウニュウノシュウノキュウジ', + '改': 'カイリョウ ノ カイ,アラタメル', + '攸': 'ユウ,ニンベンニタテボウニノブン', + '攻': 'コウゲキ ノ コウ,セメル', + '政': 'セイジカ ノ セイ', + '放': 'ホウソウキョク ノ ホウ,ハナツ', + '攣': 'ケイレンヲオコスノレン', + '攤': 'タン,テヘンニコンナンナノナンノキュウジ', + '騷': 'サワグ,ソウオンノソウノキュウジ', + '攫': 'イッカクセンキンノカク,ツカム', + '攪': 'コウランスルノコウ,ミダス', + '攬': 'ラン,テヘンニハクランカイノランノキュウジ', + '支': 'シエンスル ノ シ,ササエル', + '鳳': 'ホウオウ ノ オウ,オオトリ', + '攘': 'ソンノウジョウイノジョウ,ハラウ', + '鳰': 'ミズトリノニオ,ニュウガクノニュウニトリ', + '攝': 'セッセイスルノセイ,トルノキュウジ', + '攜': 'ケイタイスルノケイ,タズサエルノイタイジ', + '鳴': 'ヒメイヲアゲル ノ メイ,ナク', + '鳫': 'ガン,ガンダレニトリ', + '攀': 'ガンペキヲトウハンスルノハン', + '鳩': 'トリ ノ ハト', + '攅': 'サン,アツメル,テヘンニサンセイスルノサン', + '鳬': 'ミズドリノケリ,トリノヨツテンノカワリニツクエノツクリ', + '鬧': 'ドウ,トウガマエニイチバノイチ', + '鳧': 'ミズドリノケリ,トリノシタニツクエノツクリ', + '鳥': 'トリ,ヤチョウ ノ チョウ', + '∈': 'ゾクスル', + '∋': 'ゲントシテフクム', + '∀': 'フツウゲンテイシ', + '∃': 'ソンザイゲンテイシ', + '∂': 'ラウンドディー', + '石': 'ホウセキ ノ セキ,イシ', + '短': 'チョウタン ノ タン,ミジカイ', + '矯': 'キョウセイシリョク ノ キョウ', + '矮': 'ワイショウナノワイ', + '矩': 'クケイ ノ ク', + '∟': 'チョッカク', + '∞': 'ムゲンダイ', + '∑': 'シグマ', + '矧': 'ヤヘン ニ インヨウスル ノ イン,ハグ', + '矣': 'イ,アイサツノアイノツクリ', + '矢': 'ユミヤ ノ ヤ', + '∩': 'キャップ', + '矜': 'キョウジヲタモツノキョウ', + '∫': 'インテグラル', + '∪': 'カップ', + '∬': 'ダブルインテグラル', + '矛': 'ムジュン ノ ム,ホコ', + '矚': 'ショク,メヘンニフゾクノゾクノキュウジ', + '∠': 'カク', + '矗': 'チク,チョクゼンノチョクガミッツ', + '∥': 'タテヘイコウ', + '∧': 'オヨビ', + '矍': 'ゲンキカクシャクノカク', + '鑵': 'カン、カネヘンニカンヅメノカンノキュウジノツクリ', + '∽': 'ソウジ', + '矇': 'モウ,メヘンニケイモウスルノモウ', + '∵': 'ナゼナラバ', + '∴': 'ユエニ', + '鞭': 'キョウベンヲトル ノ ベン,ムチ', + '鞨': 'カツ、カワヘンニカッショクノカツノツクリ', + '鞫': 'キク,カワヘンニツツミガマエノナカニゴンベン', + '鞦': 'シュウ,カワヘンニキセツノアキ', + '鞠': 'ケマリ ノ マリ,キク', + '鑰': 'ヤク,カネヘンニブシュノヤク', + '鬥': 'トウ,ブシュノトウガマエ', + '鞴': 'フイゴ,カワヘンニジュンビスルノビノツクリ', + '鬢': 'ビン,カミガシラニライヒンノヒン', + '鞳': 'トウ、カワヘンニゴジュウノトウノトウノツクリ', + '鞍': 'アンバ ノ アン,クラ', + '鞏': 'キョウ、キョウノココロノカワリニカクメイノカク', + '鞋': 'ワラジノニモジメ,カイ', + '鞄': 'カバン', + '鞅': 'オウ,カワヘンニチュウオウノオウ', + '鞆': 'トモ、カワヘンニコウオツヘイノヘイ', + '鞁': 'ヒ,カワヘンニケガワノカワ', + '鞜': 'トウ,カワヘンニミズノシタニニチヨウビノニチ', + '鬮': 'キュウ,トウガマエニドウブツノカメノキュウジ', + '鞘': 'カタナ ノ サヤ,ショウ', + 'v': 'ブイ ビデオ', + '鞐': 'コハゼ、カワヘンニウエシタ', + '鑪': 'ロ、カネヘンニハゼノキノハゼノツクリ', + '鬨': 'トキノコエヲアゲルノトキ', + '鑠': 'ゲンキカクシャクノシャク', + '隨': 'ズイヒツノズイノキュウジ', + '忱': 'シン,リッシンベンニチンボツスルノチンノツクリ', + '忰': 'ショウスイスルノスイノイタイジ', + '念': 'ザンネン ノ ネン', + '忻': 'キン,リッシンベンニパンイッキンノキン', + '忸': 'ジクジタルノジク,ハジル', + '忿': 'フン,フンベツノフンノシタニココロ', + '忽': 'コツゼン ノ コツ,タチマチ', + '忠': 'チュウコクスル ノ チュウ', + '忤': 'ゴ,リッシンベンニショウゴノゴ', + '快': 'カイテキ ノ カイ,ココロヨイ', + '鬼': 'オニ,キュウケツキ ノ キ', + '隰': 'シツ、コザトヘンニシメッポイノキュジノツクリ', + '志': 'ココロザス,イシ ノ シ', + '忖': 'ソンタクスルノソン,リッシンベンニスンポウノスン', + '忙': 'イソガシイ,タボウ ノ ボウ', + '忘': 'ボウネンカイ ノ ボウ,ワスレル', + '忝': 'テン,カタジケナイ,テンプスルノテンノツクリ', + '応': 'オウエン ノ オウ', + '心': 'ココロ,アンシン ノ シン', + '必': 'ヒツヨウ ノ ヒツ,カナラズ', + '忍': 'ニンジャ ノ ニン,シ ノ ブ', + '忌': 'イッシュウキ ノ キ,イム', + '隶': 'イ、ドレイカイホウノレイノツクリ', + '隷': 'ドレイカイホウ ノ レイ', + '隹': 'スイ、ブシュノフルトリ', + 'L': 'エル ラブ', + '鑄': 'チュウゾウスルノチュウ、イルノキュウジ', + '隋': 'ケンズイシノズイ', + '階': 'カイダンヲ ノボル ノ カイ', + '谺': 'カ、コダマ、タニヘンニキバ', + '谿': 'ケイ,ケイリュウヅリノケイノキュウジノツクリノミギニタニ', + '谷': 'タニガワ ノ タニ,コク', + '隗': 'カイ、コザトヘンニオニ', + '蝮': 'ヘビノマムシ、フク', + '蝨': 'シラミ', + '蝪': 'トウ,ムシヘンニバショノバノツクリ', + '蝦': 'ムシヘン ノ エビ,カ', + '蝠': 'コウモリノニモジメ,ムシヘンニフクカイチョウノフクノヒダリガワ', + '蝣': 'ユウ、アソブノシンリョウノカワリニムシヘン', + '蝿': 'ムシ ノ ハエ', + '蝸': 'カタツムリノカギュウノカ', + '蝴': 'コ、ムシヘンニクロコショウノコ', + '蝶': 'アゲハチョウ ノ チョウ', + '蝌': 'カ、ムシヘンニキョウカショノカ', + '蝎': 'ダカツノゴトクキラウノカツ、ムシヘンニカッショクノカツノツクリ', + '"': 'クォーテーション', + '蝉': 'セミシグレ ノ セミ', + '蝋': 'ロウソクタテ ノ ロウ', + '蝟': 'イ、ムシヘンニイブクロノイ', + '蝙': 'コウモリノイチモジメ、ムシヘンニヘンペイソクノヘン', + '蝕': 'ニッショク ノ ショク,ムシバム', + '蝗': 'コウ、イナゴ、ムシヘンニコウタイシノコウ', + '蝓': 'ナメクジノニモジメ,ムシヘンニニレノキノニレノツクリ', + '醺': 'ビクンヲオビルノクン', + '傅': 'フイクスルノフ,メノト', + '估': 'コ,ニンベンニチュウコシャノコ', + '傀': 'カイライセイケンノカイ', + '伶': 'レイジン ノ レイ,ニンベン ニ メイレイ ノ レイ', + '伴': 'ドウハンスル ノ ハン,トモナウ', + '傍': 'ボウカンシャ ノ ボウ,カタワラ', + '伸': 'シンシュク ノ シン,ノビル', + '伽': 'オトギバナシ ノ トギ,カ', + '似': 'ルイジ ノ ジ,ニル', + '傑': 'ゴウケツ ノ ケツ', + '傘': 'ラッカサン ノ サン,カサ', + '備': 'ジュンビスル ノ ビ,ソナエル', + '傚': 'コウ,ニンベンニコウカテキノコウノキュウジ', + '休': 'ヤスム,キュウジツ ノ キュウ', + '伐': 'バッサイスル ノ バツ', + '催': 'モヨオス,カイサイ ノ サイ', + '傭': 'ヨウヘイ ノ ヨウ,ヤトウ', + '伝': 'デンセツ ノ デン,ツタエル', + '伜': 'セガレノイタイジ,ニンベンニカンスウジノキュウトジュウ', + '傴': 'ウ,ニンベンニクベツスルノクノキュウジ', + '債': 'サイムヲオウ ノ サイ', + '企': 'キカク ノ キ,クワダテル', + '傷': 'キズ,ジュウショウ ノ ショウ', + '傲': 'ゴウマンナノゴウ', + '傳': 'デンセツノデンノキュウジ', + '伊': 'イセエビ ノ イ', + '伉': 'コウ,ニンベンニテイコウスルノコウノツクリ', + '伏': 'キフクニトム ノ フク,フセル', + '伎': 'カブキ ノ キ', + '伍': 'ラクゴスル ノ ゴ,ニンベン ニ カンスウジ ノ ゴ', + '湧': 'ユウシュツスル ノ ユウ,ワク', + '湫': 'シュウ,サンズイニアキマツリノアキ', + '湮': 'ショウコインメツノイン,サンズイニケムリノツクリ', + '湯': 'ネットウ ノ トウ,ユ', + '湲': 'エン,サンズイニオウエンスルノエンノツクリ', + '醗': 'サケヲハッコウサセル ノ ハツ,カモス', + '湶': 'セン,サンズイニオンセンノセン', + '醐': 'ダイゴミ ノ ゴ', + '湾': 'ワンガン ノ ワン', + '湿': 'シツド ノ シツ,シメル', + '湃': 'ハイ,サンズイニオガムノキュウジ', + '湊': 'ミナト,サンズイ ニ カナデル', + '湎': 'チンメンスルノメン,サンズイニジメンノメン', + '湍': 'タン,サンズイニタンマツノタンノツクリ', + '湖': 'コハン ノ コ,ミズウミ', + '湛': 'ミズヲタタエル ノ タン', + '湘': 'ショウナンカイガン ノ ショウ', + '湟': 'コウ,サンズイニコウタイシノコウ', + '纎': 'カガクセンイノセンノキュウジノイタイジ', + '纏': 'ハンテン ノ テン,マトウ', + '續': 'レンゾクノゾク,ツヅクノキュウジ', + '纈': 'コウケチゾメノケチ', + '纉': 'サン,イトヘンニサンセイスルノサン', + '纂': 'ジショヲヘンサンスル ノ サン', + '纃': 'シ,イトヘンニイッセイシャゲキノセイノキュウジ', + '纜': 'ラン,イトヘンニハクランカイノランノキュウジ', + '纛': 'トク,ドクヤクノドクノシタニトドウフケンノケンノキュウジ', + '纖': 'カガクセンイノセンノキュウジ', + '纔': 'ワズカヲイミスルイトヘンノサイ', + '纒': 'ハンテンノテン,マトウノイタイジ', + '纓': 'エイ,イトヘンニサクラノキュウジノツクリ', + '纐': 'コウケチゾメノコウ', + '暹': 'セン,シンポノシンノウエニニチヨウビノニチ', + '暸': 'リョウ,メイリョウナノリョウノメノカワリニヨウビノニチ', + '暾': 'トン,ニチヘンニチュウゴクノトンコウノトン', + '暼': 'ヘツ,イチベツスルノベツノメノカワリニヨウビノニチ', + '鱗': 'ウロコ,ヘンリン ノ リン', + '暴': 'ボウリョク ノ ボウ,アバレル', + '暫': 'ザンテイテキ ノ ザン,シバラク', + '暮': 'オセイボ ノ ボ,クラス', + '暢': 'リュウチョウナ ノ チョウ', + '鱇': 'サカナノアンコウノコウ,ウオヘンニイエヤスノヤス', + '鱆': 'ショウ,ウオヘンニブンショウヲカクノショウ', + '暦': 'セイレキ ノ レキ,コヨミ', + '暘': 'ヨウ,ニチヘンニタイヨウケイノヨウノツクリ', + '鱸': 'サカナノスズキ', + '暝': 'メイ,ニチヘンニメイフクヲイノルノメイ', + '暑': 'アツイサムイ ノ アツイ,ショ', + '鱶': 'サカナノフカ,ウオヘンニヤシナウ', + '暗': 'アンキスル ノ アン,クライ', + '暖': 'ダンボウ ノ ダン,アタタカイ', + '暉': 'キ,ニチヘンニグンタイノグン', + '暈': 'メマイヲイミスルゲンウンノウン', + '暎': 'エイ,ニチヘンニエイユウノエイ', + '暃': 'ニチヨウビノニチノシタニヒジョウグチノヒ', + '暁': 'アカツキ', + '暇': 'キュウカ ノ カ,ヒマ', + '鱠': 'ウオヘンノナマス', + '暄': 'ケン,ニチヘンニセンデンノセン', + 'c': 'シー キャット', + '鉅': 'キョ、カネヘンニキョダイナノキョ', + '壽': 'コトブキ,ジュミョウノジュノキュウジ', + '彷': 'ホウコウスルノホウ,ギョウニンベンニオヤカタノカタ', + '影': 'エイキョウ ノ エイ,カゲ', + '彰': 'ヒョウショウジョウ ノ ショウ', + '彳': 'テキ,ブシュノギョウニンベン', + '彼': 'ヒガンバナ ノ ヒ,カレ', + '彿': 'フツ,ギョウニンベンニドル', + '役': 'ヤクワリ ノ ヤク', + '彦': 'ヒコボシ ノ ヒコ', + '彡': 'サン,ブシュノサンヅクリ', + '形': 'チョウホウケイ ノ ケイ,カタチ', + '彭': 'ホウ,ボウチョウリツノボウノツクリ', + '彬': 'ヒン,ハヤシニ サンヅクリ,アキラ', + '彩': 'シキサイ ノ サイ,イロドル', + '彫': 'チョウコクカ ノ チョウ,ホル', + '彪': 'トラニサンヅクリ ノ ヒョウ', + '彗': 'ハレースイセイノスイ', + '彖': 'タン,ケイガシラニイノコ', + '彑': 'ケイ,ブシュノケイガシラ', + '当': 'トウバン ノ トウ,アタル', + '彝': 'イ,ゴイノイノウエガワニコメ,イト,ニジュウアシ', + '彜': 'イ,ゴイノイノウエガワニコナ,ニジュウアシ', + '彙': 'キホンゴイノイ', + '彁': 'ユミヘンニカノウセイノカヲカサネル', + '彌': 'アミダブツノミノキュウジ', + '彎': 'ワンガンノワンノキュウジノツクリ', + '彈': 'ダンリョクノダン,ハズムノキュウジ', + '彊': 'ジキョウジュツ ノ キョウ,ツヨイ', + 's': 'エス スポーツ', + 'r': 'アール ルーム', + 'q': 'キュー クエスチョン', + 'p': 'ピー パパ', + 'w': 'ダブリュー ウィンドウ', + 'v': 'ブイ ビデオ', + 'u': 'ユー ユージュアリー', + 't': 'ティー タイム', + '{': 'チュウカッコ', + 'z': 'ゼット ズー', + 'y': 'ワイ ヤング', + 'x': 'エックス エックスセン', + '~': 'ナミセン', + '}': 'トジチュウカッコ', + '|': 'タテセン', + 'c': 'シー キャット', + 'b': 'ビー ボーイ', + 'a': 'エイ アニマル', + '`': 'アクサングラーブ', + 'g': 'ジー ゴルフ', + 'f': 'エフ フレンド', + 'e': 'イー エッグ', + 'd': 'ディー デスク', + 'k': 'ケイ キッチン', + 'j': 'ジェイ ジャパン', + 'i': 'アイ インク', + 'h': 'エイチ ホテル', + 'o': 'オー オープン', + 'n': 'エヌ ノベンバー', + 'm': 'エム マイク', + 'l': 'エル ラブ', + 'ウ': 'ウサギ ノ ウ', + 'イ': 'イチゴ ノ イ', + 'ア': 'アサヒ ノ ア', + 'ー': 'チョウオン', + 'キ': 'キッテ ノ キ', + 'カ': 'カゾク ノ カ', + 'オ': 'オオサカ ノ オ', + 'エ': 'エイゴ ノ エ', + 'サ': 'サクラ ノ サ', + 'コ': 'コドモ ノ コ', + 'ケ': 'ケシキ ノ ケ', + 'ク': 'クスリ ノ ク', + 'ソ': 'ソロバン ノ ソ', + 'セ': 'セカイ ノ セ', + 'ス': 'スズメ ノ ス', + 'シ': 'シンブン ノ シ', + '」': 'トジカギ', + '「': 'カギ', + '。': 'マル', + 'ァ': 'チイサイ アサヒ ノ ア', + 'ヲ': 'ヲワリ ノ ヲ', + '・': 'ナカテン', + '、': 'テン', + '9': 'キュウ', + 'ェ': 'チイサイ エイゴ ノ エ', + 'ゥ': 'チイサイ ウサギ ノ ウ', + 'ィ': 'チイサイ イチゴ ノ イ', + 'ッ': 'チイサイ ツバメ ノ ツ', + 'ョ': 'チイサイ ヨット ノ ヨ', + 'ュ': 'チイサイ ユカタ ノ ユ', + 'ャ': 'チイサイ ヤカン ノ ヤ', + '貝': 'カイガラ ノ カイ', + '貞': 'テイシュク ノ テイ', + '貘': 'ムジナヘンノドウブツノバク', + '貔': 'ユウモウナグンタイヲイミスルヒキュウノヒ', + '貍': 'リ、ムジナヘンニサトガエリノサト', + '貌': 'ビボウ ノ ボウ,カタチ', + '貎': 'ゲイ、ムジナヘンニジドウセイトノジノキュウジ', + '貉': 'ムジナヘンノドウブツノムジナ', + '貊': 'ハク、ムジナヘンニカンスウジノヒャク', + '倍': 'バイリツ ノ バイ', + '貂': 'ドウブツノテン', + '貽': 'イズシノイ、カイヘンニダイドコロノダイ', + '貼': 'ハル,カイヘン ニ ウラナウ', + '貿': 'ボウエキコウ ノ ボウ', + '貸': 'ホンヲカス ノ カ', + '費': 'ショウヒ ノ ヒ', + '貴': 'キチョウヒン ノ キ', + '買': 'カウ,バイシュウ ノ バイ', + '貶': 'キヨホウヘンノヘン,オトシメル', + '貰': 'モラウ', + '貳': 'カンスウジノニ,シキガマエニ,ニノシタニカイガラノカイ', + '貲': 'シ、ヒガンシガンノシノシタニカイガラノカイ', + '貭': 'シツモンノシツノイタイジ', + '責': 'セキニン ノ セキ', + '貯': 'チョキン ノ チョ,タクワエル', + '貮': 'カンスウジノニノイタイジ,ブキノブノトメルノカワリニカイガラノカイ', + '販': 'ハンバイスル ノ ハン', + '貨': 'カモツ ノ カ', + '貫': 'イッカンスル ノ カン,ツラヌク', + '貪': 'ドンヨクノドン、ムサボル', + '貧': 'ヒンジャク ノ ヒン,マズシイ', + '財': 'ザイサン ノ ザイ', + '負': 'カチマケ ノ マケ,フ', + '貢': 'シャカイコウケンスル ノ コウ,ミツグ', + '龜': 'ドウブツノカメノキュウジ', + '△': 'サンカク', + '▲': 'クロサンカク', + '▽': 'ギャクサンカク', + '▼': 'クロギャクサンカク', + '□': 'シカク', + '■': 'クロシカク', + '癇': 'カンシャクヲオコスノカン', + '癆': 'ロウガイノロウ,ヤマイダレニロウドウノロウノキュウジ', + '露': 'ロシュツ ノ ロ,ツユ', + '療': 'チリョウスル ノ リョウ', + '霰': 'アラレ、アメカンムリニサンンポスルノサン', + '霾': 'バイ、アメカンムリニムジナヘンニサトガエリノサト', + '癌': 'ガンサイボウ ノ ガン', + '霸': 'セイハスルノハノキュウジ', + '癈': 'ハイジンノハイ,ヤマイダレニハツメイノハツノキュウジ', + '癖': 'アクヘキ ノ ヘキ,クセ', + '霤': 'リュウ、アメカンムリニリュガクノリュウ', + '癒': 'チユスル ノ ユ,イヤス', + '癜': 'ヒフビョウノナマズ,テン,ヤマイダレニトノサマノトノ', + '霪': 'イン、アメカンムリニインランノイン', + '癘': 'ショウレイノレイ,ヤマイダレニスウジノマンノキュウジ', + 'O': 'オー オープン', + '癢': 'ヨウ,ヤマイダレニヤシナウ', + '癡': 'グチノチノキュウジ', + '霑': 'テン、アメカンムリニサンズイニドクセンスルノセン', + '霞': 'ハルガスミ ノ カスミ', + '霜': 'シモバシラ ノ シモ', + '癬': 'カイセンキンノセン', + '癪': 'カンシャクヲオコスノシャク', + '癩': 'ライビョウノライ', + '癨': 'カク,ヤマイダレニオニノカクランノカク', + '霆': 'テイ、アメカンムリニキュウテイブンガクノテイ', + '癶': 'ハツ,ブシュノハツガシラ', + '霄': 'ショウ、アメカンムリニショウゾウガノショウ', + '癲': 'テンカンヲオコスノテン', + '需': 'ヒツジュヒン ノ ジュ', + '癰': 'ヒフビョウノヨウ', + '霎': 'ソウ、アメカンムリニメカケ', + '百': 'カンスウジ ノ ヒャク', + '白': 'シロイ,ハクチョウ ノ ハク', + '發': 'ハツメイノハツノキュウジ', + '登': 'トザン ノ ト,ノボル', + '発': 'ハツメイ ノ ハツ', + '霈': 'ハイ、アメカンムリニハイゼンタルノハイ', + '癸': 'キ,ジッカンノミズノト', + '侵': 'シンリャク ノ シン,オカス', + '倏': 'シュク,ジョウケンノジョウノキュウジノキノカワリニドウブツノイヌ', + '侶': 'ソウリョ ノ リョ', + '個': 'コセイテキ ノ コ', + '倉': 'ソウコ ノ ソウ,クラ', + '倆': 'リョウ,ニンベンニリョウテノリョウノキュウジ', + '便': 'ユウビン ノ ビン,タヨリ', + '倅': 'セガレ,ニンベンニソツギョウノソツ', + '借': 'シャクヨウ ノ シャクカリル', + '価': 'カチ ノ カ,アタイ', + '侠': 'ニンキョウ ノ キョウ', + '候': 'リッコウホ ノ コウ', + '侭': 'ワガママ ノ ママ,ニンベン ニ ツクス', + '侯': 'オウコウキゾク ノ コウ', + '侮': 'ブジョクスル ノ ブ,アナドル', + '倒': 'トウサンスル ノ トウ,タオレル', + '侫': 'カンネイノネイノイタイジ', + '們': 'モン,ニンベンニセンモンノモン', + '倬': 'タク,ニンベンニタッキュウノタク', + '侖': 'リン,シャリンノリンノツクリ', + '侑': 'ユウ,ニンベンニユウメイジンノユウ', + '倫': 'リンリテキナ ノ リン', + '倨': 'キョゴウノキョ,ニンベンニジュウキョノキョ', + '倩': 'セン,ニンベンニアオノキュウジタイ', + '依': 'イライスル ノ イ', + '値': 'ネダン ノ ネ,アタイ', + '倥': 'コウ,ニンベンニクウキノクウ', + '倣': 'モホウスル ノ ホウ,ナラウ', + '供': 'テイキョウスル ノ キョウ,ソナエル', + '倡': 'ショウ,ニンベンニガッショウキョクノショウノツクリ', + '來': 'ライネンノライ,クルノキュウジ', + '侃': 'カンカンガクガク ノ カン', + '倹': 'ケンヤクスル ノ ケン', + '侍': 'ジジュウ ノ ジ,サムライ', + '侏': 'シュジュノシュ,ニンベンニシュイロノシュ', + '侈': 'シャシニナガレルノシ,ニンベンニオオイスクナイノオオイ', + '例': 'レイダイ ノ レイ,タトエル', + '濤': 'ドトウノトウ,ナミ', + '濠': 'ゴウ,サンズイ ニ ゴウカイナ ノ ゴウ', + '濡': 'ヌレル', + '濬': 'シュン,サンズイニヒエイザンノエイノヒダリガワ', + '濮': 'ボク,サンズイニイチニンショウノボク', + '濯': 'センタクモノ ノ タク', + '濫': 'カセン ノ ハンラン ノ ラン', + '濶': 'ウカツナノカツノイタイジ', + '濱': 'スナハマノハマノキュウジ', + '濳': 'センスイカンノセン,モグルノイタイジ', + '濾': 'ロカスルノロ,コス', + '濺': 'セン,サンズイニゲセンナノセン', + '濆': 'フン,サンズイニフンカスルノフンノツクリ', + '激': 'カゲキ ノ ゲキ,ハゲシイ', + '濁': 'ニゴル,ダクリュウ ノ ダク', + '濂': 'レン,サンズイニレンカバンノレン', + '濃': 'ノウタン ノ ノウ,コイ', + '濔': 'ビ,サンズイニソツジナガラノジ', + '濕': 'シツドノシツ,シメルノキュウジ', + '濟': 'キュウサイスルノサイ,スマスノキュウジ', + '濘': 'デイネイノネイ,サンズイニテイネイノネイ', + '濛': 'モウ,サンズイニケイモウスルノモウ', + '郁': 'フクイク ノ イク', + '飆': 'ツムジカゼ,ヒョウ,カゼノヒダリニイヌミッツ', + 'P': 'ピー パパ', + '蟶': 'マテガイノマテ,ムシヘンニヒジリ', + '蟷': 'カマキリヲイミスルトウロウノトウ,ムシヘンニベントウノトウノキュウジ', + '蟲': 'ムシ,コンチュウノチュウノキュウジ', + '蟾': 'セン,ムシヘンニタンニンノタンノキュウジノツクリ', + '蟻': 'ムシ ノ アリ,ギ', + '蟹': 'カニ', + '蟠': 'ワダカマル,ハン,ムシヘンニバンゴウノバン', + '蟯': 'ギョウチュウノギョウ', + '蟒': 'ウワバミヲイミスルボウ,クサカンムリニソウモウノシンノモウ', + '蟐': 'アカガエル,ムシヘンニヒジョウグチノジョウ', + '蟆': 'ガマガエル,バクノイタイジ', + '蟇': 'ガマガエル,バク', + '蟄': 'ケイチツノチツ', + '蟀': 'コオロギノニモジメ,ムシヘンニソツギョウノソツ', + '蟋': 'コオロギノイチモジメ,ムシヘンニノゴメノシタニココロ', + '飫': 'ヨ,アキル,ショクヘンニヒヨクナトチノヨクノツクリ', + '飩': 'ドン,ウドンノニモジメ', + '飢': 'キガ ノ キ,ウエル', + '&': 'アンド', + '¥': 'エンマーク', + '£': 'ポンド', + '¢': 'セント', + ' ̄': 'オーバーライン', + '¬': 'ヒテイ', + '乖': 'カイリスルノカイ,ソムクノイミ', + '示': 'テンジスル ノ ジ,シメス', + '礼': 'レイギ ノ レイ', + '社': 'シャカイ ノ シャ,ヤシロ', + '礦': 'コウ,イシヘンニヒロバノヒロノキュウジ', + '礪': 'トナミヘイヤノト', + '礫': 'ガレキノレキ', + '礬': 'コウブツノミョウバンノバン', + '礑': 'トウ,イシヘンニベントウノトウノキュウジ', + '礒': 'ギ,イシヘンニギムノギ', + '乍': 'ムカシナガラ ノ ナガラ', + '礙': 'ガイ,イシヘンニウタガウ', + '礁': 'サンゴショウ ノ ショウ', + '乏': 'ビンボウ ノ ボウ,トボシイ', + '礇': 'イキ,イシヘンニオクバノオクノキュウジ', + '礎': 'キソテキナ ノ ソ,イシズエ', + '昼': 'ヒルヤスミ ノ ヒル,チュウ', + '昿': 'コウ,ニチヘンニヒロイ', + '昵': 'ジッコンノアイダガラノジツ,ニチヘンニアマデラノアマ', + '昴': 'スバル', + '鷭': 'バン,バンゴウノバンノミギニトリ', + '昶': 'チョウ,エイキュウノエイノミギニニチヨウビノニチ', + '昭': 'ショウワウマレ ノ ショウ', + '是': 'ゼヒ ノ ゼ', + '昨': 'サクネン ノ サク', + '春': 'ハルヤスミ ノ ハル,シュン', + '昧': 'アイマイナ ノ マイ', + '映': 'エイガ ノ エイ,ウツス', + '鷹': 'トリ ノ タカ', + '鷸': 'イツ,タチバナノツクリノミギニトリ,シギ', + '昜': 'ヨウ,タイヨウケイノヨウノツクリ', + '星': 'ホシ,セイザ ノ セイ', + '鷄': 'ニワトリノキュウジ', + '鷂': 'テン,マゴコロノマノミギニトリ', + '鷁': 'ゲキ,リエキノエキノミギニトリ,アオサギ', + '鷏': 'テン,マゴコロノマノミギニトリ', + '昔': 'ムカシバナシ ノ ムカシ', + '易': 'ボウエキ ノ エキ,ヤサシイ', + '昌': 'ショウ,ニチ ノ シタニ ニチ', + '昏': 'コンスイスル ノ コン', + '明': 'セツメイ ノ メイ,アカルイ', + '鷓': 'トリノシャコノシャ,ショミンノショノミギニトリ', + '倪': 'タンゲイノゲイ,ニンベンニヌラムノツクリ', + '昇': 'ショウカクスル ノ ショウ,ノボル', + '昆': 'コンチュウ ノ コン', + '昃': 'ソク,ニチヨウビノニチノシタニソクブンスルノソク', + '昂': 'ゲキコウスル ノ コウ', + '└': 'ヒダリシタ', + '┗': 'フトヒダリシタ', + '┐': 'ミギウエ', + '┓': 'フトミギウエ', + '鐃': 'ドウ、カネヘンニギョウシュンノギョウノキュウジ', + '┝': 'タテセンフトミギ', + '├': 'タテセンミギ', + '┘': 'ミギシタ', + '┛': 'フトミギシタ', + '━': 'フトヨコセン', + '─': 'ヨコセン', + '┃': 'フトタテセン', + '│': 'タテセン', + '┌': 'ヒダリウエ', + '┏': 'フトヒダリウエ', + '┴': 'ヨコセンウエ', + '┷': 'フトヨコセンホソウエ', + '┰': 'ヨコセンフトシタ', + '┳': 'フトヨコセンシタ', + '┼': 'クロス', + '┿': 'フトヨコセンクロス', + '┸': 'ヨコセンフトウエ', + '┻': 'フトヨコセンウエ', + '┥': 'タテセンフトヒダリ', + '┤': 'タテセンヒダリ', + '┠': 'フトタテセンホソミギ', + '┣': 'フトタテセンミギ', + '┬': 'ヨコセンシタ', + '┯': 'フトヨコセンホソシタ', + '┨': 'フトタテセンホソヒダリ', + '┫': 'フトタテセンヒダリ', + '盈': 'ミチル,エイ', + '益': 'リエキ ノ エキ', + '盍': 'コウ,フタカラクサカンムリヲトッタカタチ', + '盃': 'サカズキ,フシギ ノ フ ノ シタニ サラ', + '盂': 'ウラボンノウ', + '盆': 'ボンオドリ ノ ボン', + '盛': 'オオモリ ノ モリ,セイ', + '盜': 'トウナンノトウ,ヌスムノキュウジ', + '盟': 'ドウメイスル ノ メイ', + '盞': 'サン,サラノウエニアサイノキュウジノツクリ', + '盒': 'ハンゴウスイサンノゴウ', + '盗': 'トウナン ノ トウ,ヌスム', + '盖': 'フタノイタイジ,サラノウエニヒツジ', + '盪': 'ノウシントウノトウ', + '目': 'モクテキ ノ モク,メ', + '盡': 'ジンリョクスルノジン,ツクスノキュウジ', + '監': 'カントクスル ノ カン', + '盥': 'タライ,カン', + '盤': 'エンバンナゲ ノ バン', + '盧': 'ロ,ロカスルノロノツクリ', + '相': 'ソウダンスル ノ ソウ,アイ', + '盻': 'ケイ,メヘンニカンスウジノハチノシタニバンゴウノゴウノシタガワ', + '盾': 'ムジュン ノ ジュン,タテ', + '钁': 'カク,カネヘンニゲンキカクシャクノカク', + '盲': 'モウガッコウ ノ モウ', + '直': 'チョクセン ノ チョク,ナオル', + '鄒': 'スウ,スウセイノスウノツクリノミギニオオザト', + '鐘': 'ケイショウヲナラス ノ ショウ,カネ', + '廿': 'カンスウジ ノ ニジュウ', + '廾': 'キョウ,ブシュノニジュウアシ', + '廼': 'エンニョウ ニ ニシ,ナイ', + '廻': 'エンニョウ ニ マワル ノ カイ', + '建': 'ケンチク ノ ケン,タテル', + '廸': 'テキ,エンニョウニリユウノユウ', + '廷': 'キュウテイブンガク ノ テイ', + '延': 'エンキスル ノ エン,ノビル', + '廴': 'イン,ブシュノエンニョウ', + '廳': 'チョウ,キショウチョウノチョウノキュウジ', + '廱': 'ヨウ,マダレニカワ,クチ,トモエ,フルトリ', + '廰': 'チョウ,キショウチョウノチョウノキュウジノイタイジ', + '廬': 'ロザンノロ,マダレニハゼノキノハゼノツクリ', + '廩': 'リン,マダレニリンギスルノリン', + '廨': 'カイ,マダレニカイケツスルノカイ', + '廣': 'ヒロバノヒロノキュウジ', + '廢': 'ハイシスルノハイ,スタレルノキュウジ', + '廡': 'ブ,マダレニムリノム', + '廠': 'カイグンコウショウ ノ ショウ', + '廟': 'レイビョウ ノ ビョウ', + '廝': 'シ,マダレニシカイノケンイノシ', + '廛': 'テン,マトイノツクリ', + '廚': 'チュウボウノチュウ,クリヤノキュウジ', + 'g': 'ジー ゴルフ', + '廖': 'リョウ,マダレニゴビュウノビュウノツクリ', + '廓': 'ユウカク ノ カク,クルワ', + '廐': 'キュウシャノキュウ,ウマヤノイタイジ,キバ', + '廏': 'キュウシャノキュウ,ウマヤノイタイジ,ルマタ', + '廊': 'ワタリロウカ ノ ロウ', + '廉': 'レンカバン ノ レン', + '廈': 'カ,マダレニナツ', + '廃': 'ハイシスル ノ ハイ,スタレル', + '廂': 'ショウ,マダレニソウダンスルノソウ', + '廁': 'カワヤ,マダレニホウソクノソク', + '贇': 'ゲンピンヤキノイン', + '贅': 'ゼイタクノゼイ', + '贄': 'イケニエノニエ', + '贏': 'カチマケヲイミスルエイシュノエイ', + '贍': 'セン,カイヘンニクシンサンタンノタンノツクリ', + '贋': 'ガンサク ノ ガン,ニセ', + '贊': 'サンセイハンタイノサンノキュウジ', + '贈': 'ゾウトウヒン ノ ゾウ,オクル', + '贖': 'ショクザイノショク,アガナウ', + '贔': 'ヒイキノヒ、カイミッツ', + '贓': 'ゾウブツザイノゾウ', + '贐': 'ハナムケ、ジン', + '=': 'イコール', + '葹': 'シ,クサカンムリニホドコス', + '葺': 'ヤネヲフク ノ フク', + '葱': 'ショクブツ ノ ネギ', + '葵': 'アオイマツリ ノ アオイ', + '葷': 'クンシュサンモンニイルヲユルサズノクン', + '葩': 'ハ,クサカンムリニシロイノミギニトモエ', + '葫': 'コ、クサカンムリニミズウミノツクリ', + '葬': 'ソウシキ ノ ソウ,ホウムル', + '葭': 'カ、アシ、クサカンムリニヒマツブシノヒマノツクリ', + '葮': 'タン、クサカンムリニシュダンノダン', + '葯': 'ヤク,クサカンムリニヤクソクノヤク', + '葡': 'ブドウシュ ノ ブ', + '葢': 'フタノイタイジ,クサカンムリニフトイニサラ', + '董': 'コットウヒン ノ トウ', + '葦': 'アシブエ ノ アシ', + '葛': 'カットウ ノ カツ,クズ', + '著': 'チョシャ ノ チョ,イチジルシイ', + '葉': 'キノハ ノ ハ,ヨウ', + '葎': 'ショクブツ ノ ムグラ,クサカンムリ ニ ホウリツ ノ リツ', + '嬾': 'ラン,オンナヘンニタヨルノキュウジ', + '葆': 'ホウ、クサカンムリニホアンノホ', + '丿': 'ヘツ,カタカナノノノカタチ', + '垓': 'カズノタンイノガイ', + '主': 'シュジンコウ ノ シュ,ヌシ', + '丹': 'タンネンナ ノ タン', + '丸': 'ヒノマル ノ マル,ガン', + '丶': 'チュウ,ブンノクギリフゴウ,カタチハテン', + '串': 'クシカツノ クシ', + '丱': 'カン,アゲマキ', + '垂': 'スイチョク ノ スイ,タレル', + '个': 'カ,モノノタンイ,ヤネノシタニタテボウ', + '垈': 'タイ,ダイヒョウシャノダイノシタニツチ', + '垉': 'ホウ,ツチヘンニツツム', + '型': 'モケイ ノ ケイ,カタ', + '両': 'リョウテ ノ リョウ', + '垰': 'タオ,ツチヘンニウエトシタ', + '丞': 'ダイジンヲ イミスル ジョウショウ ノ ジョウ', + '垳': 'ガケ,ツチヘンニリョコウスルノコウ', + '丙': 'コウオツヘイ ノ ヘイ', + '丘': 'サキュウ ノ キュウ,オカ', + '丗': 'セカイノセノキュウジ', + '世': 'セカイ ノ セ,ヨ', + '丕': 'ヒ,フシギノフノシタニカンスウジノイチ', + '且': 'ナオカツ ノ カツ', + '丑': 'ウシ,ジュウニシ ノ ウシ', + '丐': 'カイ,コウ,アタエルノイミ', + '垠': 'ギン,ツチヘンニダイコンノコンノツクリ', + '与': 'アタエル,キュウヨ ノ ヨ', + '垢': 'テアカ ノ アカ,コウ', + '垣': 'カキネ ノ カキ', + '垤': 'テツ,アリヅカ,ツチヘンニゲシノシ', + '上': 'ジョウゲ ノ ジョウ,ウエ', + '三': 'カンスウジ ノ サン', + '丈': 'ダイジョウブ ノ ジョウ,タケ', + '万': 'マンネンヒツ ノ マン', + '垪': 'ハ,ツチヘンニヘイゴウノヘイノツクリ', + '七': 'カンスウジ ノ ナナ', + '丁': 'イッチョウメ ノ チョウ', + '一': 'カンスウジ ノ イチ', + '潮': 'マンチョウ ノ チョウ,シオ', + '潯': 'ジン,サンズイニジンジョウショウガッコウノジン', + '潭': 'タン,サンズイニニシノシタニハヤオキノハヤイ', + '潦': 'ロウ,サンズイニメイリョウナノリョウノツクリ', + '潤': 'リジュン ノ ジュン,ウルオウ', + '潼': 'トウ,サンズイニグリムドウワノドウ', + '潺': 'サン,サンズイニシカバネノシタニコドモノコミッツ', + '潸': 'サン,サンズイニハヤシノシタニツキ', + '潴': 'チョ,サンズイニイノシシ', + '潰': 'ツブレル,イカイヨウ ノ カイ', + '潅': 'カンボク ノ カン', + '潁': 'エイ,カタカナノヒノシタニミズ,ソノミギニページ', + '潟': 'ニイガタケン ノ カタ', + '潜': 'センスイカン ノ セン,モグル', + '潛': 'センスイカンノセン,モグルノキュウジ', + '潘': 'ハン,サンズイニバンゴウノバン', + '潔': 'セイケツ ノ ケツ', + '禺': 'グウ,グウゼンノグウノツクリ', + '禹': 'チュウゴクノデンセツノオウノウ', + '禾': 'ノギヘン ノ ノギ,カ', + '禿': 'ハゲヤマ ノ ハゲ', + '禽': 'モウキンルイ ノ キン', + '禳': 'ジョウ,シメスヘンニユズルノキュウジノツクリ', + '禰': 'スクネ ノ ネ,シメスヘン ニ ナンジ', + '禪': 'ザゼンノゼンノキュウジ', + '禮': 'レイギノレイノキュウジ', + '禦': 'ボウギョ ノ ギョ ノ キュウジ', + '禧': 'キ,シメスヘンニヨロコブ', + '禝': 'シャショクノシンノショク,シメスヘン', + '禊': 'ミソギ,ケイ', + '禎': 'テイ,シメスヘン ニ テイシュク ノ テイ', + '福': 'フクビキ ノ フク', + '禍': 'ワザワイ,カ', + '禀': 'リンギショノリンノイタイジ', + '禁': 'キンシスル ノ キン', + '禄': 'ゲンロクブンカ ノ ロク', + '禅': 'ザゼン ノ ゼン', + '鵬': 'オオトリ,ホウユウ ノ ホウニトリ', + '鵯': 'ヒヨドリ,ヒクツナノヒノミギニトリ', + '鵡': 'トリ ノ オウム ノ ム', + '鵠': 'コウコク ノ ココロザシ ノ コク', + '鵤': 'ツノヘンニトリ,イカルガ', + '鵺': 'ヨゾラノヨノミギニトリ,ヌエ', + '鵲': 'カササギ,ムカシノミギニトリ', + '鵈': 'ミミヘンニトリ,トビ', + '鵁': 'コウ,コウツウノコウノミギニトリ', + '鵄': 'シ,ゲシノシノミギニトリ', + '鵆': 'ギョウガマエノナカニトリ,チドリ', + '鵙': 'ケキ,カイヘンニトリ', + '鵝': 'ガ,ガマンノガノミギニトリ,ガチョウノガ', + '鵜': 'ウノミニスル ノ ウ', + '鵞': 'ガ,ガマンノガノシタニトリ,ガチョウノガ', + '鵑': 'ケン,キヌイトノキヌノツクリノミギニトリ', + '鵐': 'ブ,ジンジャノミコノフノミギニトリ', + '~': 'チルダ', + '古': 'フルイ,コダイ ノ コ', + 'T': 'ティー タイム', + '枇': 'ショクブツ ノ ビワ ノ ビ,キヘン ニ クラベル', + '枅': 'ケイ,キヘンニセイホウケイノケイノヒダリガワ', + '枌': 'フン、キヘンニハンブンノブン', + '枋': 'ホウ、キヘンニセイホウケイノホウ', + '枉': 'オウ、マガル、キヘンニオウサマノオウ', + '林': 'シンリン ノ リン,ハヤシ', + '枕': 'マクラ', + '析': 'ブンセキスル ノ セキ', + '枝': 'キノエダ ノ エダ', + '果': 'ケッカ ノ カ,ハタス', + '枚': 'マイスウ ノ マイ', + '枦': 'ハゼノキノハゼノイタイジ,キヘンニトジマリノト', + '枢': 'チュウスウ ノ スウ', + '枡': 'マス、キヘンニイッショウビンノショウ', + '枠': 'ソトワク ノ ワク', + '枯': 'カレル,コカツスル ノ コ', + '枩': 'マツノキノマツノイタイジ', + '枷': 'カ,キヘンニカソクドノカ', + '架': 'ジュウジカ ノ カ,カケル', + '枴': 'カイ,キヘンニユウカイハンノカイノツクリ', + '枳': 'カラタチ,キヘンニタダイマノタダ', + '枹': 'フ,キヘンニヒョウガフルノヒョウノシタガワ', + '枸': 'ク,キヘンニハイクノク', + 'в': 'キリル ヴェー', + 'г': 'キリル ゲー', + 'а': 'キリル アー', + 'б': 'キリル ベー', + 'ж': 'キリル ジェー', + 'з': 'キリル ゼー', + 'д': 'キリル デー', + 'е': 'キリル ィエー', + 'к': 'キリル カー', + 'л': 'キリル エル', + 'и': 'キリル イー', + 'й': 'キリル イークラトコエ', + 'о': 'キリル オー', + 'п': 'キリル ペー', + 'м': 'キリル エム', + 'н': 'キリル エヌ', + 'Т': 'キリル テー', + 'У': 'キリル ウー', + 'Р': 'キリル エル', + 'С': 'キリル エス', + 'Ц': 'キリル ツェー', + 'Ч': 'キリル チェー', + 'Ф': 'キリル エフ', + 'Х': 'キリル ハー', + 'Ъ': 'キリル コウオンキゴウ', + 'Ы': 'キリル ウィ', + 'Ш': 'キリル シャー', + 'Щ': 'キリル シシャー', + 'Ю': 'キリル ユー', + 'Я': 'キリル ヤー', + 'Ь': 'キリル ナンオンキゴウ', + 'Э': 'キリル エー', + 'В': 'キリル ヴェー', + 'Г': 'キリル ゲー', + 'А': 'キリル アー', + 'Б': 'キリル ベー', + 'Ж': 'キリル ジェー', + 'З': 'キリル ゼー', + 'Д': 'キリル デー', + 'Е': 'キリル ィエー', + 'К': 'キリル カー', + 'Л': 'キリル エル', + 'И': 'キリル イー', + 'Й': 'キリル イークラトコエ', + 'О': 'キリル オー', + 'П': 'キリル ペー', + 'М': 'キリル エム', + 'Н': 'キリル エヌ', + '鑽': 'ケンサンヲツムノサン', + 'Ё': 'キリル ィヨー', + '趨': 'スウセイ ノ スウ', + '又': 'マタガシ ノ マタ', + '鐇': 'ハン、カネヘンニバンゴウノバン', + '趣': 'シュミ ノ シュ,オモムキ', + '鐓': 'タイ、カネヘンニチュウゴクノトンコウノトン', + '鐐': 'リョウ、カネヘンニドウリョウノリョウノツクリ', + '趺': 'フ,アシヘンニオット', + '鐔': 'タン,カネヘンニニシノシタニハヤオキノハヤイ', + '趾': 'ジョウシコウエンノシ', + '鐚': 'ビタイチモンノビタ', + '足': 'アシ,エンソク ノ ソク', + '鐙': 'アブミ', + '越': 'ユウエツカン ノ エツ,コス', + '趁': 'チン,ソウニョウニメズラシイノツクリ', + '鐫': + 'セン、カネヘンニフルトリノシタニオウトツノオウノシタ1カクヲトッタモノ', + '*': 'アスタリスク', + '超': 'チョウノウリョク ノ チョウ,コエル', + '趙': 'チュウゴクノコクメイノチョウ', + '鐶': 'カン、カネヘンニジュンカンスルノカンノツクリ', + '鐵': 'テツドウノテツノキュウジ', + '鐺': 'トウ、カネヘンニベントウノトウノキュウジ', + '鐸': 'ドウタク ノ タク', + '叔': 'オジオバ ノ シュク', + '叟': 'サンバソウノソウ,オキナ', + '霏': 'ヒ、アメカンムリニヒジョウグチノヒ', + '幀': 'テイ,ハバヘンニテイシュクナノテイ', + '幃': 'イ,ハバヘンニイダイナノイノツクリ', + '幅': 'ゾウフクスル ノ フク,ハバ', + '幄': 'アク,ハバヘンニオクジョウノオク', + '幇': 'ホウジョスルノホウ', + '幌': 'ホロバシャ ノ ホロ', + '幎': 'ベイ,ハバヘンニメイフクヲイノルノメイ', + '幕': 'ジマク ノ マク', + '幔': 'マンマクノマン,ハバヘンニウナギノツクリ', + '幗': 'カク,ハバヘンニクニノキュウジ', + '輿': 'タマノコシ ノ コシ', + '幟': 'キシヲセンメイニスルノシ,ノボリ', + '幡': 'ヤハタ ノ ハタ', + '幣': 'ゾウヘイキョク ノ ヘイ', + '幢': 'トウ,ハバヘンニグリムドウワノドウ', + '幤': 'ゾウヘイキョクノヘイノイタイジ', + '平': 'ヘイワ ノ ヘイ,タイラ', + '干': 'カンチョウ ノ カン,ホス', + '幵': 'ケン,ホスガフタツ', + '年': 'ガクネン ノ ネン,トシ', + '并': 'ヘイ,ヘイヨウスルノヘイノツクリ', + '幹': 'シンカンセン ノ カン,ミキ', + '幸': 'コウフク ノ コウ,シアワセ', + '幻': 'マボロシ,ゲンソウ ノ ゲン', + '幺': 'ヨウ,ブシュノイトガシラ', + '幽': 'ユウレイセン ノ ユウ', + '幼': 'ヨウチエン ノ ヨウ,オサナイ', + '广': 'ゲン,ブシュノマダレ', + '幾': 'キカガク ノ キ', + '煖': 'ダン,ヒヘンニダンボウノダンノツクリ', + '煕': 'コウキジテンノキ', + '雛': 'ヒナマツリ ノ ヒナ', + '煙': 'エントツ ノ エン,ケムリ', + '煉': 'レンガ ノ レン,ネル', + '煎': 'センチャ ノ セン,イル', + '煌': 'コウ,ヒヘンニコウタイシノコウ', + '煽': 'アオル,センドウスル ノ セン', + '煢': 'ケイ,ホタルノキュウジノカンムリニジンソクナノジンノナカミ', + '照': 'ショウメイ ノ ショウ,テラス', + '煦': 'ク,ヨウビノニチノミギニハイクノクニレンガ', + '煥': 'サイキカンパツノカン', + '煤': 'スス,バイエン ノ バイ', + '煩': 'ボンノウ ノ ボン,ワズラワシイ', + '煮': 'ニモノ ノ ニ,シャフツ ノ シャ', + '煬': 'ヨウ,ヒヘンニタイヨウケイノヨウノツクリ' +};
diff --git a/chrome/browser/resources/local_ntp/externs.js b/chrome/browser/resources/local_ntp/externs.js index 1087a17..a22e770 100644 --- a/chrome/browser/resources/local_ntp/externs.js +++ b/chrome/browser/resources/local_ntp/externs.js
@@ -33,7 +33,6 @@ * isGooglePage: boolean, * realboxEnabled: boolean, * richerPicker: boolean, - * showPlaceholderOnFocus: boolean, * translatedStrings: Array<string>}} */ let configData;
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css index ef4c5ba..7035dd50 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.css +++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -177,7 +177,7 @@ color: rgb(117, 117, 117); } -#realbox:not(.show-placeholder):focus::placeholder { +#realbox:focus::placeholder { color: transparent; } @@ -389,8 +389,8 @@ } } -body.fakebox-drag-focused #fakebox-text:not(.show-placeholder), -body.fakebox-focused #fakebox-text:not(.show-placeholder) { +body.fakebox-drag-focused #fakebox-text, +body.fakebox-focused #fakebox-text { visibility: hidden; } @@ -539,7 +539,7 @@ } @media (prefers-color-scheme: dark) { - body:not(.light-chip) .default-theme.dark #mv-msg { + body:not(.light-chip) #mv-msg { color: rgb(var(--GG200-rgb)); } }
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js index 9620713..c15db99 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.js +++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -72,8 +72,6 @@ CLOCK_ICON: 'clock-icon', // Applies styles to dialogs used in customization. CUSTOMIZE_DIALOG: 'customize-dialog', - DARK: 'dark', - DEFAULT_THEME: 'default-theme', DELAYED_HIDE_NOTIFICATION: 'mv-notice-delayed-hide', // Extended and elevated style for customization entry point. ENTRY_POINT_ENHANCED: 'ep-enhanced', @@ -98,8 +96,6 @@ SHOW_ELEMENT: 'show-element', // When the realbox has matches to show. SHOW_MATCHES: 'show-matches', - // Applied when the fakebox placeholder text should not be hidden on focus. - SHOW_PLACEHOLDER: 'show-placeholder', URL_ICON: 'url-icon', // Global/favicon/url icon. // Applied when the doodle notifier should be shown instead of the doodle. USE_NOTIFIER: 'use-notifier', @@ -747,8 +743,6 @@ if (configData.realboxEnabled) { const realboxEl = $(IDS.REALBOX); realboxEl.placeholder = configData.translatedStrings.searchboxPlaceholder; - realboxEl.classList.toggle( - CLASSES.SHOW_PLACEHOLDER, configData.showPlaceholderOnFocus); realboxEl.addEventListener('copy', onRealboxCutCopy); realboxEl.addEventListener('cut', onRealboxCutCopy); realboxEl.addEventListener('input', onRealboxInput); @@ -767,10 +761,6 @@ utils.disableOutlineOnMouseClick($(IDS.REALBOX_MICROPHONE)); } else { - if (configData.showPlaceholderOnFocus) { - $(IDS.FAKEBOX_TEXT).classList.add(CLASSES.SHOW_PLACEHOLDER); - } - // Set up the fakebox (which only exists on the Google NTP). ntpApiHandle.oninputstart = onInputStart; ntpApiHandle.oninputcancel = onInputCancel; @@ -1398,8 +1388,6 @@ return; } - $(IDS.NTP_CONTENTS).classList.toggle(CLASSES.DARK, info.isNtpBackgroundDark); - // Update dark mode styling. isDarkModeEnabled = window.matchMedia('(prefers-color-scheme: dark)').matches; document.body.classList.toggle('light-chip', !getUseDarkChips(info)); @@ -1593,9 +1581,6 @@ mvxFilter = 'drop-shadow(0 0 0 ' + textColor + ')'; } - $(IDS.NTP_CONTENTS) - .classList.toggle(CLASSES.DEFAULT_THEME, themeInfo.usingDefaultTheme); - document.body.style.setProperty('--text-color', textColor); document.body.style.setProperty('--text-color-light', textColorLight); }
diff --git a/chrome/browser/resources/print_preview/polymer3/demo.js b/chrome/browser/resources/print_preview/polymer3/demo.js index 7474448..7e062bfa 100644 --- a/chrome/browser/resources/print_preview/polymer3/demo.js +++ b/chrome/browser/resources/print_preview/polymer3/demo.js
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'chrome://resources/cr_components/managed_footnote/managed_footnote.m.js'; import 'chrome://resources/cr_elements/action_link_css.m.js'; import 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.m.js'; import 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; @@ -25,6 +26,7 @@ import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js'; import 'chrome://resources/js/action_link.js'; import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; +import '../strings.m.js'; import * as crToastManager from 'chrome://resources/cr_elements/cr_toast/cr_toast_manager.m.js'; import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -156,6 +158,10 @@ Show toast for 2s </cr-button> </div> + + <div> + <managed-footnote></managed-footnote> + </div> `; }
diff --git a/chrome/browser/resources/settings/people_page/people_page.html b/chrome/browser/resources/settings/people_page/people_page.html index 71edbc8..ffd0530 100644 --- a/chrome/browser/resources/settings/people_page/people_page.html +++ b/chrome/browser/resources/settings/people_page/people_page.html
@@ -181,10 +181,10 @@ aria-describedby="profile-name"></cr-icon-button> </if> <if expr="chromeos"> - <cr-icon-button class="subpage-arrow" + <cr-icon-button class$="[[profileRowIconClass_]]" id="profile-subpage-arrow" hidden="[[!isProfileActionable_]]" - aria-label="$i18n{changePictureTitle}" + aria-label$="[[profileRowIconAriaLabel_]]" aria-describedby="profile-name"></cr-icon-button> </if> </div>
diff --git a/chrome/browser/resources/settings/people_page/people_page.js b/chrome/browser/resources/settings/people_page/people_page.js index 8b3c821b..ec7591d 100644 --- a/chrome/browser/resources/settings/people_page/people_page.js +++ b/chrome/browser/resources/settings/people_page/people_page.js
@@ -98,8 +98,16 @@ isProfileActionable_: { type: Boolean, value: function() { - // On Chrome OS, only allow when SplitSettings is disabled. - return cr.isChromeOS ? loadTimeData.getBoolean('showOSSettings') : true; + if (!cr.isChromeOS) { + // Opens profile manager. + return true; + } + if (loadTimeData.getBoolean('showOSSettings')) { + // Pre-SplitSettings opens change picture. + return true; + } + // Post-SplitSettings links out to account manager if it is available. + return loadTimeData.getBoolean('isAccountManagerEnabled'); }, readOnly: true, }, @@ -110,6 +118,40 @@ */ profileName_: String, + // <if expr="chromeos"> + /** @private {string} */ + profileRowIconClass_: { + type: String, + value: function() { + if (loadTimeData.getBoolean('showOSSettings')) { + // Pre-SplitSettings links internally to the change picture subpage. + return 'subpage-arrow'; + } else { + // Post-SplitSettings links externally to account manager. If account + // manager isn't available the icon will be hidden. + return 'icon-external'; + } + }, + readOnly: true, + }, + + /** @private {string} */ + profileRowIconAriaLabel_: { + type: String, + value: function() { + if (loadTimeData.getBoolean('showOSSettings')) { + // Pre-SplitSettings. + return this.i18n('changePictureTitle'); + } else { + // Post-SplitSettings. If account manager isn't available the icon + // will be hidden so the label doesn't matter. + return this.i18n('accountManagerSubMenuLabel'); + } + }, + readOnly: true, + }, + // </if> + // <if expr="not chromeos"> /** @private {boolean} */ shouldShowGoogleAccount_: { @@ -379,10 +421,13 @@ /** @private */ onProfileTap_: function() { // <if expr="chromeos"> - if (this.isProfileActionable_) { - // Testing isProfileActionable_ is simpler than conditionally removing - // on-click handlers in the HTML. + if (loadTimeData.getBoolean('showOSSettings')) { + // Pre-SplitSettings. settings.navigateTo(settings.routes.CHANGE_PICTURE); + } else if (loadTimeData.getBoolean('isAccountManagerEnabled')) { + // Post-SplitSettings. The browser C++ code loads OS settings in a window. + // Don't use window.open() because that creates an extra empty tab. + window.location.href = 'chrome://os-settings/accountManager'; } // </if> // <if expr="not chromeos">
diff --git a/chrome/browser/resources/tab_strip/tab.html b/chrome/browser/resources/tab_strip/tab.html index d2d1421..da4b9a5 100644 --- a/chrome/browser/resources/tab_strip/tab.html +++ b/chrome/browser/resources/tab_strip/tab.html
@@ -1,9 +1,13 @@ <style> :host { + --tabstrip-tab-height: 230px; + --tabstrip-tab-width: 280px; + --tabstrip-tab-title-height: 40px; + cursor: pointer; - height: 230px; + height: var(--tabstrip-tab-height); position: relative; - width: 280px; + width: var(--tabstrip-tab-width); } :host([active]) #dragImage { @@ -27,7 +31,7 @@ border-block-end: 1px solid var(--tabstrip-separator-color); box-sizing: border-box; display: flex; - height: 40px; + height: var(--tabstrip-tab-title-height); justify-content: center; margin: 0; padding-inline-end: 4px; @@ -74,13 +78,21 @@ } #thumbnail { + align-items: center; background: var(--tabstrip-card-background-color); + display: flex; flex: 1; + justify-content: center; } #thumbnailImg { - height: 100%; + height: calc(var(--tabstrip-tab-height) - var(--tabstrip-tab-title-height)); object-fit: contain; + width: var(--tabstrip-tab-width); + } + + #thumbnailImg:not([src]) { + display: none; pointer-events: none; width: 100%; }
diff --git a/chrome/browser/resources/tab_strip/tab.js b/chrome/browser/resources/tab_strip/tab.js index c14cfb3..77bbc41d 100644 --- a/chrome/browser/resources/tab_strip/tab.js +++ b/chrome/browser/resources/tab_strip/tab.js
@@ -83,8 +83,7 @@ this.setAttribute('data-tab-id', tab.id); if (!this.tab_ || this.tab_.id !== tab.id) { - // Request thumbnail updates - chrome.send('addTrackedTab', [tab.id]); + this.tabsApi_.trackThumbnailForTab(tab.id); } this.tab_ = Object.freeze(tab);
diff --git a/chrome/browser/resources/tab_strip/tabs_api_proxy.js b/chrome/browser/resources/tab_strip/tabs_api_proxy.js index 9ce6ad6..81c348a4 100644 --- a/chrome/browser/resources/tab_strip/tabs_api_proxy.js +++ b/chrome/browser/resources/tab_strip/tabs_api_proxy.js
@@ -63,6 +63,13 @@ }); }); } + + /** + * @param {number} tabId + */ + trackThumbnailForTab(tabId) { + chrome.send('addTrackedTab', [tabId]); + } } addSingletonGetter(TabsApiProxy);
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc index a297d4e9..00329d36 100644 --- a/chrome/browser/search/local_ntp_source.cc +++ b/chrome/browser/search/local_ntp_source.cc
@@ -614,10 +614,6 @@ "enableShortcutsGrid", base::FeatureList::IsEnabled(features::kGridLayoutForNtpShortcuts)); config_data.SetBoolean( - "showPlaceholderOnFocus", - base::FeatureList::IsEnabled( - omnibox::kUIExperimentShowPlaceholderWhenCaretShowing)); - config_data.SetBoolean( "richerPicker", base::FeatureList::IsEnabled(features::kNtpCustomizationMenuV2)); config_data.SetBoolean("chromeColors", base::FeatureList::IsEnabled(
diff --git a/chrome/browser/search/search_suggest/search_suggest_service.cc b/chrome/browser/search/search_suggest/search_suggest_service.cc index 54d3a06a..3a0a2365 100644 --- a/chrome/browser/search/search_suggest/search_suggest_service.cc +++ b/chrome/browser/search/search_suggest/search_suggest_service.cc
@@ -8,12 +8,14 @@ #include "base/bind.h" #include "base/callback.h" +#include "base/feature_list.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search/search.h" #include "chrome/browser/search/search_suggest/search_suggest_loader.h" #include "chrome/common/pref_names.h" +#include "components/omnibox/common/omnibox_features.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" #include "components/signin/public/identity_manager/identity_manager.h" @@ -93,6 +95,14 @@ SigninStatusChangedCallback callback_; }; +// static +bool SearchSuggestService::IsEnabled() { + // Search suggestions should be disabled when on-focus zero-prefix suggestions + // are displaying in the NTP. + return !base::FeatureList::IsEnabled(omnibox::kZeroSuggestionsOnNTP) && + !base::FeatureList::IsEnabled(omnibox::kZeroSuggestionsOnNTPRealbox); +} + SearchSuggestService::SearchSuggestService( Profile* profile, signin::IdentityManager* identity_manager,
diff --git a/chrome/browser/search/search_suggest/search_suggest_service.h b/chrome/browser/search/search_suggest/search_suggest_service.h index 6413d96..a4ecd027 100644 --- a/chrome/browser/search/search_suggest/search_suggest_service.h +++ b/chrome/browser/search/search_suggest/search_suggest_service.h
@@ -28,6 +28,8 @@ // user signs in or out, the cached value is cleared. class SearchSuggestService : public KeyedService { public: + static bool IsEnabled(); + SearchSuggestService(Profile* profile, signin::IdentityManager* identity_manager, std::unique_ptr<SearchSuggestLoader> loader);
diff --git a/chrome/browser/search/search_suggest/search_suggest_service_factory.cc b/chrome/browser/search/search_suggest/search_suggest_service_factory.cc index 400ed17..696e141 100644 --- a/chrome/browser/search/search_suggest/search_suggest_service_factory.cc +++ b/chrome/browser/search/search_suggest/search_suggest_service_factory.cc
@@ -46,6 +46,9 @@ KeyedService* SearchSuggestServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { + if (!SearchSuggestService::IsEnabled()) + return nullptr; + Profile* profile = Profile::FromBrowserContext(context); signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile);
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 6b5cd41c..fbc6df9c 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1912,6 +1912,7 @@ "//chromeos/assistant:buildflags", "//chromeos/audio", "//chromeos/components/account_manager", + "//chromeos/components/media_app_ui", "//chromeos/components/multidevice", "//chromeos/components/multidevice/debug_webui", "//chromeos/components/multidevice/logging", @@ -3102,6 +3103,8 @@ "views/tabs/tab_group_editor_bubble_view.h", "views/tabs/tab_group_header.cc", "views/tabs/tab_group_header.h", + "views/tabs/tab_group_underline.cc", + "views/tabs/tab_group_underline.h", "views/tabs/tab_hover_card_bubble_view.cc", "views/tabs/tab_hover_card_bubble_view.h", "views/tabs/tab_icon.cc",
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 e4f7533..2e9a6e5 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
@@ -240,7 +240,7 @@ arc_test_.SetUp(profile_.get()); CreateBuilder(); - CreateLauncherController()->Init(); + CreateLauncherController(); // Validating decoded content does not fit well for unit tests. ArcAppIcon::DisableSafeDecodingForTesting();
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc index 18ca5eb3..16e6173 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -792,7 +792,7 @@ void ChromeLauncherController::ReplacePinnedItem( const std::string& old_app_id, const std::string& new_app_id) { - if (!model_->IsAppPinned(old_app_id)) + if (!model_->IsAppPinned(old_app_id) || model_->IsAppPinned(new_app_id)) return; const int index = model_->ItemIndexByAppID(old_app_id); @@ -808,7 +808,7 @@ void ChromeLauncherController::PinAppAtIndex(const std::string& app_id, int target_index) { - if (target_index < 0) + if (target_index < 0 || model_->IsAppPinned(app_id)) return; const ash::ShelfID new_shelf_id(app_id);
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc index c333195..e8210572 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
@@ -4806,3 +4806,92 @@ GetPinnableForAppID(id, profile())); } } + +TEST_F(ChromeLauncherControllerWithArcTest, ReplacePinnedItem) { + InitLauncherController(); + SendListOfArcApps(); + + const std::string arc_app_id1 = + ArcAppTest::GetAppId(arc_test_.fake_apps()[0]); + const std::string arc_app_id2 = + ArcAppTest::GetAppId(arc_test_.fake_apps()[1]); + + extension_service_->AddExtension(extension1_.get()); + extension_service_->AddExtension(extension2_.get()); + + launcher_controller_->PinAppWithID(extension1_->id()); + EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); + EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id1)); + + // Replace pin extension to ARC app + launcher_controller_->ReplacePinnedItem(extension1_->id(), arc_app_id1); + EXPECT_TRUE(launcher_controller_->IsAppPinned(arc_app_id1)); + EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); + + // Replace pin ARC app to ARC app + launcher_controller_->ReplacePinnedItem(arc_app_id1, arc_app_id2); + EXPECT_TRUE(launcher_controller_->IsAppPinned(arc_app_id2)); + EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id1)); + + // Replace pin ARC app to extension app + launcher_controller_->ReplacePinnedItem(arc_app_id2, extension1_->id()); + EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); + EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id2)); + + // Replace pin extension app to extension app + launcher_controller_->ReplacePinnedItem(extension1_->id(), extension2_->id()); + EXPECT_TRUE(launcher_controller_->IsAppPinned(extension2_->id())); + EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); + + // Try to replace item that is not pinned. + launcher_controller_->ReplacePinnedItem(arc_app_id2, extension1_->id()); + EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); + EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id2)); + + // Try to replace item with item that is already pinned. + launcher_controller_->PinAppWithID(extension1_->id()); + EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); + launcher_controller_->ReplacePinnedItem(extension2_->id(), extension1_->id()); + EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); + EXPECT_TRUE(launcher_controller_->IsAppPinned(extension2_->id())); +} + +TEST_F(ChromeLauncherControllerWithArcTest, PinAtIndex) { + InitLauncherController(); + SendListOfArcApps(); + + const std::string arc_app_id1 = + ArcAppTest::GetAppId(arc_test_.fake_apps()[0]); + const std::string arc_app_id2 = + ArcAppTest::GetAppId(arc_test_.fake_apps()[1]); + + extension_service_->AddExtension(extension1_.get()); + extension_service_->AddExtension(extension2_.get()); + + int index = 0; + launcher_controller_->PinAppAtIndex(extension1_->id(), index); + EXPECT_EQ(index, + launcher_controller_->PinnedItemIndexByAppID(extension1_->id())); + + launcher_controller_->PinAppAtIndex(extension2_->id(), index); + EXPECT_EQ(index, + launcher_controller_->PinnedItemIndexByAppID(extension2_->id())); + EXPECT_NE(index, + launcher_controller_->PinnedItemIndexByAppID(extension1_->id())); + + index = 3; + launcher_controller_->PinAppAtIndex(arc_app_id1, index); + EXPECT_EQ(index, launcher_controller_->PinnedItemIndexByAppID(arc_app_id1)); + + // Test pinning at invalid index. + index = -100; + launcher_controller_->PinAppAtIndex(arc_app_id2, index); + EXPECT_NE(index, launcher_controller_->PinnedItemIndexByAppID(arc_app_id2)); + EXPECT_EQ(-1, launcher_controller_->PinnedItemIndexByAppID(arc_app_id2)); + + // Test pinning already pinned app. + index = 0; + launcher_controller_->PinAppAtIndex(arc_app_id1, index); + EXPECT_NE(index, launcher_controller_->PinnedItemIndexByAppID(arc_app_id1)); + EXPECT_EQ(3, launcher_controller_->PinnedItemIndexByAppID(arc_app_id1)); +}
diff --git a/chrome/browser/ui/chrome_select_file_policy.cc b/chrome/browser/ui/chrome_select_file_policy.cc index b9bc0b80..4efa8ab3 100644 --- a/chrome/browser/ui/chrome_select_file_policy.cc +++ b/chrome/browser/ui/chrome_select_file_policy.cc
@@ -32,8 +32,7 @@ SimpleAlertInfoBarDelegate::Create( InfoBarService::FromWebContents(source_contents_), infobars::InfoBarDelegate::FILE_ACCESS_DISABLED_INFOBAR_DELEGATE, - nullptr, l10n_util::GetStringUTF16(IDS_FILE_SELECTION_DIALOG_INFOBAR), - true); + nullptr, l10n_util::GetStringUTF16(IDS_FILE_SELECTION_DIALOG_INFOBAR)); } else { LOG(WARNING) << "File-selection dialogs are disabled but no WebContents " << "is given to display the InfoBar.";
diff --git a/chrome/browser/ui/page_action/page_action_icon_type.h b/chrome/browser/ui/page_action/page_action_icon_type.h index 0218f918..b11d81aa 100644 --- a/chrome/browser/ui/page_action/page_action_icon_type.h +++ b/chrome/browser/ui/page_action/page_action_icon_type.h
@@ -6,10 +6,14 @@ #define CHROME_BROWSER_UI_PAGE_ACTION_PAGE_ACTION_ICON_TYPE_H_ enum class PageActionIconType { + kBookmarkStar, + kClickToCall, + kCookieControls, kFind, + kIntentPicker, kLocalCardMigration, kManagePasswords, - kIntentPicker, + kNativeFileSystemAccess, kPwaInstall, kReaderMode, kSaveCard, @@ -17,10 +21,6 @@ kSharedClipboard, kTranslate, kZoom, - kNativeFileSystemAccess, - kClickToCall, - kCookieControls, - kBookmarkStar, }; #endif // CHROME_BROWSER_UI_PAGE_ACTION_PAGE_ACTION_ICON_TYPE_H_
diff --git a/chrome/browser/ui/startup/automation_infobar_delegate.cc b/chrome/browser/ui/startup/automation_infobar_delegate.cc index 26fc04cd..1bb1e31 100644 --- a/chrome/browser/ui/startup/automation_infobar_delegate.cc +++ b/chrome/browser/ui/startup/automation_infobar_delegate.cc
@@ -31,6 +31,14 @@ return false; } +bool AutomationInfoBarDelegate::ShouldAnimate() const { + // Animating the infobar also animates the content area size which can trigger + // a flood of page layout, compositing, texture reallocations, etc. Since + // this infobar is primarily used for automated testing do not animate the + // infobar to reduce noise in tests. + return false; +} + base::string16 AutomationInfoBarDelegate::GetMessageText() const { return l10n_util::GetStringUTF16(IDS_CONTROLLED_BY_AUTOMATION); }
diff --git a/chrome/browser/ui/startup/automation_infobar_delegate.h b/chrome/browser/ui/startup/automation_infobar_delegate.h index 598a8cd..f8f43c4 100644 --- a/chrome/browser/ui/startup/automation_infobar_delegate.h +++ b/chrome/browser/ui/startup/automation_infobar_delegate.h
@@ -23,6 +23,7 @@ infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override; bool ShouldExpire(const NavigationDetails& details) const override; + bool ShouldAnimate() const override; base::string16 GetMessageText() const override; int GetButtons() const override;
diff --git a/chrome/browser/ui/startup/bad_flags_prompt.cc b/chrome/browser/ui/startup/bad_flags_prompt.cc index 29d6a76..433d18b 100644 --- a/chrome/browser/ui/startup/bad_flags_prompt.cc +++ b/chrome/browser/ui/startup/bad_flags_prompt.cc
@@ -150,14 +150,19 @@ #endif // OS_ANDROID }; -void ShowBadFeatureFlagsInfoBar(content::WebContents* web_contents, - int message_id, - const base::Feature* feature) { +void ShowBadFlagsInfoBarHelper(content::WebContents* web_contents, + int message_id, + base::StringPiece flag) { + // Animating the infobar also animates the content area size which can trigger + // a flood of page layout, compositing, texture reallocations, etc. Do not + // animate the infobar to reduce noise in perf benchmarks because they pass + // --ignore-certificate-errors-spki-list. This infobar only appears at + // startup so the animation isn't visible to users anyway. SimpleAlertInfoBarDelegate::Create( InfoBarService::FromWebContents(web_contents), infobars::InfoBarDelegate::BAD_FLAGS_INFOBAR_DELEGATE, nullptr, - l10n_util::GetStringFUTF16(message_id, base::UTF8ToUTF16(feature->name)), - false); + l10n_util::GetStringFUTF16(message_id, base::UTF8ToUTF16(flag)), + /*auto_expire=*/false, /*should_animate=*/false); } } // namespace @@ -176,8 +181,8 @@ for (const base::Feature* feature : kBadFeatureFlagsInAboutFlags) { if (base::FeatureList::IsEnabled(*feature)) { - ShowBadFeatureFlagsInfoBar(web_contents, IDS_BAD_FEATURES_WARNING_MESSAGE, - feature); + ShowBadFlagsInfoBarHelper(web_contents, IDS_BAD_FEATURES_WARNING_MESSAGE, + feature->name); return; } } @@ -190,13 +195,8 @@ base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(flag); if (!switch_value.empty()) switch_value = "=" + switch_value; - SimpleAlertInfoBarDelegate::Create( - InfoBarService::FromWebContents(web_contents), - infobars::InfoBarDelegate::BAD_FLAGS_INFOBAR_DELEGATE, nullptr, - l10n_util::GetStringFUTF16( - message_id, - base::UTF8ToUTF16(std::string("--") + flag + switch_value)), - false); + ShowBadFlagsInfoBarHelper(web_contents, message_id, + std::string("--") + flag + switch_value); } void MaybeShowInvalidUserDataDirWarningDialog() {
diff --git a/chrome/browser/ui/tabs/OWNERS b/chrome/browser/ui/tabs/OWNERS index cfed520e..015937cc 100644 --- a/chrome/browser/ui/tabs/OWNERS +++ b/chrome/browser/ui/tabs/OWNERS
@@ -6,4 +6,7 @@ # For changes related to the tab alert indicators. per-file tab_utils*=miu@chromium.org +# For changes around tab style and rendering. +per-file tab_style*=dfried@chromium.org + # COMPONENT: UI>Browser>TabStrip
diff --git a/chrome/browser/ui/tabs/tab_style.h b/chrome/browser/ui/tabs/tab_style.h index 78a8e4ee..83e6dd9 100644 --- a/chrome/browser/ui/tabs/tab_style.h +++ b/chrome/browser/ui/tabs/tab_style.h
@@ -7,6 +7,7 @@ #include "base/macros.h" #include "third_party/skia/include/core/SkColor.h" +#include "ui/gfx/font_list.h" #include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/geometry/size.h" @@ -100,6 +101,9 @@ // Derives and returns colors for the tab. See TabColors, above. virtual TabColors CalculateColors() const = 0; + // Returns the appropriate fonts for the current theme and active state. + virtual const gfx::FontList& GetFontList() const = 0; + // Paints the tab. virtual void PaintTab(gfx::Canvas* canvas) const = 0;
diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc index 2984973..0005b79 100644 --- a/chrome/browser/ui/ui_features.cc +++ b/chrome/browser/ui/ui_features.cc
@@ -64,6 +64,11 @@ const base::Feature kTabOutlinesInLowContrastThemes{ "TabOutlinesInLowContrastThemes", base::FEATURE_DISABLED_BY_DEFAULT}; +// Enables a more prominent active tab title in dark mode to aid with +// accessibility. +const base::Feature kProminentDarkModeActiveTabTitle{ + "ProminentDarkModeActiveTabTitle", base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables a web-based separator that's only used for performance testing. See // https://crbug.com/993502. const base::Feature kWebFooterExperiment{"WebFooterExperiment",
diff --git a/chrome/browser/ui/ui_features.h b/chrome/browser/ui/ui_features.h index 5f76f5f..a26431f7 100644 --- a/chrome/browser/ui/ui_features.h +++ b/chrome/browser/ui/ui_features.h
@@ -42,6 +42,8 @@ extern const base::Feature kTabOutlinesInLowContrastThemes; +extern const base::Feature kProminentDarkModeActiveTabTitle; + extern const base::Feature kWebFooterExperiment; extern const base::Feature kWebUITabStrip;
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_button.cc b/chrome/browser/ui/views/extensions/extensions_menu_button.cc index 7efbe610..621d32a 100644 --- a/chrome/browser/ui/views/extensions/extensions_menu_button.cc +++ b/chrome/browser/ui/views/extensions/extensions_menu_button.cc
@@ -27,6 +27,7 @@ parent_(parent), controller_(controller) { SetInkDropMode(InkDropMode::ON); + SetFocusBehavior(FocusBehavior::ALWAYS); SetButtonController(std::make_unique<HoverButtonController>( this, this, std::make_unique<views::Button::DefaultButtonControllerDelegate>(this)));
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc b/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc index ddb8cd0..36efdeec 100644 --- a/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc +++ b/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
@@ -25,6 +25,15 @@ namespace { constexpr int EXTENSION_CONTEXT_MENU = 13; constexpr int EXTENSION_PINNING = 14; + +std::unique_ptr<views::ImageButton> CreateButton( + int id, + views::ButtonListener* listener) { + auto button = views::CreateVectorImageButton(listener); + button->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); + button->SetID(id); + return button; +} } // namespace ExtensionsMenuItemView::ExtensionsMenuItemView( @@ -56,16 +65,15 @@ ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor( ui::NativeTheme::kColorId_DefaultIconColor); - auto pin_button = views::CreateVectorImageButton(this); - pin_button->SetID(EXTENSION_PINNING); + auto pin_button = CreateButton(EXTENSION_PINNING, this); pin_button->set_ink_drop_base_color(icon_color); + pin_button_ = pin_button.get(); AddChildView(std::move(pin_button)); - auto context_menu_button = views::CreateVectorImageButton(nullptr); + auto context_menu_button = CreateButton(EXTENSION_CONTEXT_MENU, nullptr); views::SetImageFromVectorIcon(context_menu_button.get(), kBrowserToolsIcon, kSecondaryIconSizeDp, icon_color); - context_menu_button->SetID(EXTENSION_CONTEXT_MENU); context_menu_button->SetTooltipText( l10n_util::GetStringUTF16(IDS_EXTENSIONS_MENU_CONTEXT_MENU_TOOLTIP)); context_menu_button->SetButtonController(
diff --git a/chrome/browser/ui/views/frame/browser_view_layout.cc b/chrome/browser/ui/views/frame/browser_view_layout.cc index 96822d7..add3b76 100644 --- a/chrome/browser/ui/views/frame/browser_view_layout.cc +++ b/chrome/browser/ui/views/frame/browser_view_layout.cc
@@ -63,6 +63,8 @@ } // namespace +constexpr int BrowserViewLayout::kMainBrowserContentsMinimumWidth; + class BrowserViewLayout::WebContentsModalDialogHostViews : public WebContentsModalDialogHost { public: @@ -169,13 +171,8 @@ // https://crbug.com/847179. constexpr gfx::Size kContentsMinimumSize(1, 1); - // This should be wide enough that WebUI pages (e.g. chrome://settings) and - // the various associated WebUI dialogs (e.g. Import Bookmarks) can still be - // functional. This value provides a trade-off between browser usability and - // privacy - specifically, the ability to browse in a very small window, even - // on large monitors (which is why a minimum height is not specified). This - // value is used for the main browser window only, not for popups. - constexpr gfx::Size kMainBrowserContentsMinimumSize(500, 1); + // The minimum height for the normal (tabbed) browser window's contents area. + constexpr int kMainBrowserContentsMinimumHeight = 1; const bool has_tabstrip = browser()->SupportsWindowFeature(Browser::FEATURE_TABSTRIP); @@ -202,7 +199,8 @@ gfx::Size contents_size(contents_container_->GetMinimumSize()); contents_size.SetToMax(browser()->is_type_normal() - ? kMainBrowserContentsMinimumSize + ? gfx::Size(kMainBrowserContentsMinimumWidth, + kMainBrowserContentsMinimumHeight) : kContentsMinimumSize); const int min_height =
diff --git a/chrome/browser/ui/views/frame/browser_view_layout.h b/chrome/browser/ui/views/frame/browser_view_layout.h index 9eeaada7..8417e02 100644 --- a/chrome/browser/ui/views/frame/browser_view_layout.h +++ b/chrome/browser/ui/views/frame/browser_view_layout.h
@@ -11,6 +11,7 @@ #include "base/gtest_prod_util.h" #include "base/macros.h" #include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/size.h" #include "ui/views/layout/layout_manager.h" class BookmarkBarView; @@ -22,14 +23,13 @@ namespace gfx { class Point; -class Size; -} +} // namespace gfx namespace views { class ClientView; class View; class Widget; -} +} // namespace views namespace web_modal { class WebContentsModalDialogHost; @@ -38,6 +38,15 @@ // The layout manager used in chrome browser. class BrowserViewLayout : public views::LayoutManager { public: + // The minimum width for the normal (tabbed) browser window's contents area. + // This should be wide enough that WebUI pages (e.g. chrome://settings) and + // the various associated WebUI dialogs (e.g. Import Bookmarks) can still be + // functional. This value provides a trade-off between browser usability and + // privacy - specifically, the ability to browse in a very small window, even + // on large monitors (which is why a minimum height is not specified). This + // value is used for the main browser window only, not for popups. + static constexpr int kMainBrowserContentsMinimumWidth = 500; + // |browser_view| may be null in tests. BrowserViewLayout(std::unique_ptr<BrowserViewLayoutDelegate> delegate, Browser* browser, @@ -55,9 +64,7 @@ ~BrowserViewLayout() override; // Sets or updates views that are not available when |this| is initialized. - void set_tab_strip(TabStrip* tab_strip) { - tab_strip_ = tab_strip; - } + void set_tab_strip(TabStrip* tab_strip) { tab_strip_ = tab_strip; } void set_bookmark_bar(BookmarkBarView* bookmark_bar) { bookmark_bar_ = bookmark_bar; }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc index c954c9a..965f304 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -1490,11 +1490,8 @@ } bool OmniboxViewViews::ShouldShowPlaceholderText() const { - bool show_with_caret = base::FeatureList::IsEnabled( - omnibox::kUIExperimentShowPlaceholderWhenCaretShowing); return Textfield::ShouldShowPlaceholderText() && - (show_with_caret || !model()->is_caret_visible()) && - !model()->is_keyword_selected(); + !model()->is_caret_visible() && !model()->is_keyword_selected(); } #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.cc b/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.cc index e28b777..ba9caa9 100644 --- a/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.cc +++ b/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.cc
@@ -45,10 +45,42 @@ for (PageActionIconType type : params.types_enabled) { switch (type) { + case PageActionIconType::kBookmarkStar: + bookmark_star_icon_ = + new StarView(params.command_updater, params.browser, + params.page_action_icon_delegate); + page_action_icons_.push_back(bookmark_star_icon_); + break; + case PageActionIconType::kClickToCall: + click_to_call_icon_ = new SharingIconView( + params.page_action_icon_delegate, + base::BindRepeating([](content::WebContents* contents) { + return static_cast<SharingUiController*>( + ClickToCallUiController::GetOrCreateFromWebContents( + contents)); + }), + base::BindRepeating(SharingDialogView::GetAsBubble)); + page_action_icons_.push_back(click_to_call_icon_); + break; + case PageActionIconType::kCookieControls: + cookie_controls_icon_ = + new CookieControlsIconView(params.page_action_icon_delegate); + page_action_icons_.push_back(cookie_controls_icon_); + break; case PageActionIconType::kFind: - find_bar_icon_ = + find_icon_ = new FindBarIcon(params.browser, params.page_action_icon_delegate); - page_action_icons_.push_back(find_bar_icon_); + page_action_icons_.push_back(find_icon_); + break; + case PageActionIconType::kIntentPicker: + intent_picker_icon_ = new IntentPickerView( + params.browser, params.page_action_icon_delegate); + page_action_icons_.push_back(intent_picker_icon_); + break; + case PageActionIconType::kLocalCardMigration: + local_card_migration_icon_ = new autofill::LocalCardMigrationIconView( + params.command_updater, params.page_action_icon_delegate); + page_action_icons_.push_back(local_card_migration_icon_); break; case PageActionIconType::kManagePasswords: DCHECK(params.command_updater); @@ -56,16 +88,16 @@ params.command_updater, params.page_action_icon_delegate); page_action_icons_.push_back(manage_passwords_icon_); break; - case PageActionIconType::kIntentPicker: - intent_picker_view_ = new IntentPickerView( - params.browser, params.page_action_icon_delegate); - page_action_icons_.push_back(intent_picker_view_); + case PageActionIconType::kNativeFileSystemAccess: + native_file_system_access_icon_ = new NativeFileSystemAccessIconView( + params.page_action_icon_delegate); + page_action_icons_.push_back(native_file_system_access_icon_); break; case PageActionIconType::kPwaInstall: DCHECK(params.command_updater); - pwa_install_view_ = new PwaInstallView( + pwa_install_icon_ = new PwaInstallView( params.command_updater, params.page_action_icon_delegate); - page_action_icons_.push_back(pwa_install_view_); + page_action_icons_.push_back(pwa_install_icon_); break; case PageActionIconType::kReaderMode: DCHECK(params.command_updater); @@ -73,6 +105,27 @@ params.command_updater, params.page_action_icon_delegate); page_action_icons_.push_back(reader_mode_icon_); break; + case PageActionIconType::kSaveCard: + save_card_icon_ = new autofill::SaveCardIconView( + params.command_updater, params.page_action_icon_delegate); + page_action_icons_.push_back(save_card_icon_); + break; + case PageActionIconType::kSendTabToSelf: + send_tab_to_self_icon_ = new send_tab_to_self::SendTabToSelfIconView( + params.command_updater, params.page_action_icon_delegate); + page_action_icons_.push_back(send_tab_to_self_icon_); + break; + case PageActionIconType::kSharedClipboard: + shared_clipboard_icon_ = new SharingIconView( + params.page_action_icon_delegate, + base::BindRepeating([](content::WebContents* contents) { + return static_cast<SharingUiController*>( + SharedClipboardUiController::GetOrCreateFromWebContents( + contents)); + }), + base::BindRepeating(SharingDialogView::GetAsBubble)); + page_action_icons_.push_back(shared_clipboard_icon_); + break; case PageActionIconType::kTranslate: DCHECK(params.command_updater); translate_icon_ = new TranslateIconView( @@ -80,62 +133,8 @@ page_action_icons_.push_back(translate_icon_); break; case PageActionIconType::kZoom: - zoom_view_ = new ZoomView(params.page_action_icon_delegate); - page_action_icons_.push_back(zoom_view_); - break; - case PageActionIconType::kCookieControls: - cookie_view_ = - new CookieControlsIconView(params.page_action_icon_delegate); - page_action_icons_.push_back(cookie_view_); - break; - case PageActionIconType::kSendTabToSelf: - send_tab_to_self_icon_view_ = - new send_tab_to_self::SendTabToSelfIconView( - params.command_updater, params.page_action_icon_delegate); - page_action_icons_.push_back(send_tab_to_self_icon_view_); - break; - case PageActionIconType::kNativeFileSystemAccess: - native_file_system_icon_ = new NativeFileSystemAccessIconView( - params.page_action_icon_delegate); - page_action_icons_.push_back(native_file_system_icon_); - break; - case PageActionIconType::kClickToCall: - click_to_call_icon_view_ = new SharingIconView( - params.page_action_icon_delegate, - base::BindRepeating([](content::WebContents* contents) { - return static_cast<SharingUiController*>( - ClickToCallUiController::GetOrCreateFromWebContents( - contents)); - }), - base::BindRepeating(SharingDialogView::GetAsBubble)); - page_action_icons_.push_back(click_to_call_icon_view_); - break; - case PageActionIconType::kSharedClipboard: - shared_clipboard_icon_view_ = new SharingIconView( - params.page_action_icon_delegate, - base::BindRepeating([](content::WebContents* contents) { - return static_cast<SharingUiController*>( - SharedClipboardUiController::GetOrCreateFromWebContents( - contents)); - }), - base::BindRepeating(SharingDialogView::GetAsBubble)); - page_action_icons_.push_back(shared_clipboard_icon_view_); - break; - case PageActionIconType::kLocalCardMigration: - local_card_migration_icon_view_ = - new autofill::LocalCardMigrationIconView( - params.command_updater, params.page_action_icon_delegate); - page_action_icons_.push_back(local_card_migration_icon_view_); - break; - case PageActionIconType::kSaveCard: - save_card_icon_view_ = new autofill::SaveCardIconView( - params.command_updater, params.page_action_icon_delegate); - page_action_icons_.push_back(save_card_icon_view_); - break; - case PageActionIconType::kBookmarkStar: - star_view_ = new StarView(params.command_updater, params.browser, - params.page_action_icon_delegate); - page_action_icons_.push_back(star_view_); + zoom_icon_ = new ZoomView(params.page_action_icon_delegate); + page_action_icons_.push_back(zoom_icon_); break; } } @@ -159,36 +158,36 @@ PageActionIconView* OmniboxPageActionIconContainerView::GetIconView( PageActionIconType type) { switch (type) { + case PageActionIconType::kBookmarkStar: + return bookmark_star_icon_; + case PageActionIconType::kClickToCall: + return click_to_call_icon_; + case PageActionIconType::kCookieControls: + return cookie_controls_icon_; case PageActionIconType::kFind: - return find_bar_icon_; + return find_icon_; + case PageActionIconType::kIntentPicker: + return intent_picker_icon_; + case PageActionIconType::kLocalCardMigration: + return local_card_migration_icon_; case PageActionIconType::kManagePasswords: return manage_passwords_icon_; - case PageActionIconType::kIntentPicker: - return intent_picker_view_; + case PageActionIconType::kNativeFileSystemAccess: + return native_file_system_access_icon_; case PageActionIconType::kPwaInstall: - return pwa_install_view_; + return pwa_install_icon_; case PageActionIconType::kReaderMode: return reader_mode_icon_; + case PageActionIconType::kSaveCard: + return save_card_icon_; + case PageActionIconType::kSendTabToSelf: + return send_tab_to_self_icon_; + case PageActionIconType::kSharedClipboard: + return shared_clipboard_icon_; case PageActionIconType::kTranslate: return translate_icon_; case PageActionIconType::kZoom: - return zoom_view_; - case PageActionIconType::kCookieControls: - return cookie_view_; - case PageActionIconType::kSendTabToSelf: - return send_tab_to_self_icon_view_; - case PageActionIconType::kNativeFileSystemAccess: - return native_file_system_icon_; - case PageActionIconType::kClickToCall: - return click_to_call_icon_view_; - case PageActionIconType::kSharedClipboard: - return shared_clipboard_icon_view_; - case PageActionIconType::kLocalCardMigration: - return local_card_migration_icon_view_; - case PageActionIconType::kSaveCard: - return save_card_icon_view_; - case PageActionIconType::kBookmarkStar: - return star_view_; + return zoom_icon_; } return nullptr; } @@ -226,8 +225,8 @@ void OmniboxPageActionIconContainerView::ZoomChangedForActiveTab( bool can_show_bubble) { - if (zoom_view_) - zoom_view_->ZoomChangedForActiveTab(can_show_bubble); + if (zoom_icon_) + zoom_icon_->ZoomChangedForActiveTab(can_show_bubble); } void OmniboxPageActionIconContainerView::ChildPreferredSizeChanged(
diff --git a/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h b/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h index 9cc69344..d47d147 100644 --- a/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h +++ b/chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h
@@ -89,23 +89,21 @@ // Updates the view for the zoom icon when default zoom levels change. void OnDefaultZoomLevelChanged() override; - ZoomView* zoom_view_ = nullptr; - FindBarIcon* find_bar_icon_ = nullptr; + StarView* bookmark_star_icon_ = nullptr; + SharingIconView* click_to_call_icon_ = nullptr; + CookieControlsIconView* cookie_controls_icon_ = nullptr; + FindBarIcon* find_icon_ = nullptr; + IntentPickerView* intent_picker_icon_ = nullptr; + autofill::LocalCardMigrationIconView* local_card_migration_icon_ = nullptr; ManagePasswordsIconViews* manage_passwords_icon_ = nullptr; - IntentPickerView* intent_picker_view_ = nullptr; - PwaInstallView* pwa_install_view_ = nullptr; - CookieControlsIconView* cookie_view_ = nullptr; - send_tab_to_self::SendTabToSelfIconView* send_tab_to_self_icon_view_ = - nullptr; - TranslateIconView* translate_icon_ = nullptr; - NativeFileSystemAccessIconView* native_file_system_icon_ = nullptr; + NativeFileSystemAccessIconView* native_file_system_access_icon_ = nullptr; + PwaInstallView* pwa_install_icon_ = nullptr; ReaderModeIconView* reader_mode_icon_ = nullptr; - SharingIconView* click_to_call_icon_view_ = nullptr; - SharingIconView* shared_clipboard_icon_view_ = nullptr; - autofill::LocalCardMigrationIconView* local_card_migration_icon_view_ = - nullptr; - autofill::SaveCardIconView* save_card_icon_view_ = nullptr; - StarView* star_view_ = nullptr; + autofill::SaveCardIconView* save_card_icon_ = nullptr; + send_tab_to_self::SendTabToSelfIconView* send_tab_to_self_icon_ = nullptr; + SharingIconView* shared_clipboard_icon_ = nullptr; + TranslateIconView* translate_icon_ = nullptr; + ZoomView* zoom_icon_ = nullptr; std::vector<PageActionIconView*> page_action_icons_;
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc index 85d21d05c..5fa2812f 100644 --- a/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc +++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc
@@ -203,6 +203,10 @@ text = l10n_util::GetStringUTF16(IDS_AVATAR_BUTTON_SYNC_PAUSED); break; case State::kGuestSession: + if (base::FeatureList::IsEnabled(features::kAnimatedAvatarButton)) { + text = l10n_util::GetStringUTF16(IDS_GUEST_PROFILE_NAME); + } + break; case State::kGenericProfile: case State::kNormal: // Default treatment -- no text, no color. @@ -391,6 +395,10 @@ case State::kIncognitoProfile: return gfx::CreateVectorIcon(kIncognitoIcon, icon_size, icon_color); case State::kGuestSession: + if (base::FeatureList::IsEnabled(features::kAnimatedAvatarButton)) { + return gfx::CreateVectorIcon(kUserAccountAvatarIcon, icon_size, + icon_color); + } return gfx::CreateVectorIcon(kUserMenuGuestIcon, icon_size, icon_color); case State::kGenericProfile: return gfx::CreateVectorIcon(kUserAccountAvatarIcon, icon_size,
diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc index 78edbd1d..89cdf61 100644 --- a/chrome/browser/ui/views/tabs/tab.cc +++ b/chrome/browser/ui/views/tabs/tab.cc
@@ -180,6 +180,7 @@ title_->SetHandlesTooltips(false); title_->SetAutoColorReadabilityEnabled(false); title_->SetText(CoreTabHelper::GetDefaultTitle()); + title_->SetFontList(tab_style_->GetFontList()); AddChildView(title_); SetEventTargeter(std::make_unique<views::ViewTargeter>(this)); @@ -684,7 +685,7 @@ if (group_ == group) return; group_ = group; - GroupColorChanged(); + SchedulePaint(); } base::Optional<SkColor> Tab::GetGroupColor() const { @@ -694,11 +695,6 @@ : base::nullopt; } -void Tab::GroupColorChanged() { - UpdateForegroundColors(); - SchedulePaint(); -} - SkColor Tab::GetAlertIndicatorColor(TabAlertState state) const { // If theme provider is not yet available, return the default button // color. @@ -738,6 +734,7 @@ void Tab::ActiveStateChanged() { UpdateTabIconNeedsAttentionBlocked(); UpdateForegroundColors(); + title_->SetFontList(tab_style_->GetFontList()); Layout(); }
diff --git a/chrome/browser/ui/views/tabs/tab.h b/chrome/browser/ui/views/tabs/tab.h index ba96d8b..47662667 100644 --- a/chrome/browser/ui/views/tabs/tab.h +++ b/chrome/browser/ui/views/tabs/tab.h
@@ -127,10 +127,6 @@ // Returns the color for the tab's group, if any. base::Optional<SkColor> GetGroupColor() const; - // Should be called when the result of - // |TabController::GetVisualDataForGroup()| changes. - void GroupColorChanged(); - // Returns the color used for the alert indicator icon. SkColor GetAlertIndicatorColor(TabAlertState state) const;
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller.cc b/chrome/browser/ui/views/tabs/tab_drag_controller.cc index d6908bd..3d45b4a 100644 --- a/chrome/browser/ui/views/tabs/tab_drag_controller.cc +++ b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
@@ -50,8 +50,9 @@ #if defined(OS_CHROMEOS) #include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/tablet_mode.h" -#include "ash/public/cpp/window_properties.h" // nogncheck -#include "ash/public/cpp/window_state_type.h" // nogncheck +#include "ash/public/cpp/window_properties.h" // nogncheck +#include "ash/public/cpp/window_state_type.h" // nogncheck +#include "ui/aura/window_delegate.h" #include "ui/wm/core/coordinate_conversion.h" #endif @@ -102,13 +103,18 @@ } // In Chrome OS tablet mode, when dragging a tab/tabs around, the desired -// browser bounds during dragging is one-fourth of the workspace bounds. +// browser size during dragging is one-fourth of the workspace size or the +// window's minimum size. gfx::Rect GetDraggedBrowserBoundsInTabletMode(aura::Window* window) { const gfx::Rect work_area = display::Screen::GetScreen()->GetDisplayNearestWindow(window).work_area(); + gfx::Size mininum_size; + if (window->delegate()) + mininum_size = window->delegate()->GetMinimumSize(); + gfx::Rect bounds(window->GetBoundsInScreen()); - bounds.set_width(work_area.width() / 2); - bounds.set_height(work_area.height() / 2); + bounds.set_width(std::max(work_area.width() / 2, mininum_size.width())); + bounds.set_height(std::max(work_area.height() / 2, mininum_size.height())); return bounds; }
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc index 950b96b1..bd8209b 100644 --- a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc +++ b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
@@ -78,6 +78,7 @@ #include "ash/wm/splitview/split_view_controller.h" #include "ash/wm/window_state.h" #include "base/test/simple_test_tick_clock.h" +#include "chrome/browser/ui/views/frame/browser_view_layout.h" #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" #include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" #include "content/public/common/service_manager_connection.h" @@ -87,6 +88,7 @@ #include "ui/aura/client/screen_position_client.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/display/manager/display_manager.h" +#include "ui/display/test/display_manager_test_api.h" #include "ui/events/base_event_utils.h" #include "ui/events/gesture_detection/gesture_configuration.h" #endif @@ -2495,6 +2497,56 @@ EXPECT_EQ(browser_list->size(), 1u); } +namespace { + +void WindowSizeDuringDraggingTestStep2( + DetachToBrowserTabDragControllerTest* test, + TabStrip* tab_strip) { + // There should be two browser windows, including the newly created one for + // the dragged tab. + EXPECT_EQ(2u, test->browser_list->size()); + + // Get this new created window for the dragged tab. + Browser* new_browser = test->browser_list->get(1); + aura::Window* window = new_browser->window()->GetNativeWindow(); + const gfx::Size work_area = display::Screen::GetScreen() + ->GetDisplayNearestWindow(window) + .work_area() + .size(); + const gfx::Size minimum_size = window->delegate()->GetMinimumSize(); + const gfx::Size window_size = window->bounds().size(); + EXPECT_GE(minimum_size.width(), + BrowserViewLayout::kMainBrowserContentsMinimumWidth); + EXPECT_GE(window_size.width(), minimum_size.width()); + EXPECT_GE(window_size.height(), minimum_size.height()); + EXPECT_EQ(window_size, + gfx::Size(std::max(work_area.width() / 2, minimum_size.width()), + std::max(work_area.height() / 2, minimum_size.height()))); + + ASSERT_TRUE(test->ReleaseInput()); +} + +} // namespace + +// Tests that when drgging a tab out of a browser window, the dragged window's +// size should be equal or larger than its minimum size. +IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest, + WindowSizeDuringDraggingTest) { + // Set the display size small enough. + display::test::DisplayManagerTestApi(ash::Shell::Get()->display_manager()) + .UpdateDisplay(base::NumberToString( + BrowserViewLayout::kMainBrowserContentsMinimumWidth) + + "x400"); + ash::ShellTestApi().SetTabletModeEnabledForTest(true); + + TabStrip* tab_strip = GetTabStripForBrowser(browser()); + AddTabsAndResetBrowser(browser(), 1); + + // Drag it far enough that the first tab detaches. + DragTabAndNotify(tab_strip, base::BindOnce(&WindowSizeDuringDraggingTestStep2, + this, tab_strip)); +} + // Subclass of DetachToBrowserTabDragControllerTest that // creates multiple displays. class DetachToBrowserInSeparateDisplayTabDragControllerTest
diff --git a/chrome/browser/ui/views/tabs/tab_group_underline.cc b/chrome/browser/ui/views/tabs/tab_group_underline.cc new file mode 100644 index 0000000..c120b43 --- /dev/null +++ b/chrome/browser/ui/views/tabs/tab_group_underline.cc
@@ -0,0 +1,67 @@ +// 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 "chrome/browser/ui/views/tabs/tab_group_underline.h" + +#include <memory> +#include <utility> + +#include "chrome/browser/ui/tabs/tab_group_visual_data.h" +#include "chrome/browser/ui/views/tabs/tab.h" +#include "chrome/browser/ui/views/tabs/tab_group_header.h" +#include "chrome/browser/ui/views/tabs/tab_strip.h" +#include "chrome/browser/ui/views/tabs/tab_strip_controller.h" +#include "third_party/skia/include/core/SkColor.h" +#include "ui/gfx/canvas.h" +#include "ui/views/background.h" +#include "ui/views/view.h" + +TabGroupUnderline::TabGroupUnderline(TabStrip* tab_strip, TabGroupId group) + : tab_strip_(tab_strip), group_(group) { + UpdateVisuals(); +} + +void TabGroupUnderline::OnPaint(gfx::Canvas* canvas) { + UpdateVisuals(); + OnPaintBackground(canvas); +} + +void TabGroupUnderline::UpdateVisuals() { + SkColor color = GetColor(); + + int start_x = GetStart(); + int end_x = GetEnd(); + + int start_y = tab_strip_->bounds().height() - 1; + constexpr int kStrokeWidth = 2; + + SetBounds(start_x, start_y - kStrokeWidth, end_x - start_x, kStrokeWidth); + SetBackground(views::CreateSolidBackground(color)); +} + +SkColor TabGroupUnderline::GetColor() { + const TabGroupVisualData* data = + tab_strip_->controller()->GetVisualDataForGroup(group_); + + return data->color(); +} + +int TabGroupUnderline::GetStart() { + const gfx::Rect group_header_bounds = + tab_strip_->group_header(group_)->bounds(); + + constexpr int kInset = 20; + return group_header_bounds.x() + kInset; +} + +int TabGroupUnderline::GetEnd() { + const std::vector<int> tabs_in_group = + tab_strip_->controller()->ListTabsInGroup(group_); + const int last_tab_index = tabs_in_group[tabs_in_group.size() - 1]; + const gfx::Rect& last_tab_bounds = + tab_strip_->tab_at(last_tab_index)->bounds(); + + constexpr int kInset = 20; + return last_tab_bounds.right() - kInset; +}
diff --git a/chrome/browser/ui/views/tabs/tab_group_underline.h b/chrome/browser/ui/views/tabs/tab_group_underline.h new file mode 100644 index 0000000..917993a2 --- /dev/null +++ b/chrome/browser/ui/views/tabs/tab_group_underline.h
@@ -0,0 +1,45 @@ +// 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 CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_UNDERLINE_H_ +#define CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_UNDERLINE_H_ + +#include "chrome/browser/ui/tabs/tab_group_id.h" +#include "chrome/browser/ui/views/tabs/tab_strip.h" +#include "chrome/browser/ui/views/tabs/tab_strip_controller.h" +#include "ui/views/view.h" + +// View for tab group underlines in the tab strip, which are markers of group +// members. There is one underline for each group, which is included in the tab +// strip flow and positioned across all tabs in the group. +class TabGroupUnderline : public views::View { + public: + TabGroupUnderline(TabStrip* tab_strip, TabGroupId group); + + TabGroupId group() const { return group_; } + + // Updates the bounds and color of the underline for painting. + void UpdateVisuals(); + + // views::View: + void OnPaint(gfx::Canvas* canvas) override; + + private: + TabStrip* const tab_strip_; + const TabGroupId group_; + + // The underline color is the group color. + SkColor GetColor(); + + // The underline starts at the left edge of the header chip. + int GetStart(); + + // The underline ends at the right edge of the last grouped tab's close + // button. + int GetEnd(); + + DISALLOW_COPY_AND_ASSIGN(TabGroupUnderline); +}; + +#endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_UNDERLINE_H_
diff --git a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc index de6448d..34d5991a 100644 --- a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc +++ b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
@@ -9,7 +9,6 @@ #include "base/metrics/field_trial_params.h" #include "base/metrics/histogram_macros.h" -#include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/metrics/tab_count_metrics.h" @@ -320,7 +319,7 @@ alert_state_label_ = new views::Label( base::string16(), CONTEXT_BODY_TEXT_LARGE, views::style::STYLE_SECONDARY); alert_state_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); - alert_state_label_->SetMultiLine(false); + alert_state_label_->SetMultiLine(true); alert_state_label_->SetVisible(false); AddChildView(alert_state_label_);
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc index d0eb766a..45b8734 100644 --- a/chrome/browser/ui/views/tabs/tab_strip.cc +++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -42,6 +42,7 @@ #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_group_header.h" +#include "chrome/browser/ui/views/tabs/tab_group_underline.h" #include "chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h" #include "chrome/browser/ui/views/tabs/tab_strip_controller.h" #include "chrome/browser/ui/views/tabs/tab_strip_layout_helper.h" @@ -1143,6 +1144,12 @@ base::BindOnce(&TabStrip::OnGroupCloseAnimationCompleted, base::Unretained(this), new_group.value())); group_headers_[new_group.value()] = std::move(header); + + auto underline = + std::make_unique<TabGroupUnderline>(this, new_group.value()); + underline->set_owned_by_client(); + AddChildView(underline.get()); + group_underlines_[new_group.value()] = std::move(underline); } if (old_group.has_value()) { if (controller_->ListTabsInGroup(old_group.value()).size() == 0) { @@ -1159,8 +1166,6 @@ void TabStrip::GroupVisualsChanged(TabGroupId group) { group_headers_[group]->VisualsChanged(); - for (int i : controller_->ListTabsInGroup(group)) - tabs_.view_at(i)->GroupColorChanged(); // The group title may have changed size. UpdateIdealBounds(); AnimateToIdealBounds(); @@ -1832,6 +1837,10 @@ for (const auto& header_pair : group_headers_) header_pair.second->Paint(paint_info); + // Paint group underlines. + for (const auto& underline_pair : group_underlines_) + underline_pair.second->Paint(paint_info); + // Always paint the active tab over all the inactive tabs. if (active_tab && !is_dragging) active_tab->Paint(paint_info); @@ -2410,6 +2419,7 @@ void TabStrip::OnGroupCloseAnimationCompleted(TabGroupId group) { group_headers_.erase(group); + group_underlines_.erase(group); // TODO(crbug.com/905491): We might want to simulate a mouse move here, like // we do in OnTabCloseAnimationCompleted. }
diff --git a/chrome/browser/ui/views/tabs/tab_strip.h b/chrome/browser/ui/views/tabs/tab_strip.h index 463ce3c..4910172 100644 --- a/chrome/browser/ui/views/tabs/tab_strip.h +++ b/chrome/browser/ui/views/tabs/tab_strip.h
@@ -44,6 +44,7 @@ class StackedTabStripLayout; class Tab; class TabGroupHeader; +class TabGroupUnderline; class TabGroupId; class TabHoverCardBubbleView; class TabStripController; @@ -197,6 +198,9 @@ // TODO(pkasting): Make const correct Tab* tab_at(int index) const { return tabs_.view_at(index); } + // Returns the TabGroupHeader with ID |id|. + TabGroupHeader* group_header(TabGroupId id) { return GetGroupHeaders()[id]; } + // Returns the NewTabButton. NewTabButton* new_tab_button() { return new_tab_button_; } @@ -583,6 +587,9 @@ // Map associating each group to its TabGroupHeader instance. std::map<TabGroupId, std::unique_ptr<TabGroupHeader>> group_headers_; + // Map associating each group to its TabGroupUnderline instance. + std::map<TabGroupId, std::unique_ptr<TabGroupUnderline>> group_underlines_; + // The view tracker is used to keep track of if the hover card has been // destroyed by its widget. TabHoverCardBubbleView* hover_card_ = nullptr;
diff --git a/chrome/browser/ui/views/tabs/tab_strip_layout_helper.cc b/chrome/browser/ui/views/tabs/tab_strip_layout_helper.cc index d3914c0f..6f5a05c 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_layout_helper.cc +++ b/chrome/browser/ui/views/tabs/tab_strip_layout_helper.cc
@@ -501,6 +501,11 @@ void TabStripLayoutHelper::AnimateSlot(int slots_index, TabAnimationState target_state) { slots_[slots_index].animation->AnimateTo(target_state); + if (!gfx::Animation::ShouldRenderRichAnimation()) { + slots_[slots_index].animation->CompleteAnimation(); + on_animation_progressed_.Run(); + return; + } if (!animation_timer_.IsRunning()) { animation_timer_.Start(FROM_HERE, kTickInterval, this, &TabStripLayoutHelper::TickAnimations);
diff --git a/chrome/browser/ui/views/tabs/tab_strip_unittest.cc b/chrome/browser/ui/views/tabs/tab_strip_unittest.cc index 79802ded..c3537bc7 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_unittest.cc +++ b/chrome/browser/ui/views/tabs/tab_strip_unittest.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/ui/views/tabs/tab.h" #include "chrome/browser/ui/views/tabs/tab_animation.h" #include "chrome/browser/ui/views/tabs/tab_group_header.h" +#include "chrome/browser/ui/views/tabs/tab_group_underline.h" #include "chrome/browser/ui/views/tabs/tab_icon.h" #include "chrome/browser/ui/views/tabs/tab_renderer_data.h" #include "chrome/browser/ui/views/tabs/tab_strip_controller.h" @@ -223,6 +224,13 @@ return result; } + std::vector<TabGroupUnderline*> ListGroupUnderlines() const { + std::vector<TabGroupUnderline*> result; + for (auto const& underline_pair : tab_strip_->group_underlines_) + result.push_back(underline_pair.second.get()); + return result; + } + // Owned by TabStrip. FakeBaseTabStripController* controller_ = nullptr; TabStrip* tab_strip_ = nullptr; @@ -1171,6 +1179,43 @@ EXPECT_EQ(0u, ListGroupHeaders().size()); } +TEST_P(TabStripTest, GroupUnderlineBasics) { + tab_strip_->SetBounds(0, 0, 1000, 100); + bounds_animator()->SetAnimationDuration(base::TimeDelta()); + tab_strip_->AddTabAt(0, TabRendererData(), false); + tab_strip_->AddTabAt(1, TabRendererData(), false); + + base::Optional<TabGroupId> group = TabGroupId::GenerateNew(); + controller_->MoveTabIntoGroup(0, group); + CompleteAnimationAndLayout(); + + std::vector<TabGroupUnderline*> underlines = ListGroupUnderlines(); + EXPECT_EQ(1u, underlines.size()); + TabGroupUnderline* underline = underlines[0]; + // Update underline manually in the absence of a real Paint cycle. + underline->UpdateVisuals(); + constexpr int kInset = 20; + constexpr int kStrokeWidth = 2; + EXPECT_EQ(underline->x(), kInset); + EXPECT_GT(underline->width(), 0); + EXPECT_EQ(underline->bounds().right(), + tab_strip_->tab_at(0)->bounds().right() - kInset); + EXPECT_EQ(underline->height(), kStrokeWidth); +} + +TEST_P(TabStripTest, DeleteTabGroupUnderlineWhenEmpty) { + tab_strip_->AddTabAt(0, TabRendererData(), false); + tab_strip_->AddTabAt(1, TabRendererData(), false); + base::Optional<TabGroupId> group = TabGroupId::GenerateNew(); + controller_->MoveTabIntoGroup(0, group); + controller_->MoveTabIntoGroup(1, group); + controller_->MoveTabIntoGroup(0, base::nullopt); + + EXPECT_EQ(1u, ListGroupUnderlines().size()); + controller_->MoveTabIntoGroup(1, base::nullopt); + EXPECT_EQ(0u, ListGroupUnderlines().size()); +} + TEST_P(TabStripTest, ChangingLayoutTypeResizesTabs) { tab_strip_->SetBounds(0, 0, 1000, 100);
diff --git a/chrome/browser/ui/views/tabs/tab_style_views.cc b/chrome/browser/ui/views/tabs/tab_style_views.cc index 4b25879..a12d9d7 100644 --- a/chrome/browser/ui/views/tabs/tab_style_views.cc +++ b/chrome/browser/ui/views/tabs/tab_style_views.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/tabs/tab_group_visual_data.h" #include "chrome/browser/ui/tabs/tab_types.h" +#include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/views/tabs/glow_hover_controller.h" #include "chrome/browser/ui/views/tabs/tab.h" #include "chrome/browser/ui/views/tabs/tab_close_button.h" @@ -22,8 +23,10 @@ #include "third_party/skia/include/pathops/SkPathOps.h" #include "ui/base/theme_provider.h" #include "ui/gfx/canvas.h" +#include "ui/gfx/font_list.h" #include "ui/gfx/scoped_canvas.h" #include "ui/views/style/platform_style.h" +#include "ui/views/style/typography.h" #include "ui/views/widget/widget.h" namespace { @@ -55,6 +58,7 @@ gfx::Insets GetContentsInsets() const override; float GetZValue() const override; TabStyle::TabColors CalculateColors() const override; + const gfx::FontList& GetFontList() const override; void PaintTab(gfx::Canvas* canvas) const override; void SetHoverLocation(const gfx::Point& location) override; void ShowHover(ShowHoverStyle style) override; @@ -130,6 +134,8 @@ const Tab* const tab_; std::unique_ptr<GlowHoverController> hover_controller_; + gfx::FontList normal_font_; + gfx::FontList heavy_font_; DISALLOW_COPY_AND_ASSIGN(GM2TabStyle); }; @@ -163,7 +169,14 @@ : tab_(tab), hover_controller_(gfx::Animation::ShouldRenderRichAnimation() ? new GlowHoverController(tab) - : nullptr) {} + : nullptr), + normal_font_(views::style::GetFont(views::style::CONTEXT_LABEL, + views::style::STYLE_PRIMARY)), + heavy_font_(views::style::GetFont(views::style::CONTEXT_BUTTON_MD, + views::style::STYLE_PRIMARY)) { + // TODO(dfried): create a new STYLE_PROMINENT or similar to use instead of + // repurposing CONTEXT_BUTTON_MD. +} SkPath GM2TabStyle::GetPath(PathType path_type, float scale, @@ -433,6 +446,19 @@ return {foreground_color, background_color}; } +const gfx::FontList& GM2TabStyle::GetFontList() const { + // Don't want to have to keep re-computing this value. + static const bool prominent_dark_mode_title = + base::FeatureList::IsEnabled(features::kProminentDarkModeActiveTabTitle); + + if (prominent_dark_mode_title && tab_->IsActive() && + color_utils::IsDark(GetTabBackgroundColor(TabActive::kActive))) { + return heavy_font_; + } + + return normal_font_; +} + void GM2TabStyle::PaintTab(gfx::Canvas* canvas) const { base::Optional<int> active_tab_fill_id; int active_tab_y_inset = 0; @@ -627,9 +653,14 @@ } int GM2TabStyle::GetStrokeThickness(bool should_paint_as_active) const { - return (tab_->IsActive() || should_paint_as_active) - ? tab_->controller()->GetStrokeThickness() - : 0; + base::Optional<SkColor> group_color = tab_->GetGroupColor(); + if (group_color.has_value() && tab_->IsActive()) + return 2; + + if (tab_->IsActive() || should_paint_as_active) + return tab_->controller()->GetStrokeThickness(); + + return 0; } bool GM2TabStyle::ShouldPaintTabBackgroundColor( @@ -653,20 +684,6 @@ SkColor color = tab_->controller()->GetTabBackgroundColor( active, BrowserNonClientFrameView::kUseCurrent); - base::Optional<SkColor> group_color = tab_->GetGroupColor(); - if (group_color.has_value()) { - if (tab_->IsActive()) { - color = group_color.value(); - } else { - // Tint with group color. With a dark scheme, the tint needs a higher - // contrast to stand out effectively. - const float target_contrast = color_utils::IsDark(color) ? 1.8f : 1.2f; - color = color_utils::BlendForMinContrast( - color, color, group_color.value(), target_contrast) - .color; - } - } - return color; } @@ -702,11 +719,14 @@ // |y_inset| is only set when |fill_id| is being used. DCHECK(!y_inset || fill_id.has_value()); + base::Optional<SkColor> group_color = tab_->GetGroupColor(); + PaintTabBackgroundFill(canvas, active, active == TabActive::kInactive && IsHoverActive(), fill_id, y_inset); - PaintBackgroundStroke(canvas, active, - tab_->controller()->GetToolbarTopSeparatorColor()); + PaintBackgroundStroke( + canvas, active, + group_color.value_or(tab_->controller()->GetToolbarTopSeparatorColor())); PaintSeparators(canvas); }
diff --git a/chrome/browser/ui/web_applications/bookmark_app_browsertest.cc b/chrome/browser/ui/web_applications/bookmark_app_browsertest.cc index 14663ae..4158fd2 100644 --- a/chrome/browser/ui/web_applications/bookmark_app_browsertest.cc +++ b/chrome/browser/ui/web_applications/bookmark_app_browsertest.cc
@@ -9,9 +9,9 @@ #include "base/test/bind_test_util.h" #include "base/test/metrics/histogram_tester.h" #include "chrome/browser/engagement/site_engagement_service.h" -#include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h" #include "chrome/browser/ui/web_applications/web_app_metrics.h" #include "chrome/browser/web_applications/components/pending_app_manager.h" #include "chrome/browser/web_applications/components/web_app_constants.h" @@ -134,7 +134,7 @@ } // namespace -class BookmarkAppTest : public extensions::ExtensionBrowserTest { +class BookmarkAppTest : public web_app::WebAppControllerBrowserTestBase { public: BookmarkAppTest() = default; ~BookmarkAppTest() override = default; @@ -221,7 +221,7 @@ DISALLOW_COPY_AND_ASSIGN(BookmarkAppTest); }; -IN_PROC_BROWSER_TEST_F(BookmarkAppTest, EngagementHistogramForAppInWindow) { +IN_PROC_BROWSER_TEST_P(BookmarkAppTest, EngagementHistogramForAppInWindow) { base::HistogramTester tester; const GURL example_url = GURL("http://example.org/"); @@ -249,7 +249,7 @@ TestEngagementEventsAfterLaunch(histograms, app_browser); } -IN_PROC_BROWSER_TEST_F(BookmarkAppTest, EngagementHistogramForAppInTab) { +IN_PROC_BROWSER_TEST_P(BookmarkAppTest, EngagementHistogramForAppInTab) { base::HistogramTester tester; const GURL example_url = GURL("http://example.org/"); @@ -275,7 +275,7 @@ TestEngagementEventsAfterLaunch(histograms, browser); } -IN_PROC_BROWSER_TEST_F(BookmarkAppTest, EngagementHistogramAppWithoutScope) { +IN_PROC_BROWSER_TEST_P(BookmarkAppTest, EngagementHistogramAppWithoutScope) { base::HistogramTester tester; const GURL example_url = GURL("http://example.org/"); @@ -306,7 +306,7 @@ TestEngagementEventsAfterLaunch(histograms, browser); } -IN_PROC_BROWSER_TEST_F(BookmarkAppTest, EngagementHistogramTwoApps) { +IN_PROC_BROWSER_TEST_P(BookmarkAppTest, EngagementHistogramTwoApps) { base::HistogramTester tester; const GURL example_url1 = GURL("http://example.org/"); @@ -354,7 +354,7 @@ ExpectTotalCounts(tester, ~histograms, 0); } -IN_PROC_BROWSER_TEST_F(BookmarkAppTest, EngagementHistogramManyUserApps) { +IN_PROC_BROWSER_TEST_P(BookmarkAppTest, EngagementHistogramManyUserApps) { base::HistogramTester tester; // More than 3 user-installed apps: @@ -395,7 +395,7 @@ ExpectTotalCounts(tester, ~histograms, 0); } -IN_PROC_BROWSER_TEST_F(BookmarkAppTest, EngagementHistogramDefaultApp) { +IN_PROC_BROWSER_TEST_P(BookmarkAppTest, EngagementHistogramDefaultApp) { base::HistogramTester tester; ASSERT_TRUE(embedded_test_server()->Start()); @@ -422,7 +422,7 @@ TestEngagementEventsAfterLaunch(histograms, browser); } -IN_PROC_BROWSER_TEST_F(BookmarkAppTest, +IN_PROC_BROWSER_TEST_P(BookmarkAppTest, EngagementHistogramNavigateAwayFromAppTab) { const GURL app_url = GURL("http://example.org/app/"); const GURL outer_url = GURL("http://example.org/"); @@ -456,7 +456,7 @@ } } -IN_PROC_BROWSER_TEST_F(BookmarkAppTest, EngagementHistogramRecordedForNonApps) { +IN_PROC_BROWSER_TEST_P(BookmarkAppTest, EngagementHistogramRecordedForNonApps) { base::HistogramTester tester; CountUserInstalledApps(); @@ -474,3 +474,8 @@ histograms[kHistogramNoUserInstalledApps] = true; TestEngagementEventsAfterLaunch(histograms, browser()); } + +INSTANTIATE_TEST_SUITE_P( + /* no prefix */, + BookmarkAppTest, + ::testing::Values(web_app::ControllerType::kHostedAppController));
diff --git a/chrome/browser/ui/web_applications/web_app_controller_browsertest.cc b/chrome/browser/ui/web_applications/web_app_controller_browsertest.cc index 9a139c8..2394ae89 100644 --- a/chrome/browser/ui/web_applications/web_app_controller_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_controller_browsertest.cc
@@ -21,23 +21,29 @@ namespace web_app { -WebAppControllerBrowserTest::WebAppControllerBrowserTest() - : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) { +WebAppControllerBrowserTestBase::WebAppControllerBrowserTestBase() { if (GetParam() == ControllerType::kUnifiedControllerWithWebApp) { scoped_feature_list_.InitWithFeatures( - {features::kDesktopPWAsWithoutExtensions}, - {predictors::kSpeculativePreconnectFeature}); + {features::kDesktopPWAsWithoutExtensions}, {}); } else if (GetParam() == ControllerType::kUnifiedControllerWithBookmarkApp) { scoped_feature_list_.InitWithFeatures( {features::kDesktopPWAsUnifiedUiController}, - {predictors::kSpeculativePreconnectFeature}); + {features::kDesktopPWAsWithoutExtensions}); } else { scoped_feature_list_.InitWithFeatures( {}, {features::kDesktopPWAsUnifiedUiController, - predictors::kSpeculativePreconnectFeature}); + features::kDesktopPWAsWithoutExtensions}); } } +WebAppControllerBrowserTestBase::~WebAppControllerBrowserTestBase() = default; + +WebAppControllerBrowserTest::WebAppControllerBrowserTest() + : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) { + scoped_feature_list_.InitWithFeatures( + {}, {predictors::kSpeculativePreconnectFeature}); +} + WebAppControllerBrowserTest::~WebAppControllerBrowserTest() = default; void WebAppControllerBrowserTest::SetUp() {
diff --git a/chrome/browser/ui/web_applications/web_app_controller_browsertest.h b/chrome/browser/ui/web_applications/web_app_controller_browsertest.h index 6586728..7079778 100644 --- a/chrome/browser/ui/web_applications/web_app_controller_browsertest.h +++ b/chrome/browser/ui/web_applications/web_app_controller_browsertest.h
@@ -33,10 +33,21 @@ // Base class for tests of user interface support for web applications. // ControllerType selects between use of WebAppBrowserController and // HostedAppBrowserController. -class WebAppControllerBrowserTest +class WebAppControllerBrowserTestBase : public extensions::ExtensionBrowserTest, public ::testing::WithParamInterface<ControllerType> { public: + WebAppControllerBrowserTestBase(); + ~WebAppControllerBrowserTestBase() = 0; + + private: + base::test::ScopedFeatureList scoped_feature_list_; + + DISALLOW_COPY_AND_ASSIGN(WebAppControllerBrowserTestBase); +}; + +class WebAppControllerBrowserTest : public WebAppControllerBrowserTestBase { + public: WebAppControllerBrowserTest(); ~WebAppControllerBrowserTest() = 0;
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index ef14e5e..bca9be0 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -183,6 +183,9 @@ #include "chrome/browser/ui/webui/chromeos/terminal/terminal_ui.h" #include "chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h" #include "chrome/browser/ui/webui/signin/inline_login_ui.h" +#include "chromeos/components/media_app_ui/media_app_guest_ui.h" +#include "chromeos/components/media_app_ui/media_app_ui.h" +#include "chromeos/components/media_app_ui/url_constants.h" #include "chromeos/components/multidevice/debug_webui/proximity_auth_ui.h" #include "chromeos/components/multidevice/debug_webui/url_constants.h" #include "chromeos/constants/chromeos_features.h" @@ -559,6 +562,12 @@ return &NewWebUI<chromeos::settings::OSSettingsUI>; if (url.host_piece() == chrome::kChromeUIPowerHost) return &NewWebUI<chromeos::PowerUI>; + if (base::FeatureList::IsEnabled(chromeos::features::kMediaApp)) { + if (url.host_piece() == chromeos::kChromeUIMediaAppHost) + return &NewWebUI<chromeos::MediaAppUI>; + if (url.host_piece() == chromeos::kChromeUIMediaAppGuestHost) + return &NewWebUI<chromeos::MediaAppGuestUI>; + } if (url.host_piece() == chromeos::multidevice::kChromeUIProximityAuthHost) return &NewWebUI<chromeos::multidevice::ProximityAuthUI>; if (url.host_piece() == chrome::kChromeUIInternetConfigDialogHost)
diff --git a/chrome/browser/ui/webui/discards/graph_dump_impl.cc b/chrome/browser/ui/webui/discards/graph_dump_impl.cc index 119b701..54d19f0 100644 --- a/chrome/browser/ui/webui/discards/graph_dump_impl.cc +++ b/chrome/browser/ui/webui/discards/graph_dump_impl.cc
@@ -221,7 +221,8 @@ } void DiscardsGraphDumpImpl::OnURLChanged( - const performance_manager::FrameNode* frame_node) { + const performance_manager::FrameNode* frame_node, + const GURL& previous_value) { SendFrameNotification(frame_node, false); StartFrameFaviconRequest(frame_node); }
diff --git a/chrome/browser/ui/webui/discards/graph_dump_impl.h b/chrome/browser/ui/webui/discards/graph_dump_impl.h index e981828..e292bcbd 100644 --- a/chrome/browser/ui/webui/discards/graph_dump_impl.h +++ b/chrome/browser/ui/webui/discards/graph_dump_impl.h
@@ -62,8 +62,9 @@ // Ignored. void OnOriginTrialFreezePolicyChanged( const performance_manager::FrameNode* frame_node, - InterventionPolicy previous_value) override {} - void OnURLChanged(const performance_manager::FrameNode* frame_node) override; + const InterventionPolicy& previous_value) override {} + void OnURLChanged(const performance_manager::FrameNode* frame_node, + const GURL& previous_value) override; // Ignored. void OnIsAdFrameChanged( const performance_manager::FrameNode* frame_node) override {}
diff --git a/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc b/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc index cbc8582..799b721 100644 --- a/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc +++ b/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc
@@ -12,6 +12,7 @@ #include "base/time/time.h" #include "chrome/browser/android/feed/feed_debugging_bridge.h" #include "chrome/browser/android/feed/feed_lifecycle_bridge.h" +#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "components/feed/content/feed_host_service.h" #include "components/feed/content/feed_offline_host.h" #include "components/feed/core/feed_scheduler_host.h" @@ -21,6 +22,8 @@ #include "components/offline_pages/core/prefetch/prefetch_prefs.h" #include "components/offline_pages/core/prefetch/suggestions_provider.h" #include "components/prefs/pref_service.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace { @@ -47,10 +50,10 @@ } // namespace FeedInternalsPageHandler::FeedInternalsPageHandler( - feed_internals::mojom::PageHandlerRequest request, + mojo::PendingReceiver<feed_internals::mojom::PageHandler> receiver, feed::FeedHostService* feed_host_service, PrefService* pref_service) - : binding_(this, std::move(request)), + : receiver_(this, std::move(receiver)), feed_scheduler_host_(feed_host_service->GetSchedulerHost()), feed_offline_host_(feed_host_service->GetOfflineHost()), pref_service_(pref_service) {}
diff --git a/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h b/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h index 2d03527..ab3a646 100644 --- a/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h +++ b/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h
@@ -10,7 +10,8 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" class PrefService; @@ -27,9 +28,10 @@ // Concrete implementation of feed_internals::mojom::PageHandler. class FeedInternalsPageHandler : public feed_internals::mojom::PageHandler { public: - FeedInternalsPageHandler(feed_internals::mojom::PageHandlerRequest request, - feed::FeedHostService* feed_host_service, - PrefService* pref_service); + FeedInternalsPageHandler( + mojo::PendingReceiver<feed_internals::mojom::PageHandler> receiver, + feed::FeedHostService* feed_host_service, + PrefService* pref_service); ~FeedInternalsPageHandler() override; // feed_internals::mojom::PageHandler @@ -45,8 +47,7 @@ void GetFeedHistograms(GetFeedHistogramsCallback) override; private: - // Binding from the mojo interface to concrete implementation. - mojo::Binding<feed_internals::mojom::PageHandler> binding_; + mojo::Receiver<feed_internals::mojom::PageHandler> receiver_; void OnGetCurrentArticleSuggestionsDone( GetCurrentContentCallback callback,
diff --git a/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc b/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc index de2a7c2..051f6fe 100644 --- a/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc +++ b/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc
@@ -9,10 +9,12 @@ #include "base/bind.h" #include "chrome/browser/android/feed/feed_host_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" FeedInternalsUI::FeedInternalsUI(content::WebUI* web_ui) : ui::MojoWebUIController(web_ui), profile_(Profile::FromWebUI(web_ui)) { @@ -35,9 +37,9 @@ FeedInternalsUI::~FeedInternalsUI() = default; void FeedInternalsUI::BindFeedInternalsPageHandler( - feed_internals::mojom::PageHandlerRequest request) { + mojo::PendingReceiver<feed_internals::mojom::PageHandler> receiver) { page_handler_ = std::make_unique<FeedInternalsPageHandler>( - std::move(request), + std::move(receiver), feed::FeedHostServiceFactory::GetForBrowserContext(profile_), profile_->GetPrefs()); }
diff --git a/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h b/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h index 8d6077f..662b9bb 100644 --- a/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h +++ b/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h
@@ -8,7 +8,9 @@ #include <memory> #include "base/macros.h" +#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" class Profile; @@ -27,7 +29,7 @@ private: void BindFeedInternalsPageHandler( - feed_internals::mojom::PageHandlerRequest request); + mojo::PendingReceiver<feed_internals::mojom::PageHandler> receiver); Profile* profile_;
diff --git a/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom b/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom index 7e520156..061c1e82 100644 --- a/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom +++ b/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom
@@ -58,7 +58,7 @@ GetPreviewsFlagsDetails() => (array<PreviewsFlag> flags); // Inject the client side page object. - SetClientPage(InterventionsInternalsPage page); + SetClientPage(pending_remote<InterventionsInternalsPage> page); // Change the status of ignoring blacklist to |ignored|. |ignored| will // indicate whether the blacklist decision would be ignored when deciding if a
diff --git a/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc b/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc index 2becb485..f6bce1c0 100644 --- a/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc +++ b/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc
@@ -14,10 +14,15 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/flag_descriptions.h" +#include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h" #include "chrome/common/chrome_switches.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/previews/core/previews_experiments.h" #include "components/previews/core/previews_switches.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/features.h" #include "net/nqe/network_quality_estimator_params.h" #include "services/network/public/cpp/network_quality_tracker.h" @@ -123,10 +128,10 @@ } // namespace InterventionsInternalsPageHandler::InterventionsInternalsPageHandler( - mojom::InterventionsInternalsPageHandlerRequest request, + mojo::PendingReceiver<mojom::InterventionsInternalsPageHandler> receiver, previews::PreviewsUIService* previews_ui_service, network::NetworkQualityTracker* network_quality_tracker) - : binding_(this, std::move(request)), + : receiver_(this, std::move(receiver)), previews_ui_service_(previews_ui_service), network_quality_tracker_(network_quality_tracker), current_estimated_ect_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN) { @@ -143,8 +148,8 @@ } void InterventionsInternalsPageHandler::SetClientPage( - mojom::InterventionsInternalsPagePtr page) { - page_ = std::move(page); + mojo::PendingRemote<mojom::InterventionsInternalsPage> page) { + page_.Bind(std::move(page)); DCHECK(page_); logger_->AddAndNotifyObserver(this); (network_quality_tracker_ ? network_quality_tracker_
diff --git a/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h b/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h index 87a45b7..b892a1e 100644 --- a/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h +++ b/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h
@@ -13,7 +13,10 @@ #include "components/previews/content/previews_ui_service.h" #include "components/previews/core/previews_logger.h" #include "components/previews/core/previews_logger_observer.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/nqe/effective_connection_type.h" #include "services/network/public/cpp/network_quality_tracker.h" @@ -23,7 +26,7 @@ public mojom::InterventionsInternalsPageHandler { public: InterventionsInternalsPageHandler( - mojom::InterventionsInternalsPageHandlerRequest request, + mojo::PendingReceiver<mojom::InterventionsInternalsPageHandler> receiver, previews::PreviewsUIService* previews_ui_service, network::NetworkQualityTracker* network_quality_tracker); ~InterventionsInternalsPageHandler() override; @@ -32,7 +35,8 @@ void GetPreviewsEnabled(GetPreviewsEnabledCallback callback) override; void GetPreviewsFlagsDetails( GetPreviewsFlagsDetailsCallback callback) override; - void SetClientPage(mojom::InterventionsInternalsPagePtr page) override; + void SetClientPage( + mojo::PendingRemote<mojom::InterventionsInternalsPage> page) override; void SetIgnorePreviewsBlacklistDecision(bool ignore) override; // previews::PreviewsLoggerObserver: @@ -49,7 +53,7 @@ void OnEffectiveConnectionTypeChanged( net::EffectiveConnectionType type) override; - mojo::Binding<mojom::InterventionsInternalsPageHandler> binding_; + mojo::Receiver<mojom::InterventionsInternalsPageHandler> receiver_; // The PreviewsLogger that this handler is listening to, and guaranteed to // outlive |this|. @@ -67,7 +71,7 @@ net::EffectiveConnectionType current_estimated_ect_; // Handle back to the page by which we can pass in new log messages. - mojom::InterventionsInternalsPagePtr page_; + mojo::Remote<mojom::InterventionsInternalsPage> page_; DISALLOW_COPY_AND_ASSIGN(InterventionsInternalsPageHandler); };
diff --git a/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc b/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc index c4b5994f9..ec9be763 100644 --- a/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc +++ b/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc
@@ -39,7 +39,9 @@ #include "components/previews/core/previews_logger_observer.h" #include "components/previews/core/previews_switches.h" #include "content/public/test/browser_task_environment.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "net/base/features.h" #include "net/nqe/effective_connection_type.h" #include "net/nqe/network_quality_estimator_params.h" @@ -145,8 +147,8 @@ : public mojom::InterventionsInternalsPage { public: TestInterventionsInternalsPage( - mojom::InterventionsInternalsPageRequest request) - : binding_(this, std::move(request)), blacklist_ignored_(false) {} + mojo::PendingReceiver<mojom::InterventionsInternalsPage> receiver) + : receiver_(this, std::move(receiver)), blacklist_ignored_(false) {} ~TestInterventionsInternalsPage() override {} @@ -188,7 +190,7 @@ bool blacklist_ignored() const { return blacklist_ignored_; } private: - mojo::Binding<mojom::InterventionsInternalsPage> binding_; + mojo::Receiver<mojom::InterventionsInternalsPage> receiver_; // The MessageLogPtr passed in LogNewMessage method. std::unique_ptr<mojom::MessageLogPtr> message_; @@ -285,21 +287,21 @@ ASSERT_TRUE(profile_manager_.SetUp()); - mojom::InterventionsInternalsPageHandlerPtr page_handler_ptr; - - mojom::InterventionsInternalsPageHandlerRequest handler_request = - mojo::MakeRequest(&page_handler_ptr); + mojo::PendingReceiver<mojom::InterventionsInternalsPageHandler> + handler_receiver = + mojo::PendingRemote<mojom::InterventionsInternalsPageHandler>() + .InitWithNewPipeAndPassReceiver(); page_handler_ = std::make_unique<InterventionsInternalsPageHandler>( - std::move(handler_request), previews_ui_service_.get(), + std::move(handler_receiver), previews_ui_service_.get(), &test_network_quality_tracker_); - mojom::InterventionsInternalsPagePtr page_ptr; - mojom::InterventionsInternalsPageRequest page_request = - mojo::MakeRequest(&page_ptr); + mojo::PendingRemote<mojom::InterventionsInternalsPage> page; + mojo::PendingReceiver<mojom::InterventionsInternalsPage> page_receiver = + page.InitWithNewPipeAndPassReceiver(); page_ = std::make_unique<TestInterventionsInternalsPage>( - std::move(page_request)); + std::move(page_receiver)); - page_handler_->SetClientPage(std::move(page_ptr)); + page_handler_->SetClientPage(std::move(page)); scoped_feature_list_ = std::make_unique<base::test::ScopedFeatureList>(); }
diff --git a/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc b/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc index 2bd0e34..7a6d49b 100644 --- a/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc +++ b/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h" +#include <memory> #include <string> #include <utility> #include <vector> @@ -12,10 +13,12 @@ #include "chrome/browser/previews/previews_service.h" #include "chrome/browser/previews/previews_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "components/previews/content/previews_ui_service.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" namespace { @@ -62,8 +65,8 @@ InterventionsInternalsUI::~InterventionsInternalsUI() {} void InterventionsInternalsUI::BindInterventionsInternalsPageHandler( - mojom::InterventionsInternalsPageHandlerRequest request) { + mojo::PendingReceiver<mojom::InterventionsInternalsPageHandler> receiver) { DCHECK(previews_ui_service_); page_handler_ = std::make_unique<InterventionsInternalsPageHandler>( - std::move(request), previews_ui_service_, nullptr); + std::move(receiver), previews_ui_service_, nullptr); }
diff --git a/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h b/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h index b284a9d..97143b0 100644 --- a/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h +++ b/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h
@@ -8,6 +8,7 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h" #include "chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace previews { @@ -22,7 +23,7 @@ private: void BindInterventionsInternalsPageHandler( - mojom::InterventionsInternalsPageHandlerRequest request); + mojo::PendingReceiver<mojom::InterventionsInternalsPageHandler> receiver); // The PreviewsUIService associated with this UI. previews::PreviewsUIService* previews_ui_service_;
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc index 0c7b2eb..6ead28d7 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -66,6 +66,10 @@ #include "base/enterprise_util.h" #endif +#if !BUILDFLAG(OPTIMIZE_WEBUI) +#include "chrome/browser/ui/webui/managed_ui_handler.h" +#endif + using content::WebContents; namespace printing { @@ -471,7 +475,12 @@ handler_(CreatePrintPreviewHandlers(web_ui)) { // Set up the chrome://print/ data source. Profile* profile = Profile::FromWebUI(web_ui); - content::WebUIDataSource::Add(profile, CreatePrintPreviewUISource(profile)); + content::WebUIDataSource* source = CreatePrintPreviewUISource(profile); +#if !BUILDFLAG(OPTIMIZE_WEBUI) + // For the Polymer 3 demo page. + ManagedUIHandler::Initialize(web_ui, source); +#endif + content::WebUIDataSource::Add(profile, source); // Set up the chrome://theme/ source. content::URLDataSource::Add(profile, std::make_unique<ThemeSource>(profile));
diff --git a/chrome/browser/ui/webui/test_data_source.cc b/chrome/browser/ui/webui/test_data_source.cc index 2b447e8..7a7790a3 100644 --- a/chrome/browser/ui/webui/test_data_source.cc +++ b/chrome/browser/ui/webui/test_data_source.cc
@@ -33,6 +33,15 @@ const std::string& path, const content::WebContents::Getter& wc_getter, const content::URLDataSource::GotDataCallback& callback) { + if (path == "strings.m.js") { + std::string output = "import {loadTimeData} from "; + output.append("'chrome://resources/js/load_time_data.m.js';\n"); + output.append("loadTimeData.data = {};"); + scoped_refptr<base::RefCountedString> response = + base::RefCountedString::TakeString(&output); + callback.Run(response.get()); + return; + } base::PostTask( FROM_HERE, {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_BLOCKING},
diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn index 1d9691c..2eaa486 100644 --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn
@@ -101,8 +101,6 @@ "subresource_redirect/subresource_redirect_url_loader_throttle.h", "subresource_redirect/subresource_redirect_util.cc", "subresource_redirect/subresource_redirect_util.h", - "supervised_user/supervised_user_error_page_controller.cc", - "supervised_user/supervised_user_error_page_controller.h", "url_loader_throttle_provider_impl.cc", "url_loader_throttle_provider_impl.h", "v8_unwinder.cc", @@ -115,6 +113,16 @@ "worker_content_settings_client.h", ] + if (enable_supervised_users) { + sources += [ + "supervised_user/supervised_user_error_page_controller.cc", + "supervised_user/supervised_user_error_page_controller.h", + "supervised_user/supervised_user_error_page_controller_delegate.h", + "supervised_user/supervised_user_error_page_controller_delegate_impl.cc", + "supervised_user/supervised_user_error_page_controller_delegate_impl.h", + ] + } + defines = [] deps = [
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index 55fb9c1..a7fb304 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -216,6 +216,10 @@ #endif // BUILDFLAG(HAS_SPELLCHECK_PANEL) #endif // BUILDFLAG(ENABLE_SPELLCHECK) +#if BUILDFLAG(ENABLE_SUPERVISED_USERS) +#include "chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h" +#endif + using autofill::AutofillAgent; using autofill::PasswordAutofillAgent; using autofill::PasswordGenerationAgent; @@ -502,6 +506,10 @@ new NetErrorHelper(render_frame); +#if BUILDFLAG(ENABLE_SUPERVISED_USERS) + new SupervisedUserErrorPageControllerDelegateImpl(render_frame); +#endif + if (!render_frame->IsMainFrame()) { auto* prerender_helper = prerender::PrerenderHelper::Get( render_frame->GetRenderView()->GetMainRenderFrame()); @@ -1176,6 +1184,11 @@ error_page::Error::NetError(web_error.url(), web_error.reason(), web_error.has_copy_in_cache()), http_method == "POST", error_html); + +#if BUILDFLAG(ENABLE_SUPERVISED_USERS) + SupervisedUserErrorPageControllerDelegateImpl::Get(render_frame) + ->PrepareForErrorPage(); +#endif } void ChromeContentRendererClient::PrepareErrorPageForHttpStatusError(
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc index 3b74dd9b..b30123e 100644 --- a/chrome/renderer/net/net_error_helper.cc +++ b/chrome/renderer/net/net_error_helper.cc
@@ -25,7 +25,6 @@ #include "chrome/common/render_messages.h" #include "chrome/renderer/chrome_render_thread_observer.h" #include "chrome/renderer/security_interstitials/security_interstitial_page_controller.h" -#include "chrome/renderer/supervised_user/supervised_user_error_page_controller.h" #include "components/error_page/common/error.h" #include "components/error_page/common/error_page_params.h" #include "components/error_page/common/localized_error.h" @@ -274,22 +273,6 @@ } } -void NetErrorHelper::GoBack() { - if (supervised_user_interface_) - supervised_user_interface_->GoBack(); -} - -void NetErrorHelper::RequestPermission( - base::OnceCallback<void(bool)> callback) { - if (supervised_user_interface_) - supervised_user_interface_->RequestPermission(std::move(callback)); -} - -void NetErrorHelper::Feedback() { - if (supervised_user_interface_) - supervised_user_interface_->Feedback(); -} - void NetErrorHelper::DidStartNavigation( const GURL& url, base::Optional<blink::WebNavigationType> navigation_type) { @@ -308,7 +291,6 @@ // it. weak_controller_delegate_factory_.InvalidateWeakPtrs(); weak_security_interstitial_controller_delegate_factory_.InvalidateWeakPtrs(); - weak_supervised_user_error_controller_delegate_factory_.InvalidateWeakPtrs(); core_->OnCommitLoad(GetFrameType(render_frame()), render_frame()->GetWebFrame()->GetDocument().Url()); @@ -435,14 +417,6 @@ weak_security_interstitial_controller_delegate_factory_.GetWeakPtr()); NetErrorPageController::Install( render_frame(), weak_controller_delegate_factory_.GetWeakPtr()); - - if (!supervised_user_interface_) { - render_frame()->GetRemoteAssociatedInterfaces()->GetInterface( - &supervised_user_interface_); - } - SupervisedUserErrorPageController::Install( - render_frame(), - weak_supervised_user_error_controller_delegate_factory_.GetWeakPtr()); } LocalizedError::PageState NetErrorHelper::UpdateErrorPage(
diff --git a/chrome/renderer/net/net_error_helper.h b/chrome/renderer/net/net_error_helper.h index eb49632..56e642d 100644 --- a/chrome/renderer/net/net_error_helper.h +++ b/chrome/renderer/net/net_error_helper.h
@@ -15,12 +15,9 @@ #include "chrome/common/navigation_corrector.mojom.h" #include "chrome/common/network_diagnostics.mojom.h" #include "chrome/common/network_easter_egg.mojom.h" -#include "chrome/common/supervised_user_commands.mojom.h" #include "chrome/renderer/net/net_error_helper_core.h" #include "chrome/renderer/net/net_error_page_controller.h" #include "chrome/renderer/security_interstitials/security_interstitial_page_controller.h" -#include "chrome/renderer/supervised_user/supervised_user_error_page_controller.h" -#include "chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate.h" #include "components/error_page/common/localized_error.h" #include "components/error_page/common/net_error_info.h" #include "components/security_interstitials/core/controller_client.h" @@ -55,7 +52,6 @@ public NetErrorHelperCore::Delegate, public NetErrorPageController::Delegate, public SecurityInterstitialPageController::Delegate, - public SupervisedUserErrorPageControllerDelegate, public chrome::mojom::NetworkDiagnosticsClient, public chrome::mojom::NavigationCorrector { public: @@ -78,11 +74,6 @@ void SendCommand( security_interstitials::SecurityInterstitialCommand command) override; - // SupervisedUserErrorPageControllerDelegate implementation - void GoBack() override; - void RequestPermission(base::OnceCallback<void(bool)> callback) override; - void Feedback() override; - // RenderFrameObserver implementation. void DidStartNavigation( const GURL& url, @@ -197,9 +188,6 @@ mojo::AssociatedRemote<chrome::mojom::NetworkEasterEgg> remote_network_easter_egg_; - mojo::AssociatedRemote<supervised_user::mojom::SupervisedUserCommands> - supervised_user_interface_; - // Weak factories for vending weak pointers to PageControllers. Weak // pointers are invalidated on each commit, to prevent getting messages from // Controllers used for the previous commit that haven't yet been cleaned up. @@ -209,9 +197,6 @@ base::WeakPtrFactory<SecurityInterstitialPageController::Delegate> weak_security_interstitial_controller_delegate_factory_{this}; - base::WeakPtrFactory<SupervisedUserErrorPageControllerDelegate> - weak_supervised_user_error_controller_delegate_factory_{this}; - DISALLOW_COPY_AND_ASSIGN(NetErrorHelper); };
diff --git a/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.cc b/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.cc new file mode 100644 index 0000000..093f569 --- /dev/null +++ b/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.cc
@@ -0,0 +1,66 @@ +// 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 "chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h" + +#include "chrome/renderer/supervised_user/supervised_user_error_page_controller.h" +#include "content/public/renderer/render_frame.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" + +SupervisedUserErrorPageControllerDelegateImpl:: + SupervisedUserErrorPageControllerDelegateImpl( + content::RenderFrame* render_frame) + : content::RenderFrameObserver(render_frame), + content::RenderFrameObserverTracker< + SupervisedUserErrorPageControllerDelegateImpl>(render_frame) {} + +SupervisedUserErrorPageControllerDelegateImpl:: + ~SupervisedUserErrorPageControllerDelegateImpl() = default; + +void SupervisedUserErrorPageControllerDelegateImpl::PrepareForErrorPage() { + pending_error_ = true; +} + +void SupervisedUserErrorPageControllerDelegateImpl::GoBack() { + if (supervised_user_interface_) + supervised_user_interface_->GoBack(); +} + +void SupervisedUserErrorPageControllerDelegateImpl::RequestPermission( + base::OnceCallback<void(bool)> callback) { + if (supervised_user_interface_) + supervised_user_interface_->RequestPermission(std::move(callback)); +} + +void SupervisedUserErrorPageControllerDelegateImpl::Feedback() { + if (supervised_user_interface_) + supervised_user_interface_->Feedback(); +} + +void SupervisedUserErrorPageControllerDelegateImpl::OnDestruct() { + delete this; +} + +void SupervisedUserErrorPageControllerDelegateImpl::DidFinishLoad() { + if (committed_error_) { + if (!supervised_user_interface_) { + render_frame()->GetRemoteAssociatedInterfaces()->GetInterface( + &supervised_user_interface_); + } + + SupervisedUserErrorPageController::Install( + render_frame(), + weak_supervised_user_error_controller_delegate_factory_.GetWeakPtr()); + } +} + +void SupervisedUserErrorPageControllerDelegateImpl::ReadyToCommitNavigation( + blink::WebDocumentLoader* document_loader) { + // We are about to commit a new navigation in this render frame. + // Invalidate the weak pointer in previous error page controller, i.e. + // |SupervisedUserErrorPageController::delegate_|; + weak_supervised_user_error_controller_delegate_factory_.InvalidateWeakPtrs(); + committed_error_ = pending_error_; + pending_error_ = false; +}
diff --git a/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h b/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h new file mode 100644 index 0000000..43f4708 --- /dev/null +++ b/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h
@@ -0,0 +1,61 @@ +// 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 CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_DELEGATE_IMPL_H_ +#define CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_DELEGATE_IMPL_H_ + +#include "base/callback_forward.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "chrome/common/supervised_user_commands.mojom.h" +#include "chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate.h" +#include "content/public/renderer/render_frame_observer.h" +#include "content/public/renderer/render_frame_observer_tracker.h" +#include "mojo/public/cpp/bindings/associated_remote.h" + +namespace content { +class RenderFrame; +} // namespace content + +class SupervisedUserErrorPageControllerDelegateImpl + : public content::RenderFrameObserver, + public content::RenderFrameObserverTracker< + SupervisedUserErrorPageControllerDelegateImpl>, + public SupervisedUserErrorPageControllerDelegate { + public: + explicit SupervisedUserErrorPageControllerDelegateImpl( + content::RenderFrame* render_frame); + ~SupervisedUserErrorPageControllerDelegateImpl() override; + + // Notifies us that a navigation error has occurred and will be committed. + void PrepareForErrorPage(); + + // SupervisedUserErrorPageControllerDelegate: + void GoBack() override; + void RequestPermission(base::OnceCallback<void(bool)> callback) override; + void Feedback() override; + + // content::RenderFrameObserver: + void OnDestruct() override; + void DidFinishLoad() override; + void ReadyToCommitNavigation( + blink::WebDocumentLoader* document_loader) override; + + private: + mojo::AssociatedRemote<supervised_user::mojom::SupervisedUserCommands> + supervised_user_interface_; + + // Whether there is an error page pending to be committed. + bool pending_error_ = false; + + // Whether the committed page is an error page. + bool committed_error_ = false; + + base::WeakPtrFactory<SupervisedUserErrorPageControllerDelegate> + weak_supervised_user_error_controller_delegate_factory_{this}; + + DISALLOW_COPY_AND_ASSIGN(SupervisedUserErrorPageControllerDelegateImpl); +}; + +#endif // CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_DELEGATE_IMPL_H_
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 05ffe31..a2daf85 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -1434,6 +1434,9 @@ "//chrome/test/data/webui:browser_tests_js_mojo_lite_webui", "//chrome/test/data/webui:browser_tests_js_webui", ] + if (is_chromeos) { + deps += [ "//chromeos/components/media_app_ui:browser_tests_js" ] + } } if (!is_fuchsia) {
diff --git a/chrome/test/base/test_chrome_web_ui_controller_factory.cc b/chrome/test/base/test_chrome_web_ui_controller_factory.cc index 9f9d7b64..c87472d 100644 --- a/chrome/test/base/test_chrome_web_ui_controller_factory.cc +++ b/chrome/test/base/test_chrome_web_ui_controller_factory.cc
@@ -4,6 +4,7 @@ #include "chrome/test/base/test_chrome_web_ui_controller_factory.h" +#include "base/bind_helpers.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/test_data_source.h" #include "content/public/browser/url_data_source.h" @@ -62,6 +63,8 @@ provider ? provider->NewWebUI(web_ui, webui_url) : ChromeWebUIControllerFactory::CreateWebUIControllerForURL( web_ui, webui_url); + // Add an empty callback since managed-footnote always sends this message. + web_ui->RegisterMessageCallback("observeManagedUI", base::DoNothing()); content::URLDataSource::Add(profile, std::make_unique<TestDataSource>()); return controller; }
diff --git a/chrome/test/data/extensions/api_test/sandboxed_pages_csp/manifest.json b/chrome/test/data/extensions/api_test/sandboxed_pages_csp/manifest.json index 78fc610..e3221c0 100644 --- a/chrome/test/data/extensions/api_test/sandboxed_pages_csp/manifest.json +++ b/chrome/test/data/extensions/api_test/sandboxed_pages_csp/manifest.json
@@ -2,6 +2,7 @@ "name": "Tests that loading web content fails inside sandboxed pages", "manifest_version": 2, "version": "0.1", + "web_accessible_resources": ["local_frame.html", "remote_frame.html"], "sandbox": { "pages": ["sandboxed.html"], "content_security_policy": "sandbox allow-scripts; child-src *;"
diff --git a/chrome/test/data/extensions/platform_apps/web_view/load_webview_accessible_resource/embedder.js b/chrome/test/data/extensions/platform_apps/web_view/load_webview_accessible_resource/embedder.js index 78955cc..28e8b44 100644 --- a/chrome/test/data/extensions/platform_apps/web_view/load_webview_accessible_resource/embedder.js +++ b/chrome/test/data/extensions/platform_apps/web_view/load_webview_accessible_resource/embedder.js
@@ -14,6 +14,8 @@ testBlobInWebviewAccessibleResource(); } else if (testName == 'testLoadWebviewInaccessibleResource') { testLoadWebviewInaccessibleResource(); + } else if (testName == 'testNavigateGuestToWebviewAccessibleResource') { + testNavigateGuestToWebviewAccessibleResource(); } else { window.console.log('Incorrect testName: ' + testName); chrome.test.sendMessage('TEST_FAILED'); @@ -38,6 +40,25 @@ webview.src = embedder.guestURL; }; +function testNavigateGuestToWebviewAccessibleResource() { + var webview = document.querySelector('webview'); + + webview.addEventListener('loadstop', function() { + webview.executeScript( + {code: 'document.body.innerText'}, function(result) { + // If the test html loads successfully, it will have a body + // containing the text "Foo" (and the test passes in this case). + if (result == "Foo") + chrome.test.sendMessage('TEST_PASSED'); + else + chrome.test.sendMessage('TEST_FAILED'); + }); + }); + + webview.src = + 'chrome-extension://lmnhajohhbenlbinimlfhbpnciehhmao/assets/foo.html'; +}; + function testReloadWebviewAccessibleResource() { var webview = document.querySelector('webview'); var didReload = false; @@ -124,10 +145,12 @@ onload = function() { chrome.test.getConfig(function(config) { - embedder.guestURL = - 'http://localhost:' + config.testServer.port + - '/extensions/platform_apps/web_view/load_webview_accessible_resource/' + - 'guest.html'; + if (config.testServer) { + embedder.guestURL = + 'http://localhost:' + config.testServer.port + + '/extensions/platform_apps/web_view/' + + 'load_webview_accessible_resource/guest.html'; + } chrome.test.sendMessage('Launched'); }); };
diff --git a/chrome/test/data/frame_tree/page_with_two_frames_remote_and_local.html b/chrome/test/data/frame_tree/page_with_two_frames_remote_and_local.html index 4e5f365..6369b1e 100644 --- a/chrome/test/data/frame_tree/page_with_two_frames_remote_and_local.html +++ b/chrome/test/data/frame_tree/page_with_two_frames_remote_and_local.html
@@ -3,7 +3,7 @@ <head></head> <body> This page has two iframes: one is cross-site, the other is same-site. - <iframe src="/cross-site/bar.com/title1.html"></iframe> - <iframe src="/title1.html"></iframe> + <iframe name="remote-frame" src="/cross-site/bar.com/title1.html"></iframe> + <iframe name="local-frame" src="/title1.html"></iframe> </body> </html>
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn index 039a75a..a4c2fad 100644 --- a/chrome/test/data/webui/BUILD.gn +++ b/chrome/test/data/webui/BUILD.gn
@@ -63,6 +63,7 @@ "bookmarks/bookmarks_browsertest.js", "chrome_send_browsertest.js", "cr_components/cr_components_browsertest.js", + "cr_components/cr_components_v3_browsertest.js", "cr_elements/cr_elements_browsertest.js", "cr_elements/cr_elements_v3_browsertest.js", "find_shortcut_behavior_browsertest.js", @@ -164,6 +165,7 @@ "//skia", ] data = [ + "$root_gen_dir/chrome/test/data/webui/cr_components/managed_footnote_test.m.js", "$root_gen_dir/chrome/test/data/webui/cr_elements/cr_button_tests.m.js", "$root_gen_dir/chrome/test/data/webui/cr_elements/cr_container_shadow_behavior_test.m.js", "$root_gen_dir/chrome/test/data/webui/cr_elements/cr_dialog_test.m.js", @@ -262,6 +264,7 @@ group("modulize") { deps = [ ":modulize_local", + "./cr_components:modulize", "./cr_elements:modulize", ] }
diff --git a/chrome/test/data/webui/cr_components/BUILD.gn b/chrome/test/data/webui/cr_components/BUILD.gn new file mode 100644 index 0000000..8f4f8378 --- /dev/null +++ b/chrome/test/data/webui/cr_components/BUILD.gn
@@ -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("//ui/webui/resources/tools/js_modulizer.gni") + +js_modulizer("modulize") { + input_files = [ "managed_footnote_test.js" ] + namespace_rewrites = [ "cr.isChromeOS|isChromeOS" ] +}
diff --git a/chrome/test/data/webui/cr_components/cr_components_v3_browsertest.js b/chrome/test/data/webui/cr_components/cr_components_v3_browsertest.js new file mode 100644 index 0000000..96bece9 --- /dev/null +++ b/chrome/test/data/webui/cr_components/cr_components_v3_browsertest.js
@@ -0,0 +1,55 @@ +// 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. + +/** @fileoverview Tests for shared Polymer 3 components. */ + +// Polymer BrowserTest fixture. +GEN_INCLUDE(['//chrome/test/data/webui/polymer_browser_test_base.js']); + +/** Test fixture for shared Polymer 3 components. */ +// eslint-disable-next-line no-var +var CrComponentsV3BrowserTest = class extends PolymerTest { + /** @override */ + get browsePreload() { + return 'chrome://dummyurl'; + } + + /** @override */ + get extraLibraries() { + return [ + '//third_party/mocha/mocha.js', + '//chrome/test/data/webui/mocha_adapter.js', + ]; + } + + /** @override */ + get webuiHost() { + return 'dummyurl'; + } + + /** @override */ + get runAccessibilityChecks() { + return false; + } + + /** @override */ + setUp() { + PolymerTest.prototype.setUp.call(this); + // We aren't loading the main document. + this.accessibilityAuditConfig.ignoreSelectors('humanLangMissing', 'html'); + } +}; + +// eslint-disable-next-line no-var +var CrComponentsManagedFootnoteV3Test = + class extends CrComponentsV3BrowserTest { + /** @override */ + get browsePreload() { + return 'chrome://test?module=cr_components/managed_footnote_test.m.js'; + } +}; + +TEST_F('CrComponentsManagedFootnoteV3Test', 'All', function() { + mocha.run(); +});
diff --git a/chrome/test/data/webui/cr_components/managed_footnote_test.js b/chrome/test/data/webui/cr_components/managed_footnote_test.js index 79f5ff3..af1de8c1 100644 --- a/chrome/test/data/webui/cr_components/managed_footnote_test.js +++ b/chrome/test/data/webui/cr_components/managed_footnote_test.js
@@ -3,6 +3,16 @@ // found in the LICENSE file. /** @fileoverview Suite of tests for managed-footnote. */ + +// clang-format off +// #import 'chrome://resources/cr_components/managed_footnote/managed_footnote.m.js'; +// +// #import '../strings.m.js'; +// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// #import {isChromeOS} from 'chrome://resources/js/cr.m.js'; +// #import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +// clang-format on + cr.define('managed_footnote_test', function() { /** @enum {string} */ const TestNames = { @@ -69,20 +79,23 @@ assertNotEquals('none', getComputedStyle(footnote).display); }); - test('Reads Attributes From loadTimeData device message', function() { - const browserMessage = 'the quick brown fox jumps over the lazy dog'; - const deviceMessage = 'the lazy dog jumps over the quick brown fox'; - const footnote = - setupTestElement(true, browserMessage, deviceMessage, ''); + if (cr.isChromeOS) { + test('Reads Attributes From loadTimeData device message', function() { + const browserMessage = 'the quick brown fox jumps over the lazy dog'; + const deviceMessage = 'the lazy dog jumps over the quick brown fox'; + const footnote = + setupTestElement(true, browserMessage, deviceMessage, ''); - assertNotEquals('none', getComputedStyle(footnote).display); - assertTrue(footnote.shadowRoot.textContent.includes(browserMessage)); + assertNotEquals('none', getComputedStyle(footnote).display); + assertTrue(footnote.shadowRoot.textContent.includes(browserMessage)); - footnote.showDeviceInfo = true; - assertTrue(footnote.shadowRoot.textContent.includes(deviceMessage)); - }); + footnote.showDeviceInfo = true; + assertTrue(footnote.shadowRoot.textContent.includes(deviceMessage)); + }); + } }); + // #cr_define_end return { suiteName: suiteName, TestNames: TestNames,
diff --git a/chrome/test/data/webui/settings/people_page_test.js b/chrome/test/data/webui/settings/people_page_test.js index 884f40dd..ae21d293 100644 --- a/chrome/test/data/webui/settings/people_page_test.js +++ b/chrome/test/data/webui/settings/people_page_test.js
@@ -692,24 +692,19 @@ peoplePage.$$('#profile-name').textContent.trim()); }); - test('clicking profile row does not open change picture page', () => { + test('profile row is actionable', () => { // Simulate a signed-in user. sync_test_util.simulateSyncStatus({ signedIn: true, }); - // Profile row items aren't actionable. + // Profile row opens account manager, so the row is actionable. const profileIcon = assert(peoplePage.$$('#profile-icon')); - assertFalse(profileIcon.hasAttribute('actionable')); + assertTrue(profileIcon.hasAttribute('actionable')); const profileRow = assert(peoplePage.$$('#profile-row')); - assertFalse(profileRow.hasAttribute('actionable')); + assertTrue(profileRow.hasAttribute('actionable')); const subpageArrow = assert(peoplePage.$$('#profile-subpage-arrow')); - assertFalse(subpageArrow.hasAttribute('actionable')); - - // Clicking on profile icon doesn't navigate to a new route. - const oldRoute = settings.getCurrentRoute(); - profileIcon.click(); - assertEquals(oldRoute, settings.getCurrentRoute()); + assertFalse(subpageArrow.hidden); }); test('parental controls page is shown when enabled', () => { @@ -719,6 +714,62 @@ }); }); + suite('Chrome OS with account manager disabled', function() { + let peoplePage = null; + let syncBrowserProxy = null; + let profileInfoBrowserProxy = null; + + suiteSetup(function() { + loadTimeData.overrideValues({ + // Simulate SplitSettings (OS settings in their own surface). + showOSSettings: false, + // Disable ChromeOSAccountManager (Google Accounts support). + isAccountManagerEnabled: false, + }); + }); + + setup(async function() { + syncBrowserProxy = new TestSyncBrowserProxy(); + settings.SyncBrowserProxyImpl.instance_ = syncBrowserProxy; + + profileInfoBrowserProxy = new TestProfileInfoBrowserProxy(); + settings.ProfileInfoBrowserProxyImpl.instance_ = + profileInfoBrowserProxy; + + PolymerTest.clearBody(); + peoplePage = document.createElement('settings-people-page'); + peoplePage.pageVisibility = settings.pageVisibility; + document.body.appendChild(peoplePage); + + await syncBrowserProxy.whenCalled('getSyncStatus'); + Polymer.dom.flush(); + }); + + teardown(function() { + peoplePage.remove(); + }); + + test('profile row is not actionable', () => { + // Simulate a signed-in user. + sync_test_util.simulateSyncStatus({ + signedIn: true, + }); + + // Account manager isn't available, so the row isn't actionable. + const profileIcon = assert(peoplePage.$$('#profile-icon')); + assertFalse(profileIcon.hasAttribute('actionable')); + const profileRow = assert(peoplePage.$$('#profile-row')); + assertFalse(profileRow.hasAttribute('actionable')); + const subpageArrow = assert(peoplePage.$$('#profile-subpage-arrow')); + assertTrue(subpageArrow.hidden); + + // Clicking on profile icon doesn't navigate to a new route. + const oldRoute = settings.getCurrentRoute(); + profileIcon.click(); + assertEquals(oldRoute, settings.getCurrentRoute()); + }); + }); + /** @implements {parental_controls.ParentalControlsBrowserProxy} */ class TestParentalControlsBrowserProxy extends TestBrowserProxy { constructor() {
diff --git a/chrome/test/data/webui/tab_strip/tab_test.js b/chrome/test/data/webui/tab_strip/tab_test.js index c873d63..32df3c0d 100644 --- a/chrome/test/data/webui/tab_strip/tab_test.js +++ b/chrome/test/data/webui/tab_strip/tab_test.js
@@ -104,6 +104,24 @@ getFaviconForPageURL(expectedPageUrl, false)); }); + test('hides the thumbnail if there is no source yet', () => { + const thumbnailImage = tabElement.shadowRoot.querySelector('#thumbnailImg'); + assertFalse(thumbnailImage.hasAttribute('src')); + assertEquals(window.getComputedStyle(thumbnailImage).display, 'none'); + }); + + test('tracks and updates the thumbnail source', async () => { + const requestedTabId = + await testTabsApiProxy.whenCalled('trackThumbnailForTab'); + assertEquals(requestedTabId, tab.id); + + const thumbnailSource = 'data:mock-thumbnail-source'; + tabElement.updateThumbnail(thumbnailSource); + assertEquals( + tabElement.shadowRoot.querySelector('#thumbnailImg').src, + thumbnailSource); + }); + test('setting dragging state toggles an attribute', () => { tabElement.setDragging(true); assertTrue(tabElement.hasAttribute('dragging'));
diff --git a/chrome/test/data/webui/tab_strip/test_tabs_api_proxy.js b/chrome/test/data/webui/tab_strip/test_tabs_api_proxy.js index 7edcbba..15ef265 100644 --- a/chrome/test/data/webui/tab_strip/test_tabs_api_proxy.js +++ b/chrome/test/data/webui/tab_strip/test_tabs_api_proxy.js
@@ -27,6 +27,7 @@ 'closeTab', 'getCurrentWindow', 'moveTab', + 'trackThumbnailForTab', ]); this.callbackRouter = { @@ -63,4 +64,8 @@ setCurrentWindow(currentWindow) { this.currentWindow_ = currentWindow; } + + trackThumbnailForTab(tabId) { + this.methodCalled('trackThumbnailForTab', tabId); + } }
diff --git a/chromeos/components/media_app_ui/BUILD.gn b/chromeos/components/media_app_ui/BUILD.gn new file mode 100644 index 0000000..65a30ed --- /dev/null +++ b/chromeos/components/media_app_ui/BUILD.gn
@@ -0,0 +1,39 @@ +# 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/test/base/js2gtest.gni") + +assert(is_chromeos, "Media App is Chrome OS only") + +static_library("media_app_ui") { + sources = [ + "media_app_guest_ui.cc", + "media_app_guest_ui.h", + "media_app_ui.cc", + "media_app_ui.h", + "url_constants.cc", + "url_constants.h", + ] + + deps = [ + "//chromeos/constants", + "//chromeos/resources", + "//content/public/browser", + "//ui/webui", + ] +} + +js2gtest("browser_tests_js") { + test_type = "mojo_lite_webui" + + sources = [ + "test/media_app_ui_browsertest.js", + ] + + defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] + + deps = [ + "//chromeos/constants", + ] +}
diff --git a/chromeos/components/media_app_ui/DEPS b/chromeos/components/media_app_ui/DEPS new file mode 100644 index 0000000..56b4179 --- /dev/null +++ b/chromeos/components/media_app_ui/DEPS
@@ -0,0 +1,6 @@ +include_rules = [ + # Do not add chrome here (use a delegate instead). + "+chromeos/grit/chromeos_resources.h", + "+content/public/browser", + "+ui/webui", +]
diff --git a/chromeos/components/media_app_ui/OWNERS b/chromeos/components/media_app_ui/OWNERS new file mode 100644 index 0000000..13c6f49f --- /dev/null +++ b/chromeos/components/media_app_ui/OWNERS
@@ -0,0 +1 @@ +tapted@chromium.org
diff --git a/chromeos/components/media_app_ui/README b/chromeos/components/media_app_ui/README new file mode 100644 index 0000000..9c81aae --- /dev/null +++ b/chromeos/components/media_app_ui/README
@@ -0,0 +1,5 @@ +Provides the chrome://media-app WebUI and supporting interfaces that allow the +Media App to integrate with ChromeOS. + +The bulk of the UI is provided by an internal CIPD package via DEPS, which is +then served via the resource bundle. See go/media-app for the internal source.
diff --git a/chromeos/components/media_app_ui/media_app_guest_ui.cc b/chromeos/components/media_app_ui/media_app_guest_ui.cc new file mode 100644 index 0000000..083e6dc --- /dev/null +++ b/chromeos/components/media_app_ui/media_app_guest_ui.cc
@@ -0,0 +1,36 @@ +// 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 "chromeos/components/media_app_ui/media_app_guest_ui.h" + +#include "chromeos/components/media_app_ui/url_constants.h" +#include "chromeos/grit/chromeos_resources.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_data_source.h" + +namespace chromeos { + +// static +content::WebUIDataSource* MediaAppGuestUI::CreateDataSource() { + content::WebUIDataSource* source = + content::WebUIDataSource::Create(kChromeUIMediaAppGuestHost); + source->AddResourcePath("app.html", IDR_MEDIA_APP_APP_HTML); + source->AddResourcePath("js/app_main.js", IDR_MEDIA_APP_APP_JS); + source->AddResourcePath("js/app_image_handler_module.js", + IDR_MEDIA_APP_IMAGE_HANDLER_MODULE_JS); + source->AddResourcePath("js/app_drop_target_module.js", + IDR_MEDIA_APP_DROP_TARGET_MODULE_JS); + return source; +} + +MediaAppGuestUI::MediaAppGuestUI(content::WebUI* web_ui) + : MojoWebUIController(web_ui) { + content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(), + CreateDataSource()); +} + +MediaAppGuestUI::~MediaAppGuestUI() = default; + +} // namespace chromeos
diff --git a/chromeos/components/media_app_ui/media_app_guest_ui.h b/chromeos/components/media_app_ui/media_app_guest_ui.h new file mode 100644 index 0000000..7b90261 --- /dev/null +++ b/chromeos/components/media_app_ui/media_app_guest_ui.h
@@ -0,0 +1,31 @@ +// 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 CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_GUEST_UI_H_ +#define CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_GUEST_UI_H_ + +#include "base/macros.h" +#include "ui/webui/mojo_web_ui_controller.h" + +namespace content { +class WebUIDataSource; +} + +namespace chromeos { + +// The WebUI controller for chrome://media-app-guest. +class MediaAppGuestUI : public ui::MojoWebUIController { + public: + static content::WebUIDataSource* CreateDataSource(); + + explicit MediaAppGuestUI(content::WebUI* web_ui); + ~MediaAppGuestUI() override; + + private: + DISALLOW_COPY_AND_ASSIGN(MediaAppGuestUI); +}; + +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_GUEST_UI_H_
diff --git a/chromeos/components/media_app_ui/media_app_ui.cc b/chromeos/components/media_app_ui/media_app_ui.cc new file mode 100644 index 0000000..18f068b --- /dev/null +++ b/chromeos/components/media_app_ui/media_app_ui.cc
@@ -0,0 +1,53 @@ +// 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 "chromeos/components/media_app_ui/media_app_ui.h" + +#include "chromeos/components/media_app_ui/media_app_guest_ui.h" +#include "chromeos/components/media_app_ui/url_constants.h" +#include "chromeos/grit/chromeos_resources.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_data_source.h" + +namespace chromeos { +namespace { + +content::WebUIDataSource* CreateHostDataSource() { + content::WebUIDataSource* source = + content::WebUIDataSource::Create(kChromeUIMediaAppHost); + source->SetDefaultResource(IDR_MEDIA_APP_INDEX_HTML); + return source; +} + +} // namespace + +MediaAppUI::MediaAppUI(content::WebUI* web_ui) : MojoWebUIController(web_ui) { + content::BrowserContext* browser_context = + web_ui->GetWebContents()->GetBrowserContext(); + content::WebUIDataSource* host_source = CreateHostDataSource(); + content::WebUIDataSource::Add(browser_context, host_source); + + // Whilst the guest is in an <iframe> rather than a <webview>, we need a CSP + // override to use the guest origin in the host. + // TODO(crbug/996088): Remove these overrides when there's a new sandboxing + // option for the guest. + std::string csp = std::string("frame-src ") + kChromeUIMediaAppGuestURL + ";"; + host_source->OverrideContentSecurityPolicyChildSrc(csp); + + // We also add the guest data source here (and allow it to be iframed). If + // it's only added in the MediaAppGuestUI constructor, then a user navigation + // to chrome://media-app-guest is required before the <iframe> can see it. + // This is due to logic in RenderFrameHostManager::GetFrameHostForNavigation() + // that currently skips creating webui objects when !IsMainFrame() (which is + // temporary according to https://crbug.com/713313 but, long-term, the guest + // shouldn't need the webui objects in any case - just the data source). + content::WebUIDataSource* guest_source = MediaAppGuestUI::CreateDataSource(); + guest_source->DisableDenyXFrameOptions(); + content::WebUIDataSource::Add(browser_context, guest_source); +} + +MediaAppUI::~MediaAppUI() = default; + +} // namespace chromeos
diff --git a/chromeos/components/media_app_ui/media_app_ui.gni b/chromeos/components/media_app_ui/media_app_ui.gni new file mode 100644 index 0000000..6ae4db6 --- /dev/null +++ b/chromeos/components/media_app_ui/media_app_ui.gni
@@ -0,0 +1,8 @@ +import("//build/config/chrome_build.gni") + +declare_args() { + # Whether to enable the "real" ChromeOS Media App. When false, a mock app is + # bundled for testing integration points. + # TODO(crbug/996088): Change this to is_chromeos && is_chrome_branded. + enable_cros_media_app = false +}
diff --git a/chromeos/components/media_app_ui/media_app_ui.h b/chromeos/components/media_app_ui/media_app_ui.h new file mode 100644 index 0000000..346547b --- /dev/null +++ b/chromeos/components/media_app_ui/media_app_ui.h
@@ -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. + +#ifndef CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_UI_H_ +#define CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_UI_H_ + +#include "base/macros.h" +#include "ui/webui/mojo_web_ui_controller.h" + +namespace chromeos { + +// The WebUI controller for chrome://media-app. +class MediaAppUI : public ui::MojoWebUIController { + public: + explicit MediaAppUI(content::WebUI* web_ui); + ~MediaAppUI() override; + + private: + DISALLOW_COPY_AND_ASSIGN(MediaAppUI); +}; + +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_UI_H_
diff --git a/chromeos/components/media_app_ui/resources/app.html b/chromeos/components/media_app_ui/resources/app.html new file mode 100644 index 0000000..7207aa88 --- /dev/null +++ b/chromeos/components/media_app_ui/resources/app.html
@@ -0,0 +1,14 @@ +<!-- 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. --> +<!DOCTYPE html> +<style> + body { + overflow: hidden; + margin: 0; + } +</style> +<backlight-app></backlight-app> +<script src="/js/app_main.js"></script> +<!-- TODO(crbug/996088): Include scripts to run in the <webview> sandbox that + communicate via postMessage to scripts running in index.html -->
diff --git a/chromeos/components/media_app_ui/resources/index.html b/chromeos/components/media_app_ui/resources/index.html new file mode 100644 index 0000000..1355c96 --- /dev/null +++ b/chromeos/components/media_app_ui/resources/index.html
@@ -0,0 +1,27 @@ +<!-- 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. --> +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Media App</title> +<style> + body { + height: 100vh; + margin: 0; + overflow: hidden; + } + /* + * This is the <iframe> style set for sandboxed guests that use + * guest_view_iframe_container.js. + * TODO(crbug/996088): Remove the iframe styles if switched to <webview>. + */ + iframe { + border: 0; + height: 100%; + width: 100%; + } +</style> +<script src="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js"></script> +<iframe src="chrome://media-app-guest/app.html"></iframe> +<!-- TODO(crbug/996088): Include scripts running with privileges necessary to + provide functionality to the sandboxed guest. -->
diff --git a/chromeos/components/media_app_ui/resources/mock/js/app_main.js b/chromeos/components/media_app_ui/resources/mock/js/app_main.js new file mode 100644 index 0000000..53aaef0 --- /dev/null +++ b/chromeos/components/media_app_ui/resources/mock/js/app_main.js
@@ -0,0 +1,9 @@ +// 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. + +/** + * @fileoverview + * Provides a mock of http://go/media-app/index.ts which is pre-built and + * brought in via DEPS to ../../app/js/app_main.js. Runs in an isolated guest. + */
diff --git a/chromeos/components/media_app_ui/resources/mock/js/mock_module.js b/chromeos/components/media_app_ui/resources/mock/js/mock_module.js new file mode 100644 index 0000000..24fba1a9e --- /dev/null +++ b/chromeos/components/media_app_ui/resources/mock/js/mock_module.js
@@ -0,0 +1,9 @@ +// 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. + +/** + * @fileoverview + * An empty script used when mocking that provides no functionality, but avoids + * a 404 error. + */
diff --git a/chromeos/components/media_app_ui/test/DEPS b/chromeos/components/media_app_ui/test/DEPS new file mode 100644 index 0000000..ac5677f9 --- /dev/null +++ b/chromeos/components/media_app_ui/test/DEPS
@@ -0,0 +1,4 @@ +include_rules = [ + # Tests run in browser_tests, so can access things under chrome/test/base*. + "+chrome/test/base", +]
diff --git a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js new file mode 100644 index 0000000..b4f93bd --- /dev/null +++ b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js
@@ -0,0 +1,48 @@ +// 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. + +/** + * @fileoverview Test suite for chrome://media-app. + */ + +GEN('#include "chromeos/constants/chromeos_features.h"'); + +const HOST_ORIGIN = 'chrome://media-app'; +const GUEST_SRC = 'chrome://media-app-guest/app.html'; + +var MediaAppUIBrowserTest = class extends testing.Test { + /** @override */ + get browsePreload() { + return HOST_ORIGIN; + } + + /** @override */ + get featureList() { + return {enabled: ['chromeos::features::kMediaApp']}; + } + + /** @override */ + get runAccessibilityChecks() { + return false; + } +}; + +// Tests that chrome://media-app is allowed to frame chrome://media-app-guest. +// The URL is set in the html. If that URL can't load, test this fails like JS +// ERROR: "Refused to frame '...' because it violates the following Content +// Security Policy directive: "frame-src chrome://media-app-guest/". +// This test also fails if the guest renderer is terminated, e.g., due to webui +// performing bad IPC such as network requests (failure detected in +// content/public/test/no_renderer_crashes_assertion.cc). +TEST_F('MediaAppUIBrowserTest', 'GuestCanLoad', () => { + const guest = document.querySelector('iframe'); + + assertEquals(document.location.origin, HOST_ORIGIN); + assertEquals(guest.src, GUEST_SRC); +}); + +// TODO(crbug/996088): Add Tests that inspect the guest itself. Until the guest +// listens for postMessage calls, we can't test for anything interesting due to +// CORS (i.e. "Blocked a frame with origin chrome://media-app from accessing a +// cross-origin frame.").
diff --git a/chromeos/components/media_app_ui/url_constants.cc b/chromeos/components/media_app_ui/url_constants.cc new file mode 100644 index 0000000..de3e55da --- /dev/null +++ b/chromeos/components/media_app_ui/url_constants.cc
@@ -0,0 +1,14 @@ +// 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 "chromeos/components/media_app_ui/url_constants.h" + +namespace chromeos { + +const char kChromeUIMediaAppHost[] = "media-app"; +const char kChromeUIMediaAppURL[] = "chrome://media-app/"; +const char kChromeUIMediaAppGuestHost[] = "media-app-guest"; +const char kChromeUIMediaAppGuestURL[] = "chrome://media-app-guest/"; + +} // namespace chromeos
diff --git a/chromeos/components/media_app_ui/url_constants.h b/chromeos/components/media_app_ui/url_constants.h new file mode 100644 index 0000000..60dd1c8a --- /dev/null +++ b/chromeos/components/media_app_ui/url_constants.h
@@ -0,0 +1,17 @@ +// 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 CHROMEOS_COMPONENTS_MEDIA_APP_UI_URL_CONSTANTS_H_ +#define CHROMEOS_COMPONENTS_MEDIA_APP_UI_URL_CONSTANTS_H_ + +namespace chromeos { + +extern const char kChromeUIMediaAppHost[]; +extern const char kChromeUIMediaAppURL[]; +extern const char kChromeUIMediaAppGuestHost[]; +extern const char kChromeUIMediaAppGuestURL[]; + +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_MEDIA_APP_UI_URL_CONSTANTS_H_
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc index 354df02..0388894 100644 --- a/chromeos/constants/chromeos_features.cc +++ b/chromeos/constants/chromeos_features.cc
@@ -146,6 +146,9 @@ const base::Feature kInstantTethering{"InstantTethering", base::FEATURE_DISABLED_BY_DEFAULT}; +// ChromeOS Media App. https://crbug.com/996088. +const base::Feature kMediaApp{"MediaApp", base::FEATURE_DISABLED_BY_DEFAULT}; + // Controls whether to enable the Parental Controls section of settings. const base::Feature kParentalControlsSettings{ "ChromeOSParentalControlsSettings", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h index b7797551..2f3a61c 100644 --- a/chromeos/constants/chromeos_features.h +++ b/chromeos/constants/chromeos_features.h
@@ -70,6 +70,7 @@ extern const base::Feature kImeDecoderWithSandbox; COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kInstantTethering; +COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kMediaApp; COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kParentalControlsSettings; COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
diff --git a/chromeos/resources/BUILD.gn b/chromeos/resources/BUILD.gn index 5a70eda..4dff9811 100644 --- a/chromeos/resources/BUILD.gn +++ b/chromeos/resources/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//chromeos/assistant/assistant.gni") +import("//chromeos/components/media_app_ui/media_app_ui.gni") import("//tools/grit/grit_rule.gni") assert(is_chromeos, "Non-ChromeOS builds cannot depend on //chromeos") @@ -20,7 +21,10 @@ ] output_dir = "$root_gen_dir/chromeos" - defines = [ "enable_cros_libassistant=$enable_cros_libassistant" ] + defines = [ + "enable_cros_libassistant=$enable_cros_libassistant", + "enable_cros_media_app=$enable_cros_media_app", + ] grit_flags = [ "-E",
diff --git a/chromeos/resources/chromeos_resources.grd b/chromeos/resources/chromeos_resources.grd index 9d6dfbb..55e5628 100644 --- a/chromeos/resources/chromeos_resources.grd +++ b/chromeos/resources/chromeos_resources.grd
@@ -18,6 +18,7 @@ <if expr="enable_cros_libassistant"> <part file="assistant_resources.grdp" /> </if> + <part file="media_app_resources.grdp" /> </includes> </release> </grit>
diff --git a/chromeos/resources/media_app_resources.grdp b/chromeos/resources/media_app_resources.grdp new file mode 100644 index 0000000..e912f82 --- /dev/null +++ b/chromeos/resources/media_app_resources.grdp
@@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<grit-part> + <include name="IDR_MEDIA_APP_INDEX_HTML" + file="../components/media_app_ui/resources/index.html" + type="BINDATA" /> + <include name="IDR_MEDIA_APP_APP_HTML" + file="../components/media_app_ui/resources/app.html" + type="BINDATA" /> + <if expr="enable_cros_media_app"> + <then> + <include name="IDR_MEDIA_APP_APP_JS" + file="../components/media_app_ui/resources/app/js/app_main.js" + type="BINDATA" /> + <include name="IDR_MEDIA_APP_IMAGE_HANDLER_MODULE_JS" + file="../components/media_app_ui/resources/app/js/app_image_handler_module.js" + type="BINDATA" /> + <include name="IDR_MEDIA_APP_DROP_TARGET_MODULE_JS" + file="../components/media_app_ui/resources/app/js/app_drop_target_module.js" + type="BINDATA" /> + </then> + <else> + <include name="IDR_MEDIA_APP_APP_JS" + file="../components/media_app_ui/resources/mock/js/app_main.js" + type="BINDATA" /> + <include name="IDR_MEDIA_APP_IMAGE_HANDLER_MODULE_JS" + file="../components/media_app_ui/resources/mock/js/mock_module.js" + type="BINDATA" /> + <include name="IDR_MEDIA_APP_DROP_TARGET_MODULE_JS" + file="../components/media_app_ui/resources/mock/js/mock_module.js" + type="BINDATA" /> + </else> + </if> +</grit-part>
diff --git a/chromeos/services/assistant/BUILD.gn b/chromeos/services/assistant/BUILD.gn index b70ae79..511fcee 100644 --- a/chromeos/services/assistant/BUILD.gn +++ b/chromeos/services/assistant/BUILD.gn
@@ -18,6 +18,7 @@ defines = [ "IS_ASSISTANT_SERVICE_IMPL" ] sources = [ + "assistant_communication_error_observer.h", "assistant_manager_service.h", "assistant_settings_manager.h", "assistant_state_proxy.cc", @@ -32,6 +33,7 @@ "pref_connection_delegate.h", "service.cc", "service.h", + "service_context.h", ] deps = [
diff --git a/chromeos/services/assistant/assistant_communication_error_observer.h b/chromeos/services/assistant/assistant_communication_error_observer.h new file mode 100644 index 0000000..89c883d --- /dev/null +++ b/chromeos/services/assistant/assistant_communication_error_observer.h
@@ -0,0 +1,36 @@ +// 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 CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_COMMUNICATION_ERROR_OBSERVER_H_ +#define CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_COMMUNICATION_ERROR_OBSERVER_H_ + +#include "base/macros.h" +#include "base/observer_list_types.h" + +namespace chromeos { +namespace assistant { + +enum class CommunicationErrorType { + AuthenticationError, + Other, +}; + +// A checked observer that observes communication errors when communicating with +// the Assistant backend. +class AssistantCommunicationErrorObserver : public base::CheckedObserver { + public: + AssistantCommunicationErrorObserver() = default; + + virtual void OnCommunicationError(CommunicationErrorType error) = 0; + + protected: + ~AssistantCommunicationErrorObserver() override = default; + + private: + DISALLOW_COPY_AND_ASSIGN(AssistantCommunicationErrorObserver); +}; +} // namespace assistant +} // namespace chromeos + +#endif // CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_COMMUNICATION_ERROR_OBSERVER_H_
diff --git a/chromeos/services/assistant/assistant_manager_service.h b/chromeos/services/assistant/assistant_manager_service.h index 434e802a..d108474 100644 --- a/chromeos/services/assistant/assistant_manager_service.h +++ b/chromeos/services/assistant/assistant_manager_service.h
@@ -17,6 +17,7 @@ namespace chromeos { namespace assistant { +class AssistantCommunicationErrorObserver; // Interface class that defines all assistant functionalities. class COMPONENT_EXPORT(ASSISTANT_SERVICE) AssistantManagerService @@ -60,6 +61,13 @@ // Returns a pointer of AssistantSettingsManager. virtual AssistantSettingsManager* GetAssistantSettingsManager() = 0; + + // Add/Remove an observer that is invoked when there is a communucation error + // with the Assistant service. + virtual void AddCommunicationErrorObserver( + AssistantCommunicationErrorObserver* observer) = 0; + virtual void RemoveCommunicationErrorObserver( + AssistantCommunicationErrorObserver* observer) = 0; }; } // namespace assistant
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.cc b/chromeos/services/assistant/assistant_manager_service_impl.cc index 4c0ae1f..6e33f4bc 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl.cc +++ b/chromeos/services/assistant/assistant_manager_service_impl.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include <utility> +#include "ash/public/cpp/assistant/assistant_state_base.h" #include "base/barrier_closure.h" #include "base/bind.h" #include "base/feature_list.h" @@ -22,10 +23,11 @@ #include "chromeos/assistant/internal/proto/google3/assistant/api/client_input/warmer_welcome_input.pb.h" #include "chromeos/assistant/internal/proto/google3/assistant/api/client_op/device_args.pb.h" #include "chromeos/dbus/util/version_loader.h" +#include "chromeos/services/assistant/assistant_communication_error_observer.h" #include "chromeos/services/assistant/constants.h" #include "chromeos/services/assistant/media_session/assistant_media_session.h" #include "chromeos/services/assistant/public/features.h" -#include "chromeos/services/assistant/service.h" +#include "chromeos/services/assistant/service_context.h" #include "chromeos/services/assistant/utils.h" #include "chromeos/strings/grit/chromeos_strings.h" #include "libassistant/shared/internal_api/alarm_timer_manager.h" @@ -41,8 +43,8 @@ // A macro which ensures we are running on the main thread. #define ENSURE_MAIN_THREAD(method, ...) \ - if (!service_->main_task_runner()->RunsTasksInCurrentSequence()) { \ - service_->main_task_runner()->PostTask( \ + if (!main_task_runner()->RunsTasksInCurrentSequence()) { \ + main_task_runner()->PostTask( \ FROM_HERE, \ base::BindOnce(method, weak_factory_.GetWeakPtr(), ##__VA_ARGS__)); \ return; \ @@ -123,14 +125,22 @@ } } +CommunicationErrorType CommunicationErrorTypeFromLibassistantErrorCode( + int error_code) { + if (IsAuthError(error_code)) + return CommunicationErrorType::AuthenticationError; + return CommunicationErrorType::Other; +} + } // namespace AssistantManagerServiceImpl::AssistantManagerServiceImpl( mojom::Client* client, mojo::PendingRemote<device::mojom::BatteryMonitor> battery_monitor, - Service* service, + ServiceContext* context, std::unique_ptr<network::SharedURLLoaderFactoryInfo> - url_loader_factory_info) + url_loader_factory_info, + bool is_signed_out_mode) : client_(client), media_session_(std::make_unique<AssistantMediaSession>(client_, this)), action_module_(std::make_unique<action::CrosActionModule>( @@ -139,16 +149,18 @@ assistant::features::IsRoutinesEnabled())), chromium_api_delegate_(std::move(url_loader_factory_info)), assistant_settings_manager_( - std::make_unique<AssistantSettingsManagerImpl>(service, this)), - service_(service), + std::make_unique<AssistantSettingsManagerImpl>(context, this)), + context_(context), background_thread_("background thread"), + is_signed_out_mode_(is_signed_out_mode), app_list_subscriber_binding_(this), weak_factory_(this) { background_thread_.Start(); platform_api_ = std::make_unique<PlatformApiImpl>( - client_, media_session_.get(), std::move(battery_monitor), - service_->main_task_runner(), background_thread_.task_runner(), - service->assistant_state()->locale().value()); + client_, media_session_.get(), context_->power_manager_client(), + context_->cras_audio_handler(), std::move(battery_monitor), + main_task_runner(), background_thread_.task_runner(), + assistant_state()->locale().value()); mojo::Remote<media_session::mojom::MediaControllerManager> media_controller_manager; @@ -195,10 +207,8 @@ start_finished_ = false; // When user disables the feature, we also deletes all data. - if (!service_->assistant_state()->settings_enabled().value() && - assistant_manager_) { + if (!assistant_state()->settings_enabled().value() && assistant_manager_) assistant_manager_->ResetAllDataAndShutdown(); - } media_controller_observer_receiver_.reset(); @@ -287,7 +297,7 @@ assistant_manager_internal_->GetAlarmTimerManager(); alarm_timer_manager->RegisterRingingStateListener([this]() { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnAlarmTimerStateChangedOnMainThread, @@ -297,7 +307,6 @@ void AssistantManagerServiceImpl::EnableListening(bool enable) { assistant_manager_->EnableListening(enable); - EnableHotword(enable && service_->ShouldEnableHotword()); } void AssistantManagerServiceImpl::EnableHotword(bool enable) { @@ -321,6 +330,16 @@ return assistant_settings_manager_.get(); } +void AssistantManagerServiceImpl::AddCommunicationErrorObserver( + AssistantCommunicationErrorObserver* observer) { + error_observers_.AddObserver(observer); +} + +void AssistantManagerServiceImpl::RemoveCommunicationErrorObserver( + AssistantCommunicationErrorObserver* observer) { + error_observers_.RemoveObserver(observer); +} + void AssistantManagerServiceImpl::StartVoiceInteraction() { platform_api_->SetMicState(true); assistant_manager_->StartAssistantInteraction(); @@ -360,7 +379,7 @@ // TODO(eyor): Add a method that can be called to clear the cached interaction // when the UI is hidden/closed. void AssistantManagerServiceImpl::StartCachedScreenContextInteraction() { - if (!IsScreenContextAllowed(service_->assistant_state())) + if (!IsScreenContextAllowed(assistant_state())) return; // It is illegal to call this method without having first cached screen @@ -385,10 +404,10 @@ void AssistantManagerServiceImpl::StartMetalayerInteraction( const gfx::Rect& region) { - if (!IsScreenContextAllowed(service_->assistant_state())) + if (!IsScreenContextAllowed(assistant_state())) return; - service_->assistant_screen_context_controller()->RequestScreenshot( + assistant_screen_context_controller()->RequestScreenshot( region, base::BindOnce(&AssistantManagerServiceImpl::SendScreenContextRequest, weak_factory_.GetWeakPtr(), /*assistant_extra=*/nullptr, @@ -476,7 +495,7 @@ void AssistantManagerServiceImpl::OnConversationTurnStartedInternal( const assistant_client::ConversationTurnMetadata& metadata) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnConversationTurnStartedOnMainThread, @@ -485,7 +504,7 @@ void AssistantManagerServiceImpl::OnConversationTurnFinished( Resolution resolution) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnConversationTurnFinishedOnMainThread, @@ -497,7 +516,7 @@ // Schedule a wait for |time_ms|, notifying the CrosActionModule when the wait // has finished so that it can inform LibAssistant to resume execution. - service_->main_task_runner()->PostDelayedTask( + main_task_runner()->PostDelayedTask( FROM_HERE, base::BindOnce( [](const base::WeakPtr<AssistantManagerServiceImpl>& weak_ptr, @@ -518,7 +537,7 @@ // TODO(b/113541754): Deprecate this API when the server provides a fallback. void AssistantManagerServiceImpl::OnShowContextualQueryFallback() { // Show fallback text. - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce(&AssistantManagerServiceImpl::OnShowTextOnMainThread, weak_factory_.GetWeakPtr(), @@ -554,7 +573,7 @@ << "</div></body></html>"; // Show fallback card. - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce(&AssistantManagerServiceImpl::OnShowHtmlOnMainThread, weak_factory_.GetWeakPtr(), html.str(), /*fallback=*/"")); @@ -562,7 +581,7 @@ void AssistantManagerServiceImpl::OnShowHtml(const std::string& html, const std::string& fallback) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce(&AssistantManagerServiceImpl::OnShowHtmlOnMainThread, weak_factory_.GetWeakPtr(), html, fallback)); @@ -580,7 +599,7 @@ ptrs.push_back(std::move(ptr)); } - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnShowSuggestionsOnMainThread, @@ -588,7 +607,7 @@ } void AssistantManagerServiceImpl::OnShowText(const std::string& text) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce(&AssistantManagerServiceImpl::OnShowTextOnMainThread, weak_factory_.GetWeakPtr(), text)); @@ -596,7 +615,7 @@ void AssistantManagerServiceImpl::OnOpenUrl(const std::string& url, bool is_background) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce(&AssistantManagerServiceImpl::OnOpenUrlOnMainThread, weak_factory_.GetWeakPtr(), url, is_background)); @@ -632,7 +651,7 @@ button.label, GURL(button.action_url))); } - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnShowNotificationOnMainThread, @@ -646,7 +665,7 @@ interaction); mojom::AndroidAppInfoPtr app_info_ptr = mojom::AndroidAppInfo::New(); app_info_ptr->package_name = app_info.package_name; - service_->device_actions()->OpenAndroidApp( + device_actions()->OpenAndroidApp( std::move(app_info_ptr), base::BindOnce(&AssistantManagerServiceImpl::HandleOpenAndroidAppResponse, weak_factory_.GetWeakPtr(), interaction)); @@ -663,7 +682,7 @@ app_info_ptr->package_name = app_info.package_name; apps_info_list.push_back(std::move(app_info_ptr)); } - service_->device_actions()->VerifyAndroidApp( + device_actions()->VerifyAndroidApp( std::move(apps_info_list), base::BindOnce( &AssistantManagerServiceImpl::HandleVerifyAndroidAppResponse, @@ -685,7 +704,7 @@ app_info_ptr->intent = url; } } - service_->device_actions()->OpenAndroidApp( + device_actions()->OpenAndroidApp( std::move(app_info_ptr), base::BindOnce( &AssistantManagerServiceImpl::HandleLaunchMediaIntentResponse, @@ -747,7 +766,7 @@ assistant_client::ConversationStateListener::RecognitionState state, const assistant_client::ConversationStateListener::RecognitionResult& recognition_result) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnRecognitionStateChangedOnMainThread, @@ -755,7 +774,7 @@ } void AssistantManagerServiceImpl::OnRespondingStarted(bool is_error_response) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnRespondingStartedOnMainThread, @@ -764,7 +783,7 @@ void AssistantManagerServiceImpl::OnSpeechLevelUpdated( const float speech_level) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnSpeechLevelUpdatedOnMainThread, @@ -880,13 +899,13 @@ if (modify_setting_args.setting_id() == kWiFiDeviceSettingId) { HandleOnOffChange(modify_setting_args, [&](bool enabled) { - this->service_->device_actions()->SetWifiEnabled(enabled); + this->device_actions()->SetWifiEnabled(enabled); }); } if (modify_setting_args.setting_id() == kBluetoothDeviceSettingId) { HandleOnOffChange(modify_setting_args, [&](bool enabled) { - this->service_->device_actions()->SetBluetoothEnabled(enabled); + this->device_actions()->SetBluetoothEnabled(enabled); }); } @@ -901,7 +920,7 @@ } if (modify_setting_args.setting_id() == kScreenBrightnessDeviceSettingId) { - this->service_->device_actions()->GetScreenBrightnessLevel(base::BindOnce( + this->device_actions()->GetScreenBrightnessLevel(base::BindOnce( [](base::WeakPtr<chromeos::assistant::AssistantManagerServiceImpl> this_, api::client_op::ModifySettingArgs modify_setting_args, bool success, @@ -912,8 +931,8 @@ HandleSliderChange( modify_setting_args, [&](double new_value) { - this_->service_->device_actions()->SetScreenBrightnessLevel( - new_value, true); + this_->device_actions()->SetScreenBrightnessLevel(new_value, + true); }, [&]() { return current_value; }); }, @@ -922,14 +941,13 @@ if (modify_setting_args.setting_id() == kDoNotDisturbDeviceSettingId) { HandleOnOffChange(modify_setting_args, [&](bool enabled) { - this->service_->assistant_notification_controller()->SetQuietMode( - enabled); + this->assistant_notification_controller()->SetQuietMode(enabled); }); } if (modify_setting_args.setting_id() == kNightLightDeviceSettingId) { HandleOnOffChange(modify_setting_args, [&](bool enabled) { - this->service_->device_actions()->SetNightLightEnabled(enabled); + this->device_actions()->SetNightLightEnabled(enabled); }); } } @@ -937,7 +955,7 @@ ActionModule::Result AssistantManagerServiceImpl::HandleModifySettingClientOp( const std::string& modify_setting_args_proto) { DVLOG(2) << "HandleModifySettingClientOp=" << modify_setting_args_proto; - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce(&AssistantManagerServiceImpl::OnModifySettingsAction, weak_factory_.GetWeakPtr(), modify_setting_args_proto)); @@ -961,7 +979,7 @@ void AssistantManagerServiceImpl::OnNotificationRemoved( const std::string& grouping_key) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnNotificationRemovedOnMainThread, @@ -969,7 +987,7 @@ } void AssistantManagerServiceImpl::OnCommunicationError(int error_code) { - service_->main_task_runner()->PostTask( + main_task_runner()->PostTask( FROM_HERE, base::BindOnce( &AssistantManagerServiceImpl::OnCommunicationErrorOnMainThread, @@ -1006,7 +1024,7 @@ if (server_experiment_ids.size() > 0) assistant_manager_internal->AddExtraExperimentIds(server_experiment_ids); - if (!service_->is_signed_out_mode()) { + if (!is_signed_out_mode_) { new_assistant_manager_->SetAuthTokens( {std::pair<std::string, std::string>(kUserID, access_token.value())}); } @@ -1015,7 +1033,7 @@ void AssistantManagerServiceImpl::PostInitAssistant( base::OnceClosure post_init_callback) { - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); DCHECK_EQ(state_, State::STARTED); { @@ -1048,8 +1066,7 @@ if (base::FeatureList::IsEnabled(assistant::features::kAssistantAppSupport)) { mojom::AppListEventSubscriberPtr subscriber_ptr; app_list_subscriber_binding_.Bind(mojo::MakeRequest(&subscriber_ptr)); - service_->device_actions()->AddAppListEventSubscriber( - std::move(subscriber_ptr)); + device_actions()->AddAppListEventSubscriber(std::move(subscriber_ptr)); } } @@ -1113,7 +1130,7 @@ if (is_first_init) { is_first_init = false; // Only sync status at the first init to prevent unexpected corner cases. - if (service_->assistant_state()->hotword_enabled().value()) + if (assistant_state()->hotword_enabled().value()) assistant_settings_manager_->SyncSpeakerIdEnrollmentStatus(); } @@ -1124,10 +1141,8 @@ if (media_manager) media_manager->AddListener(this); - if (service_->assistant_state()->arc_play_store_enabled().has_value()) { - SetArcPlayStoreEnabled( - service_->assistant_state()->arc_play_store_enabled().value()); - } + if (assistant_state()->arc_play_store_enabled().has_value()) + SetArcPlayStoreEnabled(assistant_state()->arc_play_store_enabled().value()); if (assistant::features::IsAlarmTimerManagerEnabled()) { RegisterAlarmsTimersListener(); @@ -1139,8 +1154,8 @@ return; ENSURE_MAIN_THREAD(&AssistantManagerServiceImpl::OnTimerSoundingStarted); - if (service_->assistant_alarm_timer_controller()) - service_->assistant_alarm_timer_controller()->OnTimerSoundingStarted(); + if (assistant_alarm_timer_controller()) + assistant_alarm_timer_controller()->OnTimerSoundingStarted(); } void AssistantManagerServiceImpl::OnTimerSoundingFinished() { @@ -1148,8 +1163,8 @@ return; ENSURE_MAIN_THREAD(&AssistantManagerServiceImpl::OnTimerSoundingFinished); - if (service_->assistant_alarm_timer_controller()) - service_->assistant_alarm_timer_controller()->OnTimerSoundingFinished(); + if (assistant_alarm_timer_controller()) + assistant_alarm_timer_controller()->OnTimerSoundingFinished(); } void AssistantManagerServiceImpl::OnAndroidAppListRefreshed( @@ -1168,14 +1183,13 @@ // Build internal options auto* internal_options = assistant_manager_internal->CreateDefaultInternalOptions(); - SetAssistantOptions(internal_options, - service_->assistant_state()->locale().value(), + SetAssistantOptions(internal_options, assistant_state()->locale().value(), spoken_feedback_enabled_); internal_options->SetClientControlEnabled( assistant::features::IsRoutinesEnabled()); - if (service_->is_signed_out_mode()) { + if (is_signed_out_mode_) { internal_options->SetUserCredentialMode( assistant_client::InternalOptions::UserCredentialMode::SIGNED_OUT); } @@ -1334,26 +1348,29 @@ void AssistantManagerServiceImpl::OnShowNotificationOnMainThread( const mojom::AssistantNotificationPtr& notification) { - service_->assistant_notification_controller()->AddOrUpdateNotification( + assistant_notification_controller()->AddOrUpdateNotification( notification.Clone()); } void AssistantManagerServiceImpl::OnNotificationRemovedOnMainThread( const std::string& grouping_key) { if (grouping_key.empty()) { - service_->assistant_notification_controller()->RemoveAllNotifications( + assistant_notification_controller()->RemoveAllNotifications( /*from_server=*/true); } else { - service_->assistant_notification_controller() - ->RemoveNotificationByGroupingKey(grouping_key, /*from_server=*/ - true); + assistant_notification_controller()->RemoveNotificationByGroupingKey( + grouping_key, /*from_server=*/ + true); } } void AssistantManagerServiceImpl::OnCommunicationErrorOnMainThread( int error_code) { - if (IsAuthError(error_code)) - service_->RequestAccessToken(); + CommunicationErrorType type = + CommunicationErrorTypeFromLibassistantErrorCode(error_code); + + for (auto& observer : error_observers_) + observer.OnCommunicationError(type); } void AssistantManagerServiceImpl::OnRecognitionStateChangedOnMainThread( @@ -1412,8 +1429,7 @@ switch (ringing_event.type) { case assistant_client::AlarmTimerEvent::NONE: - service_->assistant_alarm_timer_controller()->OnAlarmTimerStateChanged( - nullptr); + assistant_alarm_timer_controller()->OnAlarmTimerStateChanged(nullptr); break; case assistant_client::AlarmTimerEvent::TIMER: { ash::mojom::AssistantAlarmTimerEventPtr alarm_timer_event_ptr = @@ -1430,7 +1446,7 @@ alarm_timer_event_ptr->data->set_timer_data(std::move(timer_data_ptr)); } - service_->assistant_alarm_timer_controller()->OnAlarmTimerStateChanged( + assistant_alarm_timer_controller()->OnAlarmTimerStateChanged( std::move(alarm_timer_event_ptr)); break; } @@ -1443,7 +1459,7 @@ void AssistantManagerServiceImpl::CacheScreenContext( CacheScreenContextCallback callback) { - if (!IsScreenContextAllowed(service_->assistant_state())) { + if (!IsScreenContextAllowed(assistant_state())) { std::move(callback).Run(); return; } @@ -1452,11 +1468,11 @@ // data have been cached from their respective providers. auto on_done = base::BarrierClosure(2, std::move(callback)); - service_->client()->RequestAssistantStructure( + client_->RequestAssistantStructure( base::BindOnce(&AssistantManagerServiceImpl::CacheAssistantStructure, weak_factory_.GetWeakPtr(), on_done)); - service_->assistant_screen_context_controller()->RequestScreenshot( + assistant_screen_context_controller()->RequestScreenshot( gfx::Rect(), base::BindOnce(&AssistantManagerServiceImpl::CacheAssistantScreenshot, weak_factory_.GetWeakPtr(), on_done)); @@ -1661,5 +1677,33 @@ media_manager->SetExternalPlaybackState(media_status); } +ash::mojom::AssistantAlarmTimerController* +AssistantManagerServiceImpl::assistant_alarm_timer_controller() { + return context_->assistant_alarm_timer_controller(); +} + +ash::mojom::AssistantNotificationController* +AssistantManagerServiceImpl::assistant_notification_controller() { + return context_->assistant_notification_controller(); +} + +ash::mojom::AssistantScreenContextController* +AssistantManagerServiceImpl::assistant_screen_context_controller() { + return context_->assistant_screen_context_controller(); +} + +ash::AssistantStateBase* AssistantManagerServiceImpl::assistant_state() { + return context_->assistant_state(); +} + +mojom::DeviceActions* AssistantManagerServiceImpl::device_actions() { + return context_->device_actions(); +} + +scoped_refptr<base::SequencedTaskRunner> +AssistantManagerServiceImpl::main_task_runner() { + return context_->main_task_runner(); +} + } // namespace assistant } // namespace chromeos
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.h b/chromeos/services/assistant/assistant_manager_service_impl.h index 50f18ce..e57fa18 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl.h +++ b/chromeos/services/assistant/assistant_manager_service_impl.h
@@ -16,6 +16,7 @@ #include "chromeos/assistant/internal/action/cros_action_module.h" #include "chromeos/assistant/internal/cros_display_connection.h" #include "chromeos/assistant/internal/internal_util.h" +#include "chromeos/services/assistant/assistant_communication_error_observer.h" #include "chromeos/services/assistant/assistant_manager_service.h" #include "chromeos/services/assistant/assistant_settings_manager_impl.h" #include "chromeos/services/assistant/chromium_api_delegate.h" @@ -35,6 +36,10 @@ #include "ui/accessibility/ax_assistant_structure.h" #include "ui/accessibility/mojom/ax_assistant_structure.mojom.h" +namespace ash { +class AssistantStateBase; +} // namespace ash + namespace assistant_client { class AssistantManager; class AssistantManagerInternal; @@ -47,8 +52,8 @@ namespace chromeos { namespace assistant { -class Service; class AssistantMediaSession; +class ServiceContext; // Enumeration of Assistant query response type, also recorded in histograms. // These values are persisted to logs. Entries should not be renumbered and @@ -93,9 +98,10 @@ AssistantManagerServiceImpl( mojom::Client* client, mojo::PendingRemote<device::mojom::BatteryMonitor> battery_monitor, - Service* service, + ServiceContext* context, std::unique_ptr<network::SharedURLLoaderFactoryInfo> - url_loader_factory_info); + url_loader_factory_info, + bool is_signed_out_mode); ~AssistantManagerServiceImpl() override; @@ -110,6 +116,10 @@ void EnableHotword(bool enable) override; void SetArcPlayStoreEnabled(bool enable) override; AssistantSettingsManager* GetAssistantSettingsManager() override; + void AddCommunicationErrorObserver( + AssistantCommunicationErrorObserver* observer) override; + void RemoveCommunicationErrorObserver( + AssistantCommunicationErrorObserver* observer) override; // mojom::Assistant overrides: void StartCachedScreenContextInteraction() override; @@ -290,6 +300,15 @@ void UpdateMediaState(); + ash::mojom::AssistantAlarmTimerController* assistant_alarm_timer_controller(); + ash::mojom::AssistantNotificationController* + assistant_notification_controller(); + ash::mojom::AssistantScreenContextController* + assistant_screen_context_controller(); + ash::AssistantStateBase* assistant_state(); + mojom::DeviceActions* device_actions(); + scoped_refptr<base::SequencedTaskRunner> main_task_runner(); + mojom::Client* const client_; State state_ = State::STOPPED; std::unique_ptr<AssistantMediaSession> media_session_; @@ -312,7 +331,8 @@ interaction_subscribers_; media_session::mojom::MediaControllerPtr media_controller_; - Service* service_; // unowned. + // Owned by the parent |Service| which will destroy |this| before |context_|. + ServiceContext* const context_; bool spoken_feedback_enabled_ = false; @@ -334,6 +354,7 @@ std::string receive_url_response_; bool is_first_client_discourse_context_query_ = true; + bool is_signed_out_mode_; mojo::Receiver<media_session::mojom::MediaControllerObserver> media_controller_observer_receiver_{this}; @@ -351,6 +372,8 @@ mojo::Binding<mojom::AppListEventSubscriber> app_list_subscriber_binding_; + base::ObserverList<AssistantCommunicationErrorObserver> error_observers_; + base::WeakPtrFactory<AssistantManagerServiceImpl> weak_factory_; DISALLOW_COPY_AND_ASSIGN(AssistantManagerServiceImpl);
diff --git a/chromeos/services/assistant/assistant_settings_manager_impl.cc b/chromeos/services/assistant/assistant_settings_manager_impl.cc index 34489cc3..3d1a4a82 100644 --- a/chromeos/services/assistant/assistant_settings_manager_impl.cc +++ b/chromeos/services/assistant/assistant_settings_manager_impl.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "ash/public/cpp/assistant/assistant_state_base.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "chromeos/dbus/util/version_loader.h" @@ -14,7 +15,7 @@ #include "chromeos/services/assistant/public/features.h" #include "chromeos/services/assistant/public/proto/assistant_device_settings_ui.pb.h" #include "chromeos/services/assistant/public/proto/settings_ui.pb.h" -#include "chromeos/services/assistant/service.h" +#include "chromeos/services/assistant/service_context.h" #include "libassistant/shared/internal_api/assistant_manager_internal.h" using SpeakerIdEnrollmentState = @@ -24,9 +25,9 @@ namespace assistant { AssistantSettingsManagerImpl::AssistantSettingsManagerImpl( - Service* service, + ServiceContext* context, AssistantManagerServiceImpl* assistant_manager_service) - : service_(service), + : context_(context), assistant_manager_service_(assistant_manager_service), weak_factory_(this) {} @@ -41,7 +42,7 @@ GetSettingsCallback callback) { DCHECK(assistant_manager_service_->GetState() == AssistantManagerService::State::RUNNING); - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); // TODO(xiaohuic): libassistant could be restarting for various reasons. In // this case the remote side may not know or care and continues to send @@ -60,7 +61,7 @@ serialized_proto, std::string(), [repeating_callback = base::AdaptCallbackForRepeating(std::move(callback)), - task_runner = service_->main_task_runner()]( + task_runner = main_task_runner()]( const assistant_client::VoicelessResponse& response) { // This callback may be called from server multiple times. We should // only process non-empty response. @@ -80,7 +81,7 @@ GetSettingsCallback callback) { DCHECK(assistant_manager_service_->GetState() == AssistantManagerService::State::RUNNING); - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); if (!assistant_manager_service_->assistant_manager_internal()) { std::move(callback).Run(std::string()); @@ -95,7 +96,7 @@ serialized_proto, std::string(), [repeating_callback = base::AdaptCallbackForRepeating(std::move(callback)), - task_runner = service_->main_task_runner()]( + task_runner = main_task_runner()]( const assistant_client::VoicelessResponse& response) { // This callback may be called from server multiple times. We should // only process non-empty response. @@ -115,7 +116,7 @@ mojom::SpeakerIdEnrollmentClientPtr client) { DCHECK(assistant_manager_service_->GetState() == AssistantManagerService::State::RUNNING); - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); if (!assistant_manager_service_->assistant_manager_internal()) return; @@ -130,7 +131,7 @@ ->StartSpeakerIdEnrollment( client_config, [weak_ptr = weak_factory_.GetWeakPtr(), - task_runner = service_->main_task_runner()]( + task_runner = main_task_runner()]( const assistant_client::SpeakerIdEnrollmentUpdate& update) { task_runner->PostTask( FROM_HERE, base::BindOnce(&AssistantSettingsManagerImpl:: @@ -143,7 +144,7 @@ StopSpeakerIdEnrollmentCallback callback) { DCHECK(assistant_manager_service_->GetState() == AssistantManagerService::State::RUNNING); - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); if (!assistant_manager_service_->assistant_manager_internal()) { std::move(callback).Run(); @@ -154,7 +155,7 @@ ->StopSpeakerIdEnrollment([repeating_callback = base::AdaptCallbackForRepeating( std::move(callback)), - task_runner = service_->main_task_runner(), + task_runner = main_task_runner(), weak_ptr = weak_factory_.GetWeakPtr()]() { task_runner->PostTask( FROM_HERE, @@ -165,9 +166,9 @@ } void AssistantSettingsManagerImpl::SyncSpeakerIdEnrollmentStatus() { - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); - if (service_->assistant_state()->allowed_state() != + if (assistant_state()->allowed_state() != ash::mojom::AssistantAllowedState::ALLOWED) { return; } @@ -176,7 +177,7 @@ ->GetSpeakerIdEnrollmentStatus( kUserID, [weak_ptr = weak_factory_.GetWeakPtr(), - task_runner = service_->main_task_runner()]( + task_runner = main_task_runner()]( const assistant_client::SpeakerIdEnrollmentStatus& status) { task_runner->PostTask( FROM_HERE, @@ -188,7 +189,7 @@ void AssistantSettingsManagerImpl::HandleSpeakerIdEnrollmentUpdate( const assistant_client::SpeakerIdEnrollmentUpdate& update) { - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); switch (update.state) { case SpeakerIdEnrollmentState::LISTEN: speaker_id_enrollment_client_->OnListeningHotword(); @@ -217,7 +218,7 @@ void AssistantSettingsManagerImpl::HandleSpeakerIdEnrollmentStatusSync( const assistant_client::SpeakerIdEnrollmentStatus& status) { - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); speaker_id_enrollment_done_ = status.user_model_exists; @@ -228,20 +229,34 @@ } else { // If hotword is enabled but there is no voice model found, launch the // enrollment flow. - if (service_->assistant_state()->hotword_enabled().value()) - service_->assistant_controller()->StartSpeakerIdEnrollmentFlow(); + if (assistant_state()->hotword_enabled().value()) + assistant_controller()->StartSpeakerIdEnrollmentFlow(); } } +ash::AssistantStateBase* AssistantSettingsManagerImpl::assistant_state() { + return context_->assistant_state(); +} + +mojom::AssistantController* +AssistantSettingsManagerImpl::assistant_controller() { + return context_->assistant_controller(); +} + +scoped_refptr<base::SequencedTaskRunner> +AssistantSettingsManagerImpl::main_task_runner() { + return context_->main_task_runner(); +} + void AssistantSettingsManagerImpl::HandleStopSpeakerIdEnrollment( base::RepeatingCallback<void()> callback) { - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); speaker_id_enrollment_client_.reset(); callback.Run(); } void AssistantSettingsManagerImpl::UpdateServerDeviceSettings() { - DCHECK(service_->main_task_runner()->RunsTasksInCurrentSequence()); + DCHECK(main_task_runner()->RunsTasksInCurrentSequence()); const std::string device_id = assistant_manager_service_->assistant_manager()->GetDeviceId(); @@ -257,15 +272,15 @@ device_settings_update->set_assistant_device_type( assistant::AssistantDevice::CROS); - if (service_->assistant_state()->hotword_enabled().value()) { + if (assistant_state()->hotword_enabled().value()) { device_settings_update->mutable_device_settings()->set_speaker_id_enabled( true); } VLOG(1) << "Update assistant device locale: " - << service_->assistant_state()->locale().value(); + << assistant_state()->locale().value(); device_settings_update->mutable_device_settings()->set_locale( - service_->assistant_state()->locale().value()); + assistant_state()->locale().value()); // Enable personal readout to grant permission for personal features. device_settings_update->mutable_device_settings()->set_personal_readout(
diff --git a/chromeos/services/assistant/assistant_settings_manager_impl.h b/chromeos/services/assistant/assistant_settings_manager_impl.h index 0f30b604..7b28c41e 100644 --- a/chromeos/services/assistant/assistant_settings_manager_impl.h +++ b/chromeos/services/assistant/assistant_settings_manager_impl.h
@@ -13,6 +13,10 @@ #include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/interface_ptr_set.h" +namespace ash { +class AssistantStateBase; +} // namespace ash + namespace assistant_client { struct SpeakerIdEnrollmentStatus; struct SpeakerIdEnrollmentUpdate; @@ -20,14 +24,22 @@ namespace chromeos { namespace assistant { +namespace mojom { +class AssistantController; +} // namespace mojom +} // namespace assistant +} // namespace chromeos + +namespace chromeos { +namespace assistant { class AssistantManagerServiceImpl; -class Service; +class ServiceContext; class AssistantSettingsManagerImpl : public AssistantSettingsManager { public: AssistantSettingsManagerImpl( - Service* service, + ServiceContext* context, AssistantManagerServiceImpl* assistant_manager_service); ~AssistantSettingsManagerImpl() override; @@ -57,7 +69,11 @@ void HandleSpeakerIdEnrollmentStatusSync( const assistant_client::SpeakerIdEnrollmentStatus& status); - Service* const service_; + ash::AssistantStateBase* assistant_state(); + mojom::AssistantController* assistant_controller(); + scoped_refptr<base::SequencedTaskRunner> main_task_runner(); + + ServiceContext* const context_; AssistantManagerServiceImpl* const assistant_manager_service_; mojom::SpeakerIdEnrollmentClientPtr speaker_id_enrollment_client_;
diff --git a/chromeos/services/assistant/fake_assistant_manager_service_impl.h b/chromeos/services/assistant/fake_assistant_manager_service_impl.h index 92198f9..1a500f91 100644 --- a/chromeos/services/assistant/fake_assistant_manager_service_impl.h +++ b/chromeos/services/assistant/fake_assistant_manager_service_impl.h
@@ -40,6 +40,10 @@ void SetArcPlayStoreEnabled(bool enabled) override; State GetState() const override; AssistantSettingsManager* GetAssistantSettingsManager() override; + void AddCommunicationErrorObserver( + AssistantCommunicationErrorObserver* observer) override {} + void RemoveCommunicationErrorObserver( + AssistantCommunicationErrorObserver* observer) override {} // mojom::Assistant overrides: void StartCachedScreenContextInteraction() override;
diff --git a/chromeos/services/assistant/platform/audio_input_impl.cc b/chromeos/services/assistant/platform/audio_input_impl.cc index 3e6104f..16832d7 100644 --- a/chromeos/services/assistant/platform/audio_input_impl.cc +++ b/chromeos/services/assistant/platform/audio_input_impl.cc
@@ -190,14 +190,15 @@ input_->RecreateAudioInputStream(/*use_dsp=*/false); } -AudioInputImpl::AudioInputImpl( - mojom::Client* client, - chromeos::PowerManagerClient* power_manager_client, - const std::string& device_id, - const std::string& hotword_device_id) +AudioInputImpl::AudioInputImpl(mojom::Client* client, + PowerManagerClient* power_manager_client, + CrasAudioHandler* cras_audio_handler, + const std::string& device_id, + const std::string& hotword_device_id) : client_(client), power_manager_client_(power_manager_client), power_manager_client_observer_(this), + cras_audio_handler_(cras_audio_handler), task_runner_(base::SequencedTaskRunnerHandle::Get()), device_id_(device_id), hotword_device_id_(hotword_device_id), @@ -425,7 +426,7 @@ uint64_t dsp_node_id; base::StringToUint64(hotword_device_id_, &dsp_node_id); - chromeos::CrasAudioHandler::Get()->SetHotwordModel( + cras_audio_handler_->SetHotwordModel( dsp_node_id, /* hotword_model */ base::ToLowerASCII(pref_locale), base::BindOnce(&AudioInputImpl::SetDspHotwordLocaleCallback, weak_factory_.GetWeakPtr())); @@ -440,8 +441,8 @@ // the locale stored in user's pref. uint64_t dsp_node_id; base::StringToUint64(hotword_device_id_, &dsp_node_id); - chromeos::CrasAudioHandler::Get()->SetHotwordModel( - dsp_node_id, "en_us", base::BindOnce([](bool success) {})); + cras_audio_handler_->SetHotwordModel(dsp_node_id, "en_us", + base::BindOnce([](bool success) {})); } void AudioInputImpl::RecreateAudioInputStream(bool use_dsp) {
diff --git a/chromeos/services/assistant/platform/audio_input_impl.h b/chromeos/services/assistant/platform/audio_input_impl.h index 7fd70a35..0e3f6f6 100644 --- a/chromeos/services/assistant/platform/audio_input_impl.h +++ b/chromeos/services/assistant/platform/audio_input_impl.h
@@ -23,6 +23,8 @@ #include "mojo/public/cpp/bindings/binding.h" namespace chromeos { +class CrasAudioHandler; + namespace assistant { class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioInputImpl @@ -31,7 +33,8 @@ public chromeos::PowerManagerClient::Observer { public: AudioInputImpl(mojom::Client* client, - chromeos::PowerManagerClient* power_manager_client, + PowerManagerClient* power_manager_client, + CrasAudioHandler* cras_audio_handler, const std::string& device_id, const std::string& hotword_device_id); ~AudioInputImpl() override; @@ -133,6 +136,8 @@ chromeos::PowerManagerClient::Observer> power_manager_client_observer_; + CrasAudioHandler* const cras_audio_handler_; + scoped_refptr<base::SequencedTaskRunner> task_runner_; std::unique_ptr<HotwordStateManager> state_manager_;
diff --git a/chromeos/services/assistant/platform/audio_input_impl_unittest.cc b/chromeos/services/assistant/platform/audio_input_impl_unittest.cc index 5b993bc..43f2b39 100644 --- a/chromeos/services/assistant/platform/audio_input_impl_unittest.cc +++ b/chromeos/services/assistant/platform/audio_input_impl_unittest.cc
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" +#include "chromeos/audio/cras_audio_handler.h" #include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/services/assistant/fake_client.h" #include "chromeos/services/assistant/public/features.h" @@ -48,10 +49,12 @@ // Enable DSP feature flag. scoped_feature_list_.InitAndEnableFeature(features::kEnableDspHotword); - chromeos::PowerManagerClient::InitializeFake(); + PowerManagerClient::InitializeFake(); + CrasAudioHandler::InitializeForTesting(); + audio_input_impl_ = std::make_unique<AudioInputImpl>( &fake_assistant_client_, FakePowerManagerClient::Get(), - "fake-device-id", "fake-hotword-device-id"); + CrasAudioHandler::Get(), "fake-device-id", "fake-hotword-device-id"); audio_input_impl_->AddObserver(this); }
diff --git a/chromeos/services/assistant/platform/audio_input_provider_impl.cc b/chromeos/services/assistant/platform/audio_input_provider_impl.cc index ba3003b..9b60e36 100644 --- a/chromeos/services/assistant/platform/audio_input_provider_impl.cc +++ b/chromeos/services/assistant/platform/audio_input_provider_impl.cc
@@ -11,11 +11,13 @@ AudioInputProviderImpl::AudioInputProviderImpl( mojom::Client* client, - chromeos::PowerManagerClient* power_manager_client, + PowerManagerClient* power_manager_client, + CrasAudioHandler* cras_audio_handler, const std::string& input_device_id, const std::string& hotword_device_id) : audio_input_(client, power_manager_client, + cras_audio_handler, input_device_id, hotword_device_id) {}
diff --git a/chromeos/services/assistant/platform/audio_input_provider_impl.h b/chromeos/services/assistant/platform/audio_input_provider_impl.h index f4895bea..cf7d2d9 100644 --- a/chromeos/services/assistant/platform/audio_input_provider_impl.h +++ b/chromeos/services/assistant/platform/audio_input_provider_impl.h
@@ -15,12 +15,16 @@ #include "libassistant/shared/public/platform_audio_input.h" namespace chromeos { +class CrasAudioHandler; +class PowerManagerClient; + namespace assistant { class AudioInputProviderImpl : public assistant_client::AudioInputProvider { public: AudioInputProviderImpl(mojom::Client* client, - chromeos::PowerManagerClient* power_manager_client, + PowerManagerClient* power_manager_client, + CrasAudioHandler* cras_audio_handler, const std::string& input_device_id, const std::string& hotword_device_id); ~AudioInputProviderImpl() override;
diff --git a/chromeos/services/assistant/platform/audio_output_provider_impl.cc b/chromeos/services/assistant/platform/audio_output_provider_impl.cc index b438d26..2c57d721 100644 --- a/chromeos/services/assistant/platform/audio_output_provider_impl.cc +++ b/chromeos/services/assistant/platform/audio_output_provider_impl.cc
@@ -141,13 +141,15 @@ AudioOutputProviderImpl::AudioOutputProviderImpl( mojom::Client* client, - chromeos::PowerManagerClient* power_manager_client, + PowerManagerClient* power_manager_client, + CrasAudioHandler* cras_audio_handler, AssistantMediaSession* media_session, scoped_refptr<base::SequencedTaskRunner> background_task_runner, const std::string& device_id) : client_(client), loop_back_input_(client, power_manager_client, + cras_audio_handler, media::AudioDeviceDescription::kLoopbackInputDeviceId, /*hotword_device_id=*/std::string()), volume_control_impl_(client, media_session),
diff --git a/chromeos/services/assistant/platform/audio_output_provider_impl.h b/chromeos/services/assistant/platform/audio_output_provider_impl.h index 499cb24..a7fa552c 100644 --- a/chromeos/services/assistant/platform/audio_output_provider_impl.h +++ b/chromeos/services/assistant/platform/audio_output_provider_impl.h
@@ -24,6 +24,9 @@ #include "services/audio/public/mojom/stream_factory.mojom.h" namespace chromeos { +class CrasAudioHandler; +class PowerManagerClient; + namespace assistant { class AssistantMediaSession; @@ -32,7 +35,8 @@ public: AudioOutputProviderImpl( mojom::Client* client, - chromeos::PowerManagerClient* power_manager_client, + PowerManagerClient* power_manager_client, + CrasAudioHandler* cras_audio_handler, AssistantMediaSession* media_session, scoped_refptr<base::SequencedTaskRunner> background_task_runner, const std::string& device_id);
diff --git a/chromeos/services/assistant/platform_api_impl.cc b/chromeos/services/assistant/platform_api_impl.cc index 7b1f861..7084351 100644 --- a/chromeos/services/assistant/platform_api_impl.cc +++ b/chromeos/services/assistant/platform_api_impl.cc
@@ -9,7 +9,7 @@ #include <vector> #include "base/system/sys_info.h" -#include "chromeos/dbus/power/power_manager_client.h" +#include "chromeos/audio/cras_audio_handler.h" #include "chromeos/services/assistant/media_session/assistant_media_session.h" #include "chromeos/services/assistant/platform/power_manager_provider_impl.h" #include "chromeos/services/assistant/public/features.h" @@ -80,21 +80,26 @@ PlatformApiImpl::PlatformApiImpl( mojom::Client* client, AssistantMediaSession* media_session, + PowerManagerClient* power_manager_client, + CrasAudioHandler* cras_audio_handler, mojo::PendingRemote<device::mojom::BatteryMonitor> battery_monitor, scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner, scoped_refptr<base::SingleThreadTaskRunner> background_task_runner, std::string pref_locale) : audio_input_provider_(client, - chromeos::PowerManagerClient::Get(), + power_manager_client, + cras_audio_handler, media::AudioDeviceDescription::kDefaultDeviceId, /*hotword_device_id=*/std::string()), audio_output_provider_(client, - chromeos::PowerManagerClient::Get(), + power_manager_client, + cras_audio_handler, media_session, background_task_runner, media::AudioDeviceDescription::kDefaultDeviceId), network_provider_(client), - pref_locale_(pref_locale) { + pref_locale_(pref_locale), + cras_audio_handler_(cras_audio_handler) { // Only enable native power features if they are supported by the UI. std::unique_ptr<PowerManagerProviderImpl> provider; if (features::IsPowerManagerEnabled()) { @@ -104,12 +109,12 @@ system_provider_ = std::make_unique<SystemProviderImpl>( std::move(provider), std::move(battery_monitor)); - chromeos::CrasAudioHandler::Get()->AddAudioObserver(this); + cras_audio_handler_->AddAudioObserver(this); OnAudioNodesChanged(); } PlatformApiImpl::~PlatformApiImpl() { - chromeos::CrasAudioHandler::Get()->RemoveAudioObserver(this); + cras_audio_handler_->RemoveAudioObserver(this); } AudioInputProviderImpl& PlatformApiImpl::GetAudioInputProvider() { @@ -139,10 +144,9 @@ void PlatformApiImpl::OnAudioNodesChanged() { if (!base::SysInfo::IsRunningOnChromeOS()) return; - auto* cras = chromeos::CrasAudioHandler::Get(); chromeos::AudioDeviceList devices; - cras->GetAudioDevices(&devices); + cras_audio_handler_->GetAudioDevices(&devices); const chromeos::AudioDevice* input_device = nullptr; const chromeos::AudioDevice* hotword_device = nullptr;
diff --git a/chromeos/services/assistant/platform_api_impl.h b/chromeos/services/assistant/platform_api_impl.h index b019aab..f0c6a6d7 100644 --- a/chromeos/services/assistant/platform_api_impl.h +++ b/chromeos/services/assistant/platform_api_impl.h
@@ -23,17 +23,21 @@ #include "services/device/public/mojom/battery_monitor.mojom.h" namespace chromeos { +class PowerManagerClient; + namespace assistant { class AssistantMediaSession; // Platform API required by the voice assistant. class PlatformApiImpl : public assistant_client::PlatformApi, - chromeos::CrasAudioHandler::AudioObserver { + CrasAudioHandler::AudioObserver { public: PlatformApiImpl( mojom::Client* client, AssistantMediaSession* media_session, + PowerManagerClient* power_manager_client, + CrasAudioHandler* cras_audio_handler, mojo::PendingRemote<device::mojom::BatteryMonitor> battery_monitor, scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner, scoped_refptr<base::SingleThreadTaskRunner> background_task_runner, @@ -98,6 +102,8 @@ std::unique_ptr<SystemProviderImpl> system_provider_; std::string pref_locale_; + CrasAudioHandler* const cras_audio_handler_; + chromeos::network_config::mojom::CrosNetworkConfigPtr cros_network_config_ptr_;
diff --git a/chromeos/services/assistant/service.cc b/chromeos/services/assistant/service.cc index 74595ae..93dda60 100644 --- a/chromeos/services/assistant/service.cc +++ b/chromeos/services/assistant/service.cc
@@ -29,6 +29,7 @@ #include "chromeos/services/assistant/fake_assistant_settings_manager_impl.h" #include "chromeos/services/assistant/public/cpp/assistant_prefs.h" #include "chromeos/services/assistant/public/features.h" +#include "chromeos/services/assistant/service_context.h" #include "components/prefs/pref_service.h" #include "components/user_manager/known_user.h" #include "google_apis/gaia/google_service_auth_error.h" @@ -65,17 +66,69 @@ } // namespace +class Service::Context : public ServiceContext { + public: + Context(Service* parent) : parent_(parent) {} + ~Context() override = default; + + // ServiceContext: + ash::mojom::AssistantAlarmTimerController* assistant_alarm_timer_controller() + override { + return parent_->assistant_alarm_timer_controller_.get(); + } + + mojom::AssistantController* assistant_controller() override { + return parent_->assistant_controller_.get(); + } + + ash::mojom::AssistantNotificationController* + assistant_notification_controller() override { + return parent_->assistant_notification_controller_.get(); + } + + ash::mojom::AssistantScreenContextController* + assistant_screen_context_controller() override { + return parent_->assistant_screen_context_controller_.get(); + } + + ash::AssistantStateBase* assistant_state() override { + return &parent_->assistant_state_; + } + + CrasAudioHandler* cras_audio_handler() override { + return CrasAudioHandler::Get(); + } + + mojom::DeviceActions* device_actions() override { + return parent_->device_actions_.get(); + } + + scoped_refptr<base::SequencedTaskRunner> main_task_runner() override { + return parent_->main_task_runner_; + } + + PowerManagerClient* power_manager_client() override { + return PowerManagerClient::Get(); + } + + private: + Service* const parent_; // |this| is owned by |parent_|. + + DISALLOW_COPY_AND_ASSIGN(Context); +}; + Service::Service(mojo::PendingReceiver<mojom::AssistantService> receiver, std::unique_ptr<network::SharedURLLoaderFactoryInfo> url_loader_factory_info) : receiver_(this, std::move(receiver)), token_refresh_timer_(std::make_unique<base::OneShotTimer>()), main_task_runner_(base::SequencedTaskRunnerHandle::Get()), + context_(std::make_unique<Context>(this)), url_loader_factory_info_(std::move(url_loader_factory_info)) { // TODO(xiaohuic): in MASH we will need to setup the dbus client if assistant // service runs in its own process. chromeos::PowerManagerClient* power_manager_client = - chromeos::PowerManagerClient::Get(); + context_->power_manager_client(); power_manager_observer_.Add(power_manager_client); power_manager_client->RequestStatusUpdate(); } @@ -96,33 +149,6 @@ g_settings_manager_override = manager; } -void Service::RequestAccessToken() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - // Bypass access token fetching under signed out mode. - if (is_signed_out_mode_) - return; - - VLOG(1) << "Start requesting access token."; - GetIdentityAccessor()->GetPrimaryAccountInfo(base::BindOnce( - &Service::GetPrimaryAccountInfoCallback, base::Unretained(this))); -} - -bool Service::ShouldEnableHotword() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - bool dsp_available = chromeos::CrasAudioHandler::Get()->HasHotwordDevice(); - - // Disable hotword if hotword is not set to always on and power source is not - // connected. - if (!dsp_available && !assistant_state_.hotword_always_on().value_or(false) && - !power_source_connected_) { - return false; - } - - return assistant_state_.hotword_enabled().value(); -} - void Service::SetIdentityAccessorForTesting( identity::mojom::IdentityAccessorPtr identity_accessor) { identity_accessor_ = std::move(identity_accessor); @@ -250,6 +276,11 @@ UpdateListeningState(); } +void Service::OnCommunicationError(CommunicationErrorType error_type) { + if (error_type == CommunicationErrorType::AuthenticationError) + RequestAccessToken(); +} + void Service::UpdateAssistantManagerState() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -314,6 +345,18 @@ return identity_accessor_.get(); } +void Service::RequestAccessToken() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + // Bypass access token fetching under signed out mode. + if (is_signed_out_mode_) + return; + + VLOG(1) << "Start requesting access token."; + GetIdentityAccessor()->GetPrimaryAccountInfo(base::BindOnce( + &Service::GetPrimaryAccountInfoCallback, base::Unretained(this))); +} + void Service::GetPrimaryAccountInfoCallback( const base::Optional<CoreAccountId>& account_id, const base::Optional<std::string>& gaia, @@ -394,12 +437,14 @@ // |assistant_manager_service_| is only created once. DCHECK(url_loader_factory_info_); assistant_manager_service_ = std::make_unique<AssistantManagerServiceImpl>( - client_.get(), std::move(battery_monitor), this, - std::move(url_loader_factory_info_)); + client_.get(), std::move(battery_monitor), context(), + std::move(url_loader_factory_info_), is_signed_out_mode_); #else assistant_manager_service_ = std::make_unique<FakeAssistantManagerServiceImpl>(); #endif + + assistant_manager_service_->AddCommunicationErrorObserver(this); } void Service::FinalizeAssistantManagerService() { @@ -472,6 +517,23 @@ session_active_; DVLOG(1) << "Update assistant listening state: " << should_listen; assistant_manager_service_->EnableListening(should_listen); + assistant_manager_service_->EnableHotword(should_listen && + ShouldEnableHotword()); +} + +bool Service::ShouldEnableHotword() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + bool dsp_available = context()->cras_audio_handler()->HasHotwordDevice(); + + // Disable hotword if hotword is not set to always on and power source is not + // connected. + if (!dsp_available && !assistant_state_.hotword_always_on().value_or(false) && + !power_source_connected_) { + return false; + } + + return assistant_state_.hotword_enabled().value(); } } // namespace assistant
diff --git a/chromeos/services/assistant/service.h b/chromeos/services/assistant/service.h index e1976d62..e7fa7210 100644 --- a/chromeos/services/assistant/service.h +++ b/chromeos/services/assistant/service.h
@@ -20,6 +20,7 @@ #include "base/single_thread_task_runner.h" #include "base/time/time.h" #include "chromeos/dbus/power/power_manager_client.h" +#include "chromeos/services/assistant/assistant_communication_error_observer.h" #include "chromeos/services/assistant/assistant_state_proxy.h" #include "chromeos/services/assistant/public/mojom/assistant.mojom.h" #include "chromeos/services/assistant/public/mojom/settings.mojom.h" @@ -51,6 +52,7 @@ class AssistantManagerService; class AssistantSettingsManager; class PrefConnectionDelegate; +class ServiceContext; // |AssistantManagerService|'s state won't update if it's currently in the // process of starting up. This is the delay before we will try to update @@ -61,7 +63,10 @@ : public mojom::AssistantService, public chromeos::PowerManagerClient::Observer, public ash::SessionActivationObserver, - public ash::AssistantStateObserver { + public ash::AssistantStateObserver, + public AssistantCommunicationErrorObserver + +{ public: Service(mojo::PendingReceiver<mojom::AssistantService> receiver, std::unique_ptr<network::SharedURLLoaderFactoryInfo> @@ -72,44 +77,6 @@ static void OverrideSettingsManagerForTesting( AssistantSettingsManager* manager); - mojom::Client* client() { return client_.get(); } - - mojom::DeviceActions* device_actions() { return device_actions_.get(); } - - mojom::AssistantController* assistant_controller() { - return assistant_controller_.get(); - } - - ash::mojom::AssistantAlarmTimerController* - assistant_alarm_timer_controller() { - return assistant_alarm_timer_controller_.get(); - } - - ash::mojom::AssistantNotificationController* - assistant_notification_controller() { - return assistant_notification_controller_.get(); - } - - ash::mojom::AssistantScreenContextController* - assistant_screen_context_controller() { - return assistant_screen_context_controller_.get(); - } - - ash::AssistantStateBase* assistant_state() { return &assistant_state_; } - - scoped_refptr<base::SequencedTaskRunner> main_task_runner() { - return main_task_runner_; - } - - bool is_signed_out_mode() const { return is_signed_out_mode_; } - - void RequestAccessToken(); - - // Returns the "actual" hotword status. In addition to the hotword pref, this - // method also take power status into account if dsp support is not available - // for the device. - bool ShouldEnableHotword(); - void SetIdentityAccessorForTesting( identity::mojom::IdentityAccessorPtr identity_accessor); @@ -123,6 +90,8 @@ private: friend class AssistantServiceTest; + class Context; + // mojom::AssistantService overrides void Init(mojo::PendingRemote<mojom::Client> client, mojo::PendingRemote<mojom::DeviceActions> device_actions, @@ -147,10 +116,15 @@ void OnArcPlayStoreEnabledChanged(bool enabled) override; void OnLockedFullScreenStateChanged(bool enabled) override; + // AssistantCommunicationErrorObserver + void OnCommunicationError(CommunicationErrorType error_type) override; + void UpdateAssistantManagerState(); identity::mojom::IdentityAccessor* GetIdentityAccessor(); + void RequestAccessToken(); + void GetPrimaryAccountInfoCallback( const base::Optional<CoreAccountId>& account_id, const base::Optional<std::string>& gaia, @@ -172,6 +146,13 @@ void UpdateListeningState(); + ServiceContext* context() { return context_.get(); } + + // Returns the "actual" hotword status. In addition to the hotword pref, this + // method also take power status into account if dsp support is not available + // for the device. + bool ShouldEnableHotword(); + mojo::Receiver<mojom::AssistantService> receiver_; mojo::ReceiverSet<mojom::Assistant> assistant_receivers_; @@ -214,6 +195,10 @@ assistant_screen_context_controller_; AssistantStateProxy assistant_state_; + // |ServiceContext| object passed to child classes so they can access some of + // our functionality without depending on us. + std::unique_ptr<ServiceContext> context_; + // non-null until |assistant_manager_service_| is created. std::unique_ptr<network::SharedURLLoaderFactoryInfo> url_loader_factory_info_;
diff --git a/chromeos/services/assistant/service_context.h b/chromeos/services/assistant/service_context.h new file mode 100644 index 0000000..8a79873 --- /dev/null +++ b/chromeos/services/assistant/service_context.h
@@ -0,0 +1,69 @@ +// 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 CHROMEOS_SERVICES_ASSISTANT_SERVICE_CONTEXT_H_ +#define CHROMEOS_SERVICES_ASSISTANT_SERVICE_CONTEXT_H_ + +#include "base/memory/scoped_refptr.h" + +namespace ash { +class AssistantStateBase; + +namespace mojom { +class AssistantAlarmTimerController; +class AssistantNotificationController; +class AssistantScreenContextController; +} // namespace mojom +} // namespace ash + +namespace chromeos { +class CrasAudioHandler; +class PowerManagerClient; + +namespace assistant { +namespace mojom { +class AssistantController; +class DeviceActions; +} // namespace mojom +} // namespace assistant +} // namespace chromeos + +namespace base { +class SequencedTaskRunner; +} // namespace base + +namespace chromeos { +namespace assistant { + +// Context object passed around so classes can access some of the |Service| +// functionality without directly depending on the |Service| class. +class ServiceContext { + public: + virtual ~ServiceContext() = default; + + virtual ash::mojom::AssistantAlarmTimerController* + assistant_alarm_timer_controller() = 0; + + virtual mojom::AssistantController* assistant_controller() = 0; + + virtual ash::mojom::AssistantNotificationController* + assistant_notification_controller() = 0; + + virtual ash::mojom::AssistantScreenContextController* + assistant_screen_context_controller() = 0; + + virtual ash::AssistantStateBase* assistant_state() = 0; + + virtual CrasAudioHandler* cras_audio_handler() = 0; + + virtual mojom::DeviceActions* device_actions() = 0; + + virtual scoped_refptr<base::SequencedTaskRunner> main_task_runner() = 0; + + virtual PowerManagerClient* power_manager_client() = 0; +}; +} // namespace assistant +} // namespace chromeos + +#endif // CHROMEOS_SERVICES_ASSISTANT_SERVICE_CONTEXT_H_
diff --git a/components/contextual_search/content/browser/contextual_search_js_api_service_impl.cc b/components/contextual_search/content/browser/contextual_search_js_api_service_impl.cc index d68a86d..400c596 100644 --- a/components/contextual_search/content/browser/contextual_search_js_api_service_impl.cc +++ b/components/contextual_search/content/browser/contextual_search_js_api_service_impl.cc
@@ -8,7 +8,7 @@ #include <utility> #include "components/contextual_search/content/browser/contextual_search_js_api_handler.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" namespace contextual_search { @@ -39,10 +39,11 @@ // static void CreateContextualSearchJsApiService( ContextualSearchJsApiHandler* contextual_search_js_api_handler, - mojom::ContextualSearchJsApiServiceRequest request) { - mojo::MakeStrongBinding(std::make_unique<ContextualSearchJsApiServiceImpl>( - contextual_search_js_api_handler), - std::move(request)); + mojo::PendingReceiver<mojom::ContextualSearchJsApiService> receiver) { + mojo::MakeSelfOwnedReceiver( + std::make_unique<ContextualSearchJsApiServiceImpl>( + contextual_search_js_api_handler), + std::move(receiver)); } } // namespace contextual_search
diff --git a/components/contextual_search/content/browser/contextual_search_js_api_service_impl.h b/components/contextual_search/content/browser/contextual_search_js_api_service_impl.h index 931b82c..b9c965c9 100644 --- a/components/contextual_search/content/browser/contextual_search_js_api_service_impl.h +++ b/components/contextual_search/content/browser/contextual_search_js_api_service_impl.h
@@ -8,6 +8,7 @@ #include "base/macros.h" #include "components/contextual_search/content/browser/contextual_search_js_api_handler.h" #include "components/contextual_search/content/common/mojom/contextual_search_js_api_service.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" namespace contextual_search { @@ -48,7 +49,7 @@ // static void CreateContextualSearchJsApiService( ContextualSearchJsApiHandler* contextual_search_js_api_handler, - mojom::ContextualSearchJsApiServiceRequest request); + mojo::PendingReceiver<mojom::ContextualSearchJsApiService> receiver); } // namespace contextual_search
diff --git a/components/contextual_search/content/renderer/contextual_search_wrapper.cc b/components/contextual_search/content/renderer/contextual_search_wrapper.cc index 653a1cd..7fb2fdf 100644 --- a/components/contextual_search/content/renderer/contextual_search_wrapper.cc +++ b/components/contextual_search/content/renderer/contextual_search_wrapper.cc
@@ -75,10 +75,9 @@ } bool ContextualSearchWrapper::EnsureServiceConnected() { - if (render_frame() && (!contextual_search_js_api_service_ || - !contextual_search_js_api_service_.is_bound())) { + if (render_frame() && !contextual_search_js_api_service_) { render_frame()->GetRemoteInterfaces()->GetInterface( - &contextual_search_js_api_service_); + contextual_search_js_api_service_.BindNewPipeAndPassReceiver()); return true; } return false;
diff --git a/components/contextual_search/content/renderer/contextual_search_wrapper.h b/components/contextual_search/content/renderer/contextual_search_wrapper.h index e313f7c..1db6631 100644 --- a/components/contextual_search/content/renderer/contextual_search_wrapper.h +++ b/components/contextual_search/content/renderer/contextual_search_wrapper.h
@@ -11,6 +11,7 @@ #include "content/public/renderer/render_frame_observer.h" #include "gin/handle.h" #include "gin/wrappable.h" +#include "mojo/public/cpp/bindings/remote.h" namespace blink { class WebFrame; @@ -56,7 +57,8 @@ bool EnsureServiceConnected(); // The service to notify when API calls are made. - mojom::ContextualSearchJsApiServicePtr contextual_search_js_api_service_; + mojo::Remote<mojom::ContextualSearchJsApiService> + contextual_search_js_api_service_; DISALLOW_COPY_AND_ASSIGN(ContextualSearchWrapper); };
diff --git a/components/contextual_search/content/renderer/overlay_js_render_frame_observer.cc b/components/contextual_search/content/renderer/overlay_js_render_frame_observer.cc index 2482af9..2f2c8f1a 100644 --- a/components/contextual_search/content/renderer/overlay_js_render_frame_observer.cc +++ b/components/contextual_search/content/renderer/overlay_js_render_frame_observer.cc
@@ -9,7 +9,6 @@ #include "base/bind.h" #include "components/contextual_search/content/renderer/contextual_search_wrapper.h" #include "content/public/renderer/render_frame.h" -#include "mojo/public/cpp/bindings/strong_binding.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/interface_provider.h" #include "third_party/blink/public/platform/web_url.h" @@ -47,7 +46,7 @@ bool OverlayJsRenderFrameObserver::EnsureServiceConnected() { if (render_frame() && !contextual_search_js_api_service_) { render_frame()->GetRemoteInterfaces()->GetInterface( - &contextual_search_js_api_service_); + contextual_search_js_api_service_.BindNewPipeAndPassReceiver()); return true; } return false;
diff --git a/components/contextual_search/content/renderer/overlay_js_render_frame_observer.h b/components/contextual_search/content/renderer/overlay_js_render_frame_observer.h index 53e1856..a6046c3 100644 --- a/components/contextual_search/content/renderer/overlay_js_render_frame_observer.h +++ b/components/contextual_search/content/renderer/overlay_js_render_frame_observer.h
@@ -10,6 +10,7 @@ #include "components/contextual_search/content/common/mojom/contextual_search_js_api_service.mojom.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame_observer.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "third_party/blink/public/web/web_local_frame.h" #include "v8/include/v8.h" @@ -42,7 +43,8 @@ // The CS service to notify when deciding to enable the API or when API calls // are made. - mojom::ContextualSearchJsApiServicePtr contextual_search_js_api_service_; + mojo::Remote<mojom::ContextualSearchJsApiService> + contextual_search_js_api_service_; // Remembers whether we did start enabling the JS API by making a request // to the Contextual Search service to ask if we should enable for this
diff --git a/components/cronet/android/cronet_impl_native_proguard.cfg b/components/cronet/android/cronet_impl_native_proguard.cfg index 2d227f7f..99989ff 100644 --- a/components/cronet/android/cronet_impl_native_proguard.cfg +++ b/components/cronet/android/cronet_impl_native_proguard.cfg
@@ -5,6 +5,28 @@ public <init>(android.content.Context); } +# Suppress unnecessary warnings. +-dontnote org.chromium.net.ProxyChangeListener$ProxyReceiver +-dontnote org.chromium.net.AndroidKeyStore +# Needs 'void setTextAppearance(int)' (API level 23). +-dontwarn org.chromium.base.ApiCompatibilityUtils +# Needs 'boolean onSearchRequested(android.view.SearchEvent)' (API level 23). +-dontwarn org.chromium.base.WindowCallbackWrapper + +# Generated for chrome apk and not included into cronet. +-dontwarn org.chromium.base.library_loader.NativeLibraries +-dontwarn org.chromium.base.multidex.ChromiumMultiDexInstaller +-dontwarn org.chromium.base.metrics.CachedMetrics +-dontwarn org.chromium.base.library_loader.LibraryLoader +-dontwarn org.chromium.base.SysUtils + +# Objects of this type are passed around by native code, but the class +# is never used directly by native code. Since the class is not loaded, it does +# not need to be preserved as an entry point. +-dontnote org.chromium.net.UrlRequest$ResponseHeadersMap +# https://android.googlesource.com/platform/sdk/+/marshmallow-mr1-release/files/proguard-android.txt#54 +-dontwarn android.support.** + # This class should be explicitly kept to avoid failure if # class/merging/horizontal proguard optimization is enabled. -keep class org.chromium.base.CollectionUtil
diff --git a/components/cronet/android/test/proguard.cfg b/components/cronet/android/test/proguard.cfg index 32e1349..23a7900 100644 --- a/components/cronet/android/test/proguard.cfg +++ b/components/cronet/android/test/proguard.cfg
@@ -1,12 +1,16 @@ # Proguard configuration that is common for all type of tests. -keepattributes Signature,InnerClasses,SourceFile,LineNumberTable,EnclosingMethod +-dontwarn io.netty.** -keep class io.netty.** { *; } # Keep ChromiumNativeTestSupport & ChromiumPlatformOnlyTestSupport since they are # instantiated through Reflection by the smoke tests. -keep class org.chromium.net.smoke.ChromiumNativeTestSupport -keep class org.chromium.net.smoke.ChromiumPlatformOnlyTestSupport +# https://android.googlesource.com/platform/sdk/+/marshmallow-mr1-release/files/proguard-android.txt#54 +-dontwarn android.support.** + # Do not obfuscate this class for testing since some of the tests check the class # name in order to check that an instantiated engine is the Java one. -keepnames class org.chromium.net.impl.JavaCronetEngine @@ -20,3 +24,6 @@ -keep class org.chromium.net.TestFilesInstaller -keep class org.chromium.net.MetricsTestUtil + +# Generated for chrome apk and not included into cronet. +-dontwarn org.chromium.base.library_loader.NativeLibraries
diff --git a/components/dom_distiller/content/browser/distillability_driver.cc b/components/dom_distiller/content/browser/distillability_driver.cc index 04816925..e55900d6 100644 --- a/components/dom_distiller/content/browser/distillability_driver.cc +++ b/components/dom_distiller/content/browser/distillability_driver.cc
@@ -13,7 +13,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" namespace dom_distiller { @@ -60,10 +60,10 @@ } void DistillabilityDriver::CreateDistillabilityService( - mojom::DistillabilityServiceRequest request) { - mojo::MakeStrongBinding( + mojo::PendingReceiver<mojom::DistillabilityService> receiver) { + mojo::MakeSelfOwnedReceiver( std::make_unique<DistillabilityServiceImpl>(weak_factory_.GetWeakPtr()), - std::move(request)); + std::move(receiver)); } void DistillabilityDriver::AddObserver(DistillabilityObserver* observer) {
diff --git a/components/dom_distiller/content/browser/distillability_driver.h b/components/dom_distiller/content/browser/distillability_driver.h index 2590e50..f9f7acc 100644 --- a/components/dom_distiller/content/browser/distillability_driver.h +++ b/components/dom_distiller/content/browser/distillability_driver.h
@@ -15,7 +15,7 @@ #include "components/dom_distiller/content/common/mojom/distillability_service.mojom.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "services/service_manager/public/cpp/binder_registry.h" namespace dom_distiller { @@ -26,7 +26,8 @@ public content::WebContentsUserData<DistillabilityDriver> { public: ~DistillabilityDriver() override; - void CreateDistillabilityService(mojom::DistillabilityServiceRequest request); + void CreateDistillabilityService( + mojo::PendingReceiver<mojom::DistillabilityService> receiver); void AddObserver(DistillabilityObserver* observer); base::Optional<DistillabilityResult> GetLatestResult() const {
diff --git a/components/dom_distiller/content/browser/distiller_javascript_service_impl.cc b/components/dom_distiller/content/browser/distiller_javascript_service_impl.cc index 304bf71..9d993ad87 100644 --- a/components/dom_distiller/content/browser/distiller_javascript_service_impl.cc +++ b/components/dom_distiller/content/browser/distiller_javascript_service_impl.cc
@@ -10,7 +10,7 @@ #include "base/metrics/user_metrics.h" #include "components/dom_distiller/content/browser/distiller_ui_handle.h" #include "components/dom_distiller/core/feedback_reporter.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" namespace dom_distiller { @@ -33,11 +33,11 @@ void CreateDistillerJavaScriptService( DistillerUIHandle* distiller_ui_handle, - mojom::DistillerJavaScriptServiceRequest request, + mojo::PendingReceiver<mojom::DistillerJavaScriptService> receiver, content::RenderFrameHost* render_frame_host) { - mojo::MakeStrongBinding(std::make_unique<DistillerJavaScriptServiceImpl>( - render_frame_host, distiller_ui_handle), - std::move(request)); + mojo::MakeSelfOwnedReceiver(std::make_unique<DistillerJavaScriptServiceImpl>( + render_frame_host, distiller_ui_handle), + std::move(receiver)); } } // namespace dom_distiller
diff --git a/components/dom_distiller/content/browser/distiller_javascript_service_impl.h b/components/dom_distiller/content/browser/distiller_javascript_service_impl.h index bcb5c015..1bd75c26 100644 --- a/components/dom_distiller/content/browser/distiller_javascript_service_impl.h +++ b/components/dom_distiller/content/browser/distiller_javascript_service_impl.h
@@ -8,7 +8,7 @@ #include "base/macros.h" #include "components/dom_distiller/content/browser/distiller_ui_handle.h" #include "components/dom_distiller/content/common/mojom/distiller_javascript_service.mojom.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" namespace dom_distiller { @@ -35,7 +35,7 @@ // static void CreateDistillerJavaScriptService( DistillerUIHandle* distiller_ui_handle, - mojom::DistillerJavaScriptServiceRequest request, + mojo::PendingReceiver<mojom::DistillerJavaScriptService> receiver, content::RenderFrameHost* render_frame_host); } // namespace dom_distiller
diff --git a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc index 21a0178..a6ad374 100644 --- a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc +++ b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
@@ -38,7 +38,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/url_util.h" #include "net/url_request/url_request.h" #include "services/service_manager/public/cpp/binder_registry.h" @@ -149,9 +149,9 @@ CHECK_EQ(0, render_frame_host->GetEnabledBindings()); // Tell the renderer that this is currently a distilled page. - mojom::DistillerPageNotifierServicePtr page_notifier_service; + mojo::Remote<mojom::DistillerPageNotifierService> page_notifier_service; render_frame_host->GetRemoteInterfaces()->GetInterface( - &page_notifier_service); + page_notifier_service.BindNewPipeAndPassReceiver()); DCHECK(page_notifier_service); page_notifier_service->NotifyIsDistillerPage(); }
diff --git a/components/dom_distiller/content/renderer/distillability_agent.cc b/components/dom_distiller/content/renderer/distillability_agent.cc index a4ded3d5..ee96e84 100644 --- a/components/dom_distiller/content/renderer/distillability_agent.cc +++ b/components/dom_distiller/content/renderer/distillability_agent.cc
@@ -14,6 +14,7 @@ #include "components/dom_distiller/core/page_features.h" #include "components/dom_distiller/core/url_utils.h" #include "content/public/renderer/render_frame.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/service_manager/public/cpp/interface_provider.h" #include "third_party/blink/public/platform/web_distillability.h" #include "third_party/blink/public/web/web_document.h" @@ -258,9 +259,9 @@ bool is_last = IsLast(is_loaded); // Connect to Mojo service on browser to notify page distillability. - mojom::DistillabilityServicePtr distillability_service; - render_frame()->GetRemoteInterfaces()->GetInterface(&distillability_service); - DCHECK(distillability_service); + mojo::Remote<mojom::DistillabilityService> distillability_service; + render_frame()->GetRemoteInterfaces()->GetInterface( + distillability_service.BindNewPipeAndPassReceiver()); if (!distillability_service.is_bound()) return; bool is_mobile_friendly = false;
diff --git a/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.cc b/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.cc index 50d728f..ca9fe626 100644 --- a/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.cc +++ b/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.cc
@@ -11,7 +11,7 @@ #include "components/dom_distiller/content/common/mojom/distiller_page_notifier_service.mojom.h" #include "components/dom_distiller/content/renderer/distiller_page_notifier_service_impl.h" #include "content/public/renderer/render_frame.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "v8/include/v8.h" @@ -57,12 +57,12 @@ } void DistillerJsRenderFrameObserver::CreateDistillerPageNotifierService( - mojom::DistillerPageNotifierServiceRequest request) { + mojo::PendingReceiver<mojom::DistillerPageNotifierService> receiver) { if (!load_active_) return; - mojo::MakeStrongBinding( + mojo::MakeSelfOwnedReceiver( std::make_unique<DistillerPageNotifierServiceImpl>(this), - std::move(request)); + std::move(receiver)); } void DistillerJsRenderFrameObserver::SetIsDistillerPage() {
diff --git a/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.h b/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.h index db12f5a6..a30b4207 100644 --- a/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.h +++ b/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.h
@@ -11,6 +11,7 @@ #include "components/dom_distiller/content/renderer/distiller_page_notifier_service_impl.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame_observer.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "v8/include/v8.h" @@ -40,7 +41,7 @@ private: void CreateDistillerPageNotifierService( - mojom::DistillerPageNotifierServiceRequest request); + mojo::PendingReceiver<mojom::DistillerPageNotifierService> receiver); // RenderFrameObserver implementation. void OnDestruct() override;
diff --git a/components/dom_distiller/content/renderer/distiller_native_javascript.cc b/components/dom_distiller/content/renderer/distiller_native_javascript.cc index 1d1070d..e6a4ce4 100644 --- a/components/dom_distiller/content/renderer/distiller_native_javascript.cc +++ b/components/dom_distiller/content/renderer/distiller_native_javascript.cc
@@ -65,8 +65,9 @@ } void DistillerNativeJavaScript::EnsureServiceConnected() { - if (!distiller_js_service_ || !distiller_js_service_.is_bound()) { - render_frame_->GetRemoteInterfaces()->GetInterface(&distiller_js_service_); + if (!distiller_js_service_) { + render_frame_->GetRemoteInterfaces()->GetInterface( + distiller_js_service_.BindNewPipeAndPassReceiver()); } }
diff --git a/components/dom_distiller/content/renderer/distiller_native_javascript.h b/components/dom_distiller/content/renderer/distiller_native_javascript.h index 2b5e699..6f50d7d7 100644 --- a/components/dom_distiller/content/renderer/distiller_native_javascript.h +++ b/components/dom_distiller/content/renderer/distiller_native_javascript.h
@@ -8,6 +8,7 @@ #include "components/dom_distiller/content/common/mojom/distiller_javascript_service.mojom.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame_observer.h" +#include "mojo/public/cpp/bindings/remote.h" #include "v8/include/v8.h" namespace dom_distiller { @@ -35,7 +36,7 @@ void EnsureServiceConnected(); content::RenderFrame* render_frame_; - mojom::DistillerJavaScriptServicePtr distiller_js_service_; + mojo::Remote<mojom::DistillerJavaScriptService> distiller_js_service_; }; // static
diff --git a/components/download/content/internal/download_driver_impl_unittest.cc b/components/download/content/internal/download_driver_impl_unittest.cc index a4bdcca..61f9331 100644 --- a/components/download/content/internal/download_driver_impl_unittest.cc +++ b/components/download/content/internal/download_driver_impl_unittest.cc
@@ -53,7 +53,7 @@ class DownloadDriverImplTest : public testing::Test { public: DownloadDriverImplTest() - : coordinator_(base::NullCallback()), + : coordinator_(base::NullCallback(), false), task_runner_(new base::TestSimpleTaskRunner), handle_(task_runner_) {}
diff --git a/components/download/internal/background_service/controller_impl.cc b/components/download/internal/background_service/controller_impl.cc index 3c02debb..d810612 100644 --- a/components/download/internal/background_service/controller_impl.cc +++ b/components/download/internal/background_service/controller_impl.cc
@@ -1153,7 +1153,6 @@ DCHECK(driver_entry.has_value()); stats::LogFilePathRenamed(driver_entry->current_file_path != entry->target_file_path); - stats::LogHashPresence(!driver_entry->hash256.empty()); entry->target_file_path = driver_entry->current_file_path; entry->completion_time = driver_entry->completion_time; entry->bytes_downloaded = driver_entry->bytes_downloaded;
diff --git a/components/download/internal/background_service/stats.cc b/components/download/internal/background_service/stats.cc index ac937aba..3fd3716 100644 --- a/components/download/internal/background_service/stats.cc +++ b/components/download/internal/background_service/stats.cc
@@ -330,10 +330,6 @@ base::UmaHistogramBoolean(name, has_upload_data); } -void LogHashPresence(bool hash_exists) { - UMA_HISTOGRAM_BOOLEAN("Download.Service.Finish.ReportedHash", hash_exists); -} - void LogDownloadClientInflatedFullBrowser(DownloadClient client) { std::string client_name(ClientToHistogramSuffix(client)); base::UmaHistogramBoolean(
diff --git a/components/download/internal/background_service/stats.h b/components/download/internal/background_service/stats.h index 4c43537..07cc041 100644 --- a/components/download/internal/background_service/stats.h +++ b/components/download/internal/background_service/stats.h
@@ -220,9 +220,6 @@ // Records whether the entry was an upload. void LogHasUploadData(DownloadClient client, bool has_upload_data); -// Records whether or not a completed entry has a hash value. -void LogHashPresence(bool hash_exists); - // Records count of reduced mode to full browser transitions requested by each // client. void LogDownloadClientInflatedFullBrowser(DownloadClient client);
diff --git a/components/download/internal/common/all_download_event_notifier_unittest.cc b/components/download/internal/common/all_download_event_notifier_unittest.cc index 5d63d4d..b84fe2a 100644 --- a/components/download/internal/common/all_download_event_notifier_unittest.cc +++ b/components/download/internal/common/all_download_event_notifier_unittest.cc
@@ -45,7 +45,7 @@ class AllDownloadEventNotifierTest : public testing::Test { public: - AllDownloadEventNotifierTest() : coordinator_(base::NullCallback()) {} + AllDownloadEventNotifierTest() : coordinator_(base::NullCallback(), false) {} ~AllDownloadEventNotifierTest() override = default;
diff --git a/components/download/internal/common/download_item_impl.cc b/components/download/internal/common/download_item_impl.cc index 475714431..cd7b5df 100644 --- a/components/download/internal/common/download_item_impl.cc +++ b/components/download/internal/common/download_item_impl.cc
@@ -41,6 +41,7 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/task_runner_util.h" +#include "base/trace_event/memory_usage_estimator.h" #include "build/build_config.h" #include "components/download/internal/common/download_job_impl.h" #include "components/download/internal/common/parallel_download_utils.h" @@ -2622,4 +2623,28 @@ return "unknown"; } +size_t DownloadItemImpl::GetApproximateMemoryUsage() const { + static size_t class_size = sizeof(DownloadItemImpl); + size_t size = class_size; + + for (const GURL& url : GetUrlChain()) + size += url.EstimateMemoryUsage(); + size += GetReferrerUrl().EstimateMemoryUsage(); + size += GetSiteUrl().EstimateMemoryUsage(); + size += GetTabUrl().EstimateMemoryUsage(); + size += GetTabReferrerUrl().EstimateMemoryUsage(); + size += base::trace_event::EstimateMemoryUsage(GetSuggestedFilename()); + size += base::trace_event::EstimateMemoryUsage(GetForcedFilePath().value()); + size += base::trace_event::EstimateMemoryUsage(GetRemoteAddress()); + size += base::trace_event::EstimateMemoryUsage(GetTargetFilePath().value()); + size += base::trace_event::EstimateMemoryUsage(GetFullPath().value()); + size += base::trace_event::EstimateMemoryUsage(GetHash()); + size += base::trace_event::EstimateMemoryUsage(GetMimeType()); + size += base::trace_event::EstimateMemoryUsage(GetOriginalMimeType()); + size += base::trace_event::EstimateMemoryUsage(GetLastModifiedTime()); + size += base::trace_event::EstimateMemoryUsage(GetETag()); + size += base::trace_event::EstimateMemoryUsage(GetGuid()); + return size; +} + } // namespace download
diff --git a/components/download/internal/common/download_stats.cc b/components/download/internal/common/download_stats.cc index d12e862..ff9893b2 100644 --- a/components/download/internal/common/download_stats.cc +++ b/components/download/internal/common/download_stats.cc
@@ -1278,6 +1278,17 @@ net::HttpResponseInfo::ConnectionInfo::NUM_OF_CONNECTION_INFOS); } +void RecordDownloadManagerCreationTimeSinceStartup( + base::TimeDelta elapsed_time) { + base::UmaHistogramLongTimes("Download.DownloadManager.CreationDelay", + elapsed_time); +} + +void RecordDownloadManagerMemoryUsage(size_t bytes_used) { + base::UmaHistogramMemoryKB("Download.DownloadManager.MemoryUsage", + bytes_used / 1000); +} + #if defined(OS_ANDROID) void RecordFirstBackgroundDownloadInterruptReason( DownloadInterruptReason reason,
diff --git a/components/download/internal/common/in_progress_download_manager.cc b/components/download/internal/common/in_progress_download_manager.cc index 8faa596..c5d09e1 100644 --- a/components/download/internal/common/in_progress_download_manager.cc +++ b/components/download/internal/common/in_progress_download_manager.cc
@@ -211,7 +211,6 @@ download_start_observer_(nullptr), is_origin_secure_cb_(is_origin_secure_cb), url_security_policy_(url_security_policy), - use_empty_db_(in_progress_db_dir.empty()), connector_(connector) { Initialize(in_progress_db_dir, db_provider); } @@ -345,7 +344,7 @@ leveldb_proto::ProtoDatabaseProvider* db_provider) { std::unique_ptr<DownloadDB> download_db; - if (use_empty_db_) { + if (in_progress_db_dir.empty()) { download_db = std::make_unique<DownloadDB>(); } else { download_db = std::make_unique<DownloadDBImpl>( @@ -549,7 +548,7 @@ bool success, std::unique_ptr<std::vector<DownloadDBEntry>> entries) { #if defined(OS_ANDROID) - if (!use_empty_db_ && + if (entries->size() > 0 && DownloadCollectionBridge::NeedToRetrieveDisplayNames()) { DownloadCollectionBridge::GetDisplayNamesCallback callback = base::BindOnce(&InProgressDownloadManager::OnDownloadNamesRetrieved,
diff --git a/components/download/internal/common/simple_download_manager_coordinator.cc b/components/download/internal/common/simple_download_manager_coordinator.cc index 9cf5796..493e99f 100644 --- a/components/download/internal/common/simple_download_manager_coordinator.cc +++ b/components/download/internal/common/simple_download_manager_coordinator.cc
@@ -8,19 +8,24 @@ #include "components/download/public/common/all_download_event_notifier.h" #include "components/download/public/common/download_item.h" +#include "components/download/public/common/download_stats.h" #include "components/download/public/common/simple_download_manager.h" namespace download { SimpleDownloadManagerCoordinator::SimpleDownloadManagerCoordinator( const DownloadWhenFullManagerStartsCallBack& - download_when_full_manager_starts_cb) + download_when_full_manager_starts_cb, + bool record_full_download_manager_delay) : simple_download_manager_(nullptr), has_all_history_downloads_(false), current_manager_has_all_history_downloads_(false), initialized_(false), download_when_full_manager_starts_cb_( - download_when_full_manager_starts_cb) {} + download_when_full_manager_starts_cb), + creation_time_ticks_(record_full_download_manager_delay + ? base::TimeTicks::Now() + : base::TimeTicks()) {} SimpleDownloadManagerCoordinator::~SimpleDownloadManagerCoordinator() { if (simple_download_manager_) @@ -42,6 +47,11 @@ current_manager_has_all_history_downloads_ = manages_all_history_downloads; simple_download_manager_ = simple_download_manager; simple_download_manager_->AddObserver(this); + + if (manages_all_history_downloads && !creation_time_ticks_.is_null()) { + RecordDownloadManagerCreationTimeSinceStartup(base::TimeTicks::Now() - + creation_time_ticks_); + } } void SimpleDownloadManagerCoordinator::AddObserver(Observer* observer) {
diff --git a/components/download/public/common/download_item_impl.h b/components/download/public/common/download_item_impl.h index 5877db95..18d3589 100644 --- a/components/download/public/common/download_item_impl.h +++ b/components/download/public/common/download_item_impl.h
@@ -370,6 +370,9 @@ void SetAutoResumeCountForTesting(int32_t auto_resume_count); + // Gets the approximate memory usage of this item. + size_t GetApproximateMemoryUsage() const; + private: // Fine grained states of a download. //
diff --git a/components/download/public/common/download_stats.h b/components/download/public/common/download_stats.h index ffafffa18..71e80da 100644 --- a/components/download/public/common/download_stats.h +++ b/components/download/public/common/download_stats.h
@@ -463,6 +463,12 @@ COMPONENTS_DOWNLOAD_EXPORT void RecordDownloadConnectionInfo( net::HttpResponseInfo::ConnectionInfo connection_info); +COMPONENTS_DOWNLOAD_EXPORT void RecordDownloadManagerCreationTimeSinceStartup( + base::TimeDelta elapsed_time); + +COMPONENTS_DOWNLOAD_EXPORT void RecordDownloadManagerMemoryUsage( + size_t bytes_used); + #if defined(OS_ANDROID) // Records the download interrupt reason for the first background download. // If |download_started| is true, this records the last interrupt reason
diff --git a/components/download/public/common/in_progress_download_manager.h b/components/download/public/common/in_progress_download_manager.h index e9462c1c..366dbe2e 100644 --- a/components/download/public/common/in_progress_download_manager.h +++ b/components/download/public/common/in_progress_download_manager.h
@@ -295,9 +295,6 @@ // Used to check if the URL is safe. URLSecurityPolicy url_security_policy_; - // Whether this object uses an empty database and no history will be saved. - bool use_empty_db_; - // Connector to the service manager. service_manager::Connector* connector_;
diff --git a/components/download/public/common/simple_download_manager_coordinator.h b/components/download/public/common/simple_download_manager_coordinator.h index a69e556..b56adef1 100644 --- a/components/download/public/common/simple_download_manager_coordinator.h +++ b/components/download/public/common/simple_download_manager_coordinator.h
@@ -12,6 +12,7 @@ #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" +#include "base/time/time.h" #include "components/download/public/common/download_export.h" #include "components/download/public/common/download_url_parameters.h" #include "components/download/public/common/simple_download_manager.h" @@ -46,7 +47,8 @@ using DownloadWhenFullManagerStartsCallBack = base::RepeatingCallback<void(std::unique_ptr<DownloadUrlParameters>)>; SimpleDownloadManagerCoordinator(const DownloadWhenFullManagerStartsCallBack& - download_when_full_manager_starts_cb); + download_when_full_manager_starts_cb, + bool record_full_download_manager_delay); ~SimpleDownloadManagerCoordinator() override; void AddObserver(Observer* observer); @@ -107,6 +109,9 @@ // Observers that want to be notified of changes to the set of downloads. base::ObserverList<Observer>::Unchecked observers_; + // Time when this object was created. + base::TimeTicks creation_time_ticks_; + base::WeakPtrFactory<SimpleDownloadManagerCoordinator> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(SimpleDownloadManagerCoordinator);
diff --git a/components/infobars/core/infobar.cc b/components/infobars/core/infobar.cc index eff4cfe..60e58f52 100644 --- a/components/infobars/core/infobar.cc +++ b/components/infobars/core/infobar.cc
@@ -24,8 +24,10 @@ target_height_(0) { DCHECK(delegate_ != nullptr); animation_.SetTweenType(gfx::Tween::LINEAR); - if (!gfx::Animation::ShouldRenderRichAnimation()) + if (!gfx::Animation::ShouldRenderRichAnimation() || + !delegate_->ShouldAnimate()) { animation_.SetSlideDuration(base::TimeDelta()); + } delegate_->set_infobar(this); }
diff --git a/components/infobars/core/infobar_delegate.cc b/components/infobars/core/infobar_delegate.cc index 52e5e42..8a9deef 100644 --- a/components/infobars/core/infobar_delegate.cc +++ b/components/infobars/core/infobar_delegate.cc
@@ -76,6 +76,10 @@ return true; } +bool InfoBarDelegate::ShouldAnimate() const { + return true; +} + ConfirmInfoBarDelegate* InfoBarDelegate::AsConfirmInfoBarDelegate() { return nullptr; }
diff --git a/components/infobars/core/infobar_delegate.h b/components/infobars/core/infobar_delegate.h index 1157bbc5..595ac64 100644 --- a/components/infobars/core/infobar_delegate.h +++ b/components/infobars/core/infobar_delegate.h
@@ -225,6 +225,10 @@ // Returns true if the InfoBar has a close button; true by default. virtual bool IsCloseable() const; + // Returns true if the InfoBar should animate when showing or hiding; true by + // default. + virtual bool ShouldAnimate() const; + // Type-checking downcast routines: virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate(); virtual HungRendererInfoBarDelegate* AsHungRendererInfoBarDelegate();
diff --git a/components/infobars/core/simple_alert_infobar_delegate.cc b/components/infobars/core/simple_alert_infobar_delegate.cc index a74326d6..bcfa8ca3 100644 --- a/components/infobars/core/simple_alert_infobar_delegate.cc +++ b/components/infobars/core/simple_alert_infobar_delegate.cc
@@ -16,24 +16,27 @@ infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier, const gfx::VectorIcon* vector_icon, const base::string16& message, - bool auto_expire) { + bool auto_expire, + bool should_animate) { infobar_manager->AddInfoBar(infobar_manager->CreateConfirmInfoBar( std::unique_ptr<ConfirmInfoBarDelegate>(new SimpleAlertInfoBarDelegate( - infobar_identifier, vector_icon, message, auto_expire)))); + infobar_identifier, vector_icon, message, auto_expire, + should_animate)))); } SimpleAlertInfoBarDelegate::SimpleAlertInfoBarDelegate( infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier, const gfx::VectorIcon* vector_icon, const base::string16& message, - bool auto_expire) + bool auto_expire, + bool should_animate) : infobar_identifier_(infobar_identifier), vector_icon_(vector_icon), message_(message), - auto_expire_(auto_expire) {} + auto_expire_(auto_expire), + should_animate_(should_animate) {} -SimpleAlertInfoBarDelegate::~SimpleAlertInfoBarDelegate() { -} +SimpleAlertInfoBarDelegate::~SimpleAlertInfoBarDelegate() = default; infobars::InfoBarDelegate::InfoBarIdentifier SimpleAlertInfoBarDelegate::GetIdentifier() const { @@ -49,6 +52,10 @@ return auto_expire_ && ConfirmInfoBarDelegate::ShouldExpire(details); } +bool SimpleAlertInfoBarDelegate::ShouldAnimate() const { + return should_animate_ && ConfirmInfoBarDelegate::ShouldAnimate(); +} + base::string16 SimpleAlertInfoBarDelegate::GetMessageText() const { return message_; }
diff --git a/components/infobars/core/simple_alert_infobar_delegate.h b/components/infobars/core/simple_alert_infobar_delegate.h index da98369..b5bac5f9 100644 --- a/components/infobars/core/simple_alert_infobar_delegate.h +++ b/components/infobars/core/simple_alert_infobar_delegate.h
@@ -28,20 +28,23 @@ infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier, const gfx::VectorIcon* vector_icon, const base::string16& message, - bool auto_expire); + bool auto_expire = true, + bool should_animate = true); private: SimpleAlertInfoBarDelegate( infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier, const gfx::VectorIcon* vector_icon, const base::string16& message, - bool auto_expire); + bool auto_expire, + bool should_animate); ~SimpleAlertInfoBarDelegate() override; // ConfirmInfoBarDelegate: infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override; const gfx::VectorIcon& GetVectorIcon() const override; bool ShouldExpire(const NavigationDetails& details) const override; + bool ShouldAnimate() const override; base::string16 GetMessageText() const override; int GetButtons() const override; @@ -49,6 +52,7 @@ const gfx::VectorIcon* vector_icon_; base::string16 message_; bool auto_expire_; // Should it expire automatically on navigation? + bool should_animate_; DISALLOW_COPY_AND_ASSIGN(SimpleAlertInfoBarDelegate); };
diff --git a/components/nacl/common/nacl.mojom b/components/nacl/common/nacl.mojom index 70b12869..a1d6e47 100644 --- a/components/nacl/common/nacl.mojom +++ b/components/nacl/common/nacl.mojom
@@ -18,7 +18,7 @@ [Sync] ReportLoadStatus(NaClErrorCode load_status) => (); - ProvideExitControl(NaClExitControl exit_control); + ProvideExitControl(pending_remote<NaClExitControl> exit_control); }; // When this interface is closed, it indicates that the NaCl loader process
diff --git a/components/nacl/loader/nacl_listener.cc b/components/nacl/loader/nacl_listener.cc index f78eeffe..083dd5aa 100644 --- a/components/nacl/loader/nacl_listener.cc +++ b/components/nacl/loader/nacl_listener.cc
@@ -36,6 +36,7 @@ #include "ipc/ipc_channel_handle.h" #include "ipc/ipc_sync_channel.h" #include "ipc/ipc_sync_message_filter.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "native_client/src/public/chrome_main.h" #include "native_client/src/public/nacl_app.h" #include "native_client/src/public/nacl_desc.h" @@ -332,10 +333,10 @@ base::Bind(&NaClListener::ResolveFileToken, base::Unretained(this)), base::Bind(&NaClListener::OnOpenResource, base::Unretained(this))); - nacl::mojom::NaClRendererHostPtr renderer_host; + mojo::PendingRemote<nacl::mojom::NaClRendererHost> renderer_host; if (!Send(new NaClProcessHostMsg_PpapiChannelsCreated( browser_handle, ppapi_renderer_handle, - MakeRequest(&renderer_host).PassMessagePipe().release(), + renderer_host.InitWithNewPipeAndPassReceiver().PassPipe().release(), manifest_service_handle, ro_shmem_region))) LOG(FATAL) << "Failed to send IPC channel handle to NaClProcessHost.";
diff --git a/components/nacl/loader/nacl_trusted_listener.cc b/components/nacl/loader/nacl_trusted_listener.cc index 4c8e659..c2c60b586 100644 --- a/components/nacl/loader/nacl_trusted_listener.cc +++ b/components/nacl/loader/nacl_trusted_listener.cc
@@ -10,7 +10,8 @@ #include "base/bind.h" #include "base/single_thread_task_runner.h" #include "build/build_config.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "native_client/src/public/chrome_main.h" namespace { @@ -36,24 +37,25 @@ } }; -void CreateExitControl(nacl::mojom::NaClExitControlRequest request) { - mojo::MakeStrongBinding(std::make_unique<NaClExitControlImpl>(), - std::move(request)); +void CreateExitControl( + mojo::PendingReceiver<nacl::mojom::NaClExitControl> receiver) { + mojo::MakeSelfOwnedReceiver(std::make_unique<NaClExitControlImpl>(), + std::move(receiver)); } } // namespace NaClTrustedListener::NaClTrustedListener( - nacl::mojom::NaClRendererHostPtr renderer_host, + mojo::PendingRemote<nacl::mojom::NaClRendererHost> renderer_host, base::SingleThreadTaskRunner* io_task_runner) : renderer_host_(std::move(renderer_host)) { - nacl::mojom::NaClExitControlPtr exit_control; + mojo::PendingRemote<nacl::mojom::NaClExitControl> exit_control; // The exit control binding must run on the IO thread. The main thread used // by NaClListener is busy in NaClChromeMainAppStart(), so it can't be used // for servicing messages. io_task_runner->PostTask( - FROM_HERE, - base::BindOnce(&CreateExitControl, mojo::MakeRequest(&exit_control))); + FROM_HERE, base::BindOnce(&CreateExitControl, + exit_control.InitWithNewPipeAndPassReceiver())); renderer_host_->ProvideExitControl(std::move(exit_control)); }
diff --git a/components/nacl/loader/nacl_trusted_listener.h b/components/nacl/loader/nacl_trusted_listener.h index 27a9b24..423076d 100644 --- a/components/nacl/loader/nacl_trusted_listener.h +++ b/components/nacl/loader/nacl_trusted_listener.h
@@ -7,6 +7,8 @@ #include "base/macros.h" #include "components/nacl/common/nacl.mojom.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" namespace base { class SingleThreadTaskRunner; @@ -14,8 +16,9 @@ class NaClTrustedListener { public: - NaClTrustedListener(nacl::mojom::NaClRendererHostPtr renderer_host, - base::SingleThreadTaskRunner* io_task_runner); + NaClTrustedListener( + mojo::PendingRemote<nacl::mojom::NaClRendererHost> renderer_host, + base::SingleThreadTaskRunner* io_task_runner); ~NaClTrustedListener(); nacl::mojom::NaClRendererHost* renderer_host() { @@ -23,7 +26,7 @@ } private: - nacl::mojom::NaClRendererHostPtr renderer_host_; + mojo::Remote<nacl::mojom::NaClRendererHost> renderer_host_; DISALLOW_COPY_AND_ASSIGN(NaClTrustedListener); };
diff --git a/components/nacl/loader/nonsfi/nonsfi_listener.cc b/components/nacl/loader/nonsfi/nonsfi_listener.cc index b6ca289..e0041901 100644 --- a/components/nacl/loader/nonsfi/nonsfi_listener.cc +++ b/components/nacl/loader/nonsfi/nonsfi_listener.cc
@@ -24,6 +24,7 @@ #include "ipc/ipc_channel.h" #include "ipc/ipc_channel_handle.h" #include "ipc/ipc_sync_channel.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "native_client/src/public/nonsfi/irt_random.h" #include "ppapi/nacl_irt/irt_manifest.h" #include "ppapi/nacl_irt/plugin_startup.h" @@ -106,10 +107,10 @@ ppapi::StartUpPlugin(); trusted_listener_ = std::make_unique<NaClTrustedListener>( - mojo::MakeProxy(nacl::mojom::NaClRendererHostPtrInfo( + mojo::PendingRemote<nacl::mojom::NaClRendererHost>( mojo::ScopedMessagePipeHandle( params.trusted_service_channel_handle.mojo_handle), - nacl::mojom::NaClRendererHost::Version_)), + nacl::mojom::NaClRendererHost::Version_), io_thread_.task_runner().get()); // Ensure that the validation cache key (used as an extra input to the
diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc index 7e516c5..4b8e01d 100644 --- a/components/nacl/renderer/ppb_nacl_private_impl.cc +++ b/components/nacl/renderer/ppb_nacl_private_impl.cc
@@ -51,6 +51,7 @@ #include "content/public/renderer/render_thread.h" #include "content/public/renderer/render_view.h" #include "content/public/renderer/renderer_ppapi_host.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "net/base/data_url.h" #include "net/base/net_errors.h" #include "net/http/http_util.h" @@ -533,8 +534,9 @@ std::unique_ptr<TrustedPluginChannel> trusted_plugin_channel( new TrustedPluginChannel( load_manager, - mojom::NaClRendererHostRequest(mojo::ScopedMessagePipeHandle( - launch_result.trusted_ipc_channel_handle.mojo_handle)), + mojo::PendingReceiver<mojom::NaClRendererHost>( + mojo::ScopedMessagePipeHandle( + launch_result.trusted_ipc_channel_handle.mojo_handle)), is_helper_nexe)); load_manager->set_trusted_plugin_channel(std::move(trusted_plugin_channel));
diff --git a/components/nacl/renderer/trusted_plugin_channel.cc b/components/nacl/renderer/trusted_plugin_channel.cc index ff851da..d2bb3e0 100644 --- a/components/nacl/renderer/trusted_plugin_channel.cc +++ b/components/nacl/renderer/trusted_plugin_channel.cc
@@ -16,12 +16,12 @@ TrustedPluginChannel::TrustedPluginChannel( NexeLoadManager* nexe_load_manager, - mojom::NaClRendererHostRequest request, + mojo::PendingReceiver<mojom::NaClRendererHost> receiver, bool is_helper_nexe) : nexe_load_manager_(nexe_load_manager), - binding_(this, std::move(request)), + receiver_(this, std::move(receiver)), is_helper_nexe_(is_helper_nexe) { - binding_.set_connection_error_handler(base::BindOnce( + receiver_.set_disconnect_handler(base::BindOnce( &TrustedPluginChannel::OnChannelError, base::Unretained(this))); } @@ -64,8 +64,8 @@ } void TrustedPluginChannel::ProvideExitControl( - mojom::NaClExitControlPtr exit_control) { - exit_control_ = std::move(exit_control); + mojo::PendingRemote<mojom::NaClExitControl> exit_control) { + exit_control_.Bind(std::move(exit_control)); } } // namespace nacl
diff --git a/components/nacl/renderer/trusted_plugin_channel.h b/components/nacl/renderer/trusted_plugin_channel.h index f562f89..4353829 100644 --- a/components/nacl/renderer/trusted_plugin_channel.h +++ b/components/nacl/renderer/trusted_plugin_channel.h
@@ -10,7 +10,10 @@ #include "base/callback.h" #include "base/macros.h" #include "components/nacl/common/nacl.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "native_client/src/trusted/service_runtime/nacl_error_code.h" #include "ppapi/c/pp_instance.h" @@ -20,7 +23,7 @@ class TrustedPluginChannel : public mojom::NaClRendererHost { public: TrustedPluginChannel(NexeLoadManager* nexe_load_manager, - mojom::NaClRendererHostRequest request, + mojo::PendingReceiver<mojom::NaClRendererHost> receiver, bool is_helper_nexe); ~TrustedPluginChannel() override; @@ -32,13 +35,14 @@ ReportExitStatusCallback callback) override; void ReportLoadStatus(NaClErrorCode load_status, ReportLoadStatusCallback callback) override; - void ProvideExitControl(mojom::NaClExitControlPtr exit_control) override; + void ProvideExitControl( + mojo::PendingRemote<mojom::NaClExitControl> exit_control) override; // Non-owning pointer. This is safe because the TrustedPluginChannel is owned // by the NexeLoadManager pointed to here. NexeLoadManager* nexe_load_manager_; - mojo::Binding<mojom::NaClRendererHost> binding_; - mojom::NaClExitControlPtr exit_control_; + mojo::Receiver<mojom::NaClRendererHost> receiver_; + mojo::Remote<mojom::NaClExitControl> exit_control_; const bool is_helper_nexe_; DISALLOW_COPY_AND_ASSIGN(TrustedPluginChannel);
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc index dda1553c..e91d237 100644 --- a/components/omnibox/common/omnibox_features.cc +++ b/components/omnibox/common/omnibox_features.cc
@@ -224,14 +224,6 @@ #endif }; -// Shows the "Search Google or type a URL" omnibox placeholder even when the -// caret (text edit cursor) is showing / when focused. views::Textfield works -// this way, as does <input placeholder="">. Omnibox and the NTP's "fakebox" -// are exceptions in this regard and this experiment makes this more consistent. -const base::Feature kUIExperimentShowPlaceholderWhenCaretShowing{ - "OmniboxUIExperimentShowPlaceholderWhenCaretShowing", - base::FEATURE_DISABLED_BY_DEFAULT}; - // Feature used to enable speculatively starting a service worker associated // with the destination of the default match when the user's input looks like a // query.
diff --git a/components/omnibox/common/omnibox_features.h b/components/omnibox/common/omnibox_features.h index adecab80..9d84320 100644 --- a/components/omnibox/common/omnibox_features.h +++ b/components/omnibox/common/omnibox_features.h
@@ -38,7 +38,6 @@ extern const base::Feature kUIExperimentMaxAutocompleteMatches; extern const base::Feature kUIExperimentShowSuggestionFavicons; extern const base::Feature kUIExperimentSwapTitleAndUrl; -extern const base::Feature kUIExperimentShowPlaceholderWhenCaretShowing; extern const base::Feature kSpeculativeServiceWorkerStartOnQueryInput; extern const base::Feature kDocumentProvider; extern const base::Feature kOnDeviceHeadProvider;
diff --git a/components/viz/common/frame_timing_details.h b/components/viz/common/frame_timing_details.h index e07e7f8b..3b59b23 100644 --- a/components/viz/common/frame_timing_details.h +++ b/components/viz/common/frame_timing_details.h
@@ -6,13 +6,15 @@ #define COMPONENTS_VIZ_COMMON_FRAME_TIMING_DETAILS_H_ #include "ui/gfx/presentation_feedback.h" +#include "ui/gfx/swap_result.h" namespace viz { struct FrameTimingDetails { - gfx::PresentationFeedback presentation_feedback; base::TimeTicks received_compositor_frame_timestamp; base::TimeTicks draw_start_timestamp; + gfx::SwapTimings swap_timings; + gfx::PresentationFeedback presentation_feedback; }; } // namespace viz
diff --git a/components/viz/service/display/DEPS b/components/viz/service/display/DEPS index 6acca63..ed57e8e 100644 --- a/components/viz/service/display/DEPS +++ b/components/viz/service/display/DEPS
@@ -30,6 +30,7 @@ "+ui/gl/trace_util.h", "+gpu/ipc/common/vulkan_ycbcr_info.h", "+gpu/ipc/scheduler_sequence.h", + "+gpu/config/gpu_driver_bug_workaround_type.h", ] specific_include_rules = {
diff --git a/components/viz/service/display/bsp_tree_perftest.cc b/components/viz/service/display/bsp_tree_perftest.cc index 8b6aad0..b56ee569 100644 --- a/components/viz/service/display/bsp_tree_perftest.cc +++ b/components/viz/service/display/bsp_tree_perftest.cc
@@ -20,7 +20,6 @@ #include "cc/test/fake_layer_tree_host_client.h" #include "cc/test/layer_tree_json_parser.h" #include "cc/test/layer_tree_test.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/transform_node.h" #include "components/viz/service/display/bsp_tree.h" @@ -72,11 +71,10 @@ cc::LayerTreeImpl* active_tree = host_impl->active_tree(); // First build the tree and then we'll start running tests on layersorter // itself - int max_texture_size = 8096; - DoCalcDrawPropertiesImpl(max_texture_size, active_tree, host_impl); + host_impl->active_tree()->UpdateDrawProperties(); cc::LayerImplList base_list; - BuildLayerImplList(active_tree->root_layer_for_testing(), &base_list); + BuildLayerImplList(active_tree->root_layer(), &base_list); int polygon_counter = 0; std::vector<std::unique_ptr<DrawPolygon>> polygon_list; @@ -102,26 +100,6 @@ EndTest(); } - void DoCalcDrawPropertiesImpl(int max_texture_size, - cc::LayerTreeImpl* active_tree, - cc::LayerTreeHostImpl* host_impl) { - cc::RenderSurfaceList update_list; - cc::LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( - active_tree->root_layer_for_testing(), active_tree->GetDeviceViewport(), - host_impl->DrawTransform(), active_tree->device_scale_factor(), - active_tree->current_page_scale_factor(), - active_tree->InnerViewportContainerLayer(), - active_tree->InnerViewportScrollLayer(), - active_tree->OuterViewportScrollLayer(), - active_tree->elastic_overscroll()->Current(active_tree->IsActiveTree()), - active_tree->OverscrollElasticityElementId(), max_texture_size, - &update_list, active_tree->property_trees(), - active_tree->property_trees()->transform_tree.Node( - active_tree->InnerViewportContainerLayer() - ->transform_tree_index())); - cc::LayerTreeHostCommon::CalculateDrawProperties(&inputs); - } - void BuildLayerImplList(cc::LayerImpl* layer, cc::LayerImplList* list) { for (auto* layer_impl : *layer->layer_tree_impl()) { if (layer_impl->Is3dSorted() && !layer_impl->bounds().IsEmpty()) {
diff --git a/components/viz/service/display/dc_layer_overlay.cc b/components/viz/service/display/dc_layer_overlay.cc index 9a337fb..7362219 100644 --- a/components/viz/service/display/dc_layer_overlay.cc +++ b/components/viz/service/display/dc_layer_overlay.cc
@@ -645,11 +645,12 @@ // SrcOver_quad uses opacity of source quad (V_alpha) // SrcOver_premul uses alpha channel and assumes premultipled alpha bool is_opaque = false; + SharedQuadState* new_shared_quad_state = + render_pass->shared_quad_state_list.AllocateAndCopyFrom( + shared_quad_state); + if (it->ShouldDrawWithBlending() && shared_quad_state->blend_mode == SkBlendMode::kSrcOver) { - SharedQuadState* new_shared_quad_state = - render_pass->shared_quad_state_list.AllocateAndCopyFrom( - shared_quad_state); new_shared_quad_state->blend_mode = SkBlendMode::kDstOut; auto* replacement = @@ -659,6 +660,11 @@ replacement->SetAll(new_shared_quad_state, rect, rect, needs_blending, SK_ColorBLACK, true /* force_anti_aliasing_off */); } else { + // Set |are_contents_opaque| true so SkiaRenderer draws the replacement quad + // with SkBlendMode::kSrc. + new_shared_quad_state->are_contents_opaque = false; + it->shared_quad_state = new_shared_quad_state; + // When the opacity == 1.0, drawing with transparent will be done without // blending and will have the proper effect of completely clearing the // layer.
diff --git a/components/viz/service/display/dc_layer_overlay.h b/components/viz/service/display/dc_layer_overlay.h index 9e88a2b..99e37e2 100644 --- a/components/viz/service/display/dc_layer_overlay.h +++ b/components/viz/service/display/dc_layer_overlay.h
@@ -5,11 +5,14 @@ #ifndef COMPONENTS_VIZ_SERVICE_DISPLAY_DC_LAYER_OVERLAY_H_ #define COMPONENTS_VIZ_SERVICE_DISPLAY_DC_LAYER_OVERLAY_H_ +#include <vector> + #include "base/containers/flat_map.h" #include "base/memory/ref_counted.h" #include "components/viz/common/quads/render_pass.h" #include "components/viz/service/display/output_surface.h" #include "components/viz/service/viz_service_export.h" +#include "gpu/command_buffer/common/mailbox.h" #include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkMatrix44.h" #include "ui/gfx/geometry/rect_f.h" @@ -42,6 +45,10 @@ enum : size_t { kNumResources = 2 }; ResourceId resources[kNumResources] = {kInvalidResourceId}; + // Mailboxes corresponding to |resources|. This is populated in SkiaRenderer + // for accessing the textures on the GPU thread. + gpu::Mailbox mailbox[kNumResources]; + // Stacking order relative to backbuffer which has z-order 0. int z_order = 1;
diff --git a/components/viz/service/display/display.cc b/components/viz/service/display/display.cc index ec38206c..a634bc9 100644 --- a/components/viz/service/display/display.cc +++ b/components/viz/service/display/display.cc
@@ -131,6 +131,37 @@ constexpr base::TimeDelta Display::kDrawToSwapMin; constexpr base::TimeDelta Display::kDrawToSwapMax; +Display::PresentationGroupTiming::PresentationGroupTiming( + base::TimeTicks draw_and_swap_triggered_timestamp) + : draw_and_swap_triggered_timestamp_(draw_and_swap_triggered_timestamp) {} + +Display::PresentationGroupTiming::PresentationGroupTiming( + Display::PresentationGroupTiming&& other) = default; + +Display::PresentationGroupTiming::~PresentationGroupTiming() = default; + +void Display::PresentationGroupTiming::AddPresentationHelper( + std::unique_ptr<Surface::PresentationHelper> helper) { + presentation_helpers_.push_back(std::move(helper)); +} + +void Display::PresentationGroupTiming::OnDraw( + base::TimeTicks draw_start_timestamp) { + draw_start_timestamp_ = draw_start_timestamp; +} + +void Display::PresentationGroupTiming::OnSwap(gfx::SwapTimings timings) { + swap_timings_ = timings; +} + +void Display::PresentationGroupTiming::OnPresent( + const gfx::PresentationFeedback& feedback) { + for (auto& presentation_helper : presentation_helpers_) { + presentation_helper->DidPresent(draw_start_timestamp_, swap_timings_, + feedback); + } +} + Display::Display( SharedBitmapManager* bitmap_manager, const RendererSettings& settings, @@ -177,7 +208,7 @@ // Send gfx::PresentationFeedback::Failure() to any surfaces expecting // feedback. - pending_surfaces_with_presentation_helpers_.clear(); + pending_presentation_group_timings_.clear(); // Only do this if Initialize() happened. if (client_) { @@ -549,21 +580,21 @@ draw_timer->Elapsed().InMicroseconds()); } - std::vector<std::unique_ptr<Surface::PresentationHelper>> - presentation_helper_list; + PresentationGroupTiming presentation_group_timing(now_time); + presentation_group_timing.OnDraw(draw_timer->Begin()); + for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { Surface* surface = surface_manager_->GetSurfaceForId(id_entry.first); if (surface) { std::unique_ptr<Surface::PresentationHelper> helper = surface->TakePresentationHelperForPresentNotification(); if (helper) { - surface->OnWasDrawn(helper->frame_token(), draw_timer->Begin()); - presentation_helper_list.push_back(std::move(helper)); + presentation_group_timing.AddPresentationHelper(std::move(helper)); } } } - pending_surfaces_with_presentation_helpers_.emplace_back( - std::make_pair(now_time, std::move(presentation_helper_list))); + pending_presentation_group_timings_.emplace_back( + std::move(presentation_group_timing)); } else { TRACE_EVENT_INSTANT0("viz", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD); } @@ -645,19 +676,32 @@ if (renderer_) renderer_->SwapBuffersComplete(); - // Adding to pending_presented_callbacks_ must have been done in DrawAndSwap, - // and should not be popped until DidReceivePresentationFeedback. Therefore - // we must not have an empty list when getting the SwapBuffers ACK (this is - // required to happen between those two events). - DCHECK(!pending_surfaces_with_presentation_helpers_.empty()); + // Adding to |pending_presentation_group_timings_| must + // have been done in DrawAndSwap(), and should not be popped until + // DidReceiveSwapBuffersAck. + DCHECK(!pending_presentation_group_timings_.empty()); + + // It's possible to receive multiple calls to DidReceiveSwapBuffersAck() + // before DidReceivePresentationFeedback(). Ensure that we're not setting + // |swap_timings_| for the same PresentationGroupTiming multiple times. + base::TimeTicks draw_and_swap_triggered_timestamp; + for (auto& group_timing : pending_presentation_group_timings_) { + if (!group_timing.HasSwapped()) { + group_timing.OnSwap(timings); + draw_and_swap_triggered_timestamp = + group_timing.draw_and_swap_triggered_timestamp(); + break; + } + } + + // We should have at least one group that hasn't received a SwapBuffersAck + DCHECK(!draw_and_swap_triggered_timestamp.is_null()); // Check that the swap timings correspond with the timestamp from when // the swap was triggered. Note that not all output surfaces provide timing // information, hence the check for a valid swap_start. - const auto swap_time = - pending_surfaces_with_presentation_helpers_.front().first; if (!timings.swap_start.is_null()) { - DCHECK_LE(swap_time, timings.swap_start); + DCHECK_LE(draw_and_swap_triggered_timestamp, timings.swap_start); base::TimeDelta delta = timings.swap_start - draw_start_times_pending_swap_ack_.front(); UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( @@ -686,7 +730,7 @@ void Display::DidReceivePresentationFeedback( const gfx::PresentationFeedback& feedback) { - if (pending_surfaces_with_presentation_helpers_.empty()) { + if (pending_presentation_group_timings_.empty()) { DLOG(ERROR) << "Received unexpected PresentationFeedback"; return; } @@ -694,18 +738,14 @@ TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP0( "viz,benchmark", "Graphics.Pipeline.DrawAndSwap", last_presented_trace_id_, feedback.timestamp); - auto& presentation_helper_list = - pending_surfaces_with_presentation_helpers_.front().second; - const auto swap_time = - pending_surfaces_with_presentation_helpers_.front().first; - auto copy_feedback = SanitizePresentationFeedback(feedback, swap_time); + auto& presentation_group_timing = pending_presentation_group_timings_.front(); + auto copy_feedback = SanitizePresentationFeedback( + feedback, presentation_group_timing.draw_and_swap_triggered_timestamp()); TRACE_EVENT_INSTANT_WITH_TIMESTAMP0( "benchmark,viz", "Display::FrameDisplayed", TRACE_EVENT_SCOPE_THREAD, copy_feedback.timestamp); - for (auto& presentation_helper : presentation_helper_list) { - presentation_helper->DidPresent(copy_feedback); - } - pending_surfaces_with_presentation_helpers_.pop_front(); + presentation_group_timing.OnPresent(copy_feedback); + pending_presentation_group_timings_.pop_front(); } void Display::DidFinishLatencyInfo(
diff --git a/components/viz/service/display/display.h b/components/viz/service/display/display.h index 0457cb3..d1b2bbb9 100644 --- a/components/viz/service/display/display.h +++ b/components/viz/service/display/display.h
@@ -31,6 +31,7 @@ #include "components/viz/service/viz_service_export.h" #include "gpu/command_buffer/common/texture_in_use_response.h" #include "ui/gfx/color_space.h" +#include "ui/gfx/swap_result.h" #include "ui/latency/latency_info.h" namespace gfx { @@ -178,6 +179,39 @@ bool IsRootFrameMissing() const; private: + // PresentationGroupTiming stores rendering pipeline stage timings associated + // with a call to Display::DrawAndSwap along with a list of + // Surface::PresentationHelper's for each aggregated Surface that will be + // presented. + class PresentationGroupTiming { + public: + explicit PresentationGroupTiming(base::TimeTicks swap_triggered_timestamp); + PresentationGroupTiming(PresentationGroupTiming&& other); + ~PresentationGroupTiming(); + + void AddPresentationHelper( + std::unique_ptr<Surface::PresentationHelper> helper); + void OnDraw(base::TimeTicks draw_start_timestamp); + void OnSwap(gfx::SwapTimings timings); + bool HasSwapped() const { return !swap_timings_.is_null(); } + void OnPresent(const gfx::PresentationFeedback& feedback); + + base::TimeTicks draw_and_swap_triggered_timestamp() const { + return draw_and_swap_triggered_timestamp_; + } + + private: + // Not currently tracked by metrics but is used for + // SanitizePresentationFeedback() + base::TimeTicks draw_and_swap_triggered_timestamp_; + base::TimeTicks draw_start_timestamp_; + gfx::SwapTimings swap_timings_; + std::vector<std::unique_ptr<Surface::PresentationHelper>> + presentation_helpers_; + + DISALLOW_COPY_AND_ASSIGN(PresentationGroupTiming); + }; + // TODO(cblume, crbug.com/900973): |enable_shared_images| is a temporary // solution that unblocks us until SharedImages are threadsafe in WebView. void InitializeRenderer(bool enable_shared_images = true); @@ -220,14 +254,11 @@ std::vector<ui::LatencyInfo> stored_latency_info_; std::vector<SurfaceId> surfaces_to_ack_on_next_draw_; - // |pending_surfaces_with_presentation_helpers_| is a list of lists of - // Surface::PresentationHelpers. The lists are grouped by swap (each surface - // involved in an individual Swap is added to the list. These are then - // notified of presentation after the appropriate Swap is completed. - base::circular_deque< - std::pair<base::TimeTicks, - std::vector<std::unique_ptr<Surface::PresentationHelper>>>> - pending_surfaces_with_presentation_helpers_; + // |pending_presentation_group_timings_| stores a + // Display::PresentationGroupTiming for each group currently waiting for + // Display::DidReceivePresentationFeedack() + base::circular_deque<Display::PresentationGroupTiming> + pending_presentation_group_timings_; // Callback that will be run after all pending swaps have acked. base::OnceClosure no_pending_swaps_callback_; @@ -235,6 +266,8 @@ int64_t swapped_trace_id_ = 0; int64_t last_presented_trace_id_ = 0; + // TODO(nazabris, crbug.com/1003892): remove this member now that + // PresentationGroupTiming stores the same info. base::circular_deque<base::TimeTicks> draw_start_times_pending_swap_ack_; DISALLOW_COPY_AND_ASSIGN(Display);
diff --git a/components/viz/service/display/display_unittest.cc b/components/viz/service/display/display_unittest.cc index 94d630c3..68e9fad 100644 --- a/components/viz/service/display/display_unittest.cc +++ b/components/viz/service/display/display_unittest.cc
@@ -116,6 +116,11 @@ *called = true; } +gfx::SwapTimings GetTestSwapTimings() { + base::TimeTicks now = base::TimeTicks::Now(); + return gfx::SwapTimings{now, now}; +} + } // namespace class DisplayTest : public testing::Test { @@ -3637,6 +3642,7 @@ .Build(); support_->SubmitCompositorFrame(local_surface_id, std::move(frame)); display_->DrawAndSwap(); + display_->DidReceiveSwapBuffersAck(GetTestSwapTimings()); display_->DidReceivePresentationFeedback({base::TimeTicks::Now(), {}, 0}); EXPECT_THAT(histograms.GetAllSamples( "Graphics.PresentationTimestamp.InvalidBeforeSwap"), @@ -3655,6 +3661,7 @@ .Build(); support_->SubmitCompositorFrame(local_surface_id, std::move(frame)); display_->DrawAndSwap(); + display_->DidReceiveSwapBuffersAck(GetTestSwapTimings()); display_->DidReceivePresentationFeedback( {base::TimeTicks::Now() - base::TimeDelta::FromSeconds(1), {}, 0}); EXPECT_THAT(histograms.GetAllSamples( @@ -3677,6 +3684,7 @@ .Build(); support_->SubmitCompositorFrame(local_surface_id, std::move(frame)); display_->DrawAndSwap(); + display_->DidReceiveSwapBuffersAck(GetTestSwapTimings()); display_->DidReceivePresentationFeedback( {base::TimeTicks::Now() + base::TimeDelta::FromSeconds(1), {}, 0}); EXPECT_THAT(histograms.GetAllSamples(
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc index e138b733..6492ff14 100644 --- a/components/viz/service/display/gl_renderer.cc +++ b/components/viz/service/display/gl_renderer.cc
@@ -59,6 +59,8 @@ #include "gpu/command_buffer/client/context_support.h" #include "gpu/command_buffer/client/gles2_interface.h" #include "gpu/command_buffer/common/gpu_memory_allocation.h" +#include "gpu/config/gpu_driver_bug_workaround_type.h" +#include "gpu/config/gpu_feature_info.h" #include "media/base/media_switches.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkColor.h" @@ -367,7 +369,9 @@ context_caps.blend_equation_advanced_coherent; use_occlusion_query_ = context_caps.occlusion_query; use_swap_with_bounds_ = context_caps.swap_buffers_with_bounds; - + prefer_draw_to_copy_ = output_surface_->context_provider() + ->GetGpuFeatureInfo() + .IsWorkaroundEnabled(gpu::PREFER_DRAW_TO_COPY); InitializeSharedObjects(); } @@ -848,16 +852,42 @@ gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - *internal_format = GetFramebufferCopyTextureFormat(); - // CopyTexImage2D requires inernalformat channels to be a subset of - // the channels of the source texture internalformat. - DCHECK(*internal_format == GL_RGB || *internal_format == GL_RGBA || - *internal_format == GL_BGRA_EXT); - if (*internal_format == GL_BGRA_EXT) - *internal_format = GL_RGBA; - gl_->CopyTexImage2D(GL_TEXTURE_2D, 0, *internal_format, window_rect.x(), - window_rect.y(), window_rect.width(), - window_rect.height(), 0); + // If there is a source texture |current_framebuffer_texture_| and the + // workaround |prefer_draw_to_copy_| is enabled, then do texture to texture + // copy via draw instead of glCopyTexImage2D. + if (prefer_draw_to_copy_ && current_framebuffer_texture_) { + // Copying from a non-root renderpass, so will use the format of the bound + // texture. + ResourceFormat resource_format = BackbufferFormat(); + + // Get gl_format, gl_type and internal_format. + DCHECK(GLSupportsFormat(resource_format)); + *internal_format = GLInternalFormat(resource_format); + GLenum gl_format = GLDataFormat(resource_format); + GLenum gl_type = GLDataType(resource_format); + + // Size the destination texture with empty data. This is required since + // CopySubTextureCHROMIUM() does not sizes the texture but CopyTexImage2D + // does. + gl_->TexImage2D(GL_TEXTURE_2D, 0, *internal_format, window_rect.width(), + window_rect.height(), 0, gl_format, gl_type, nullptr); + gl_->CopySubTextureCHROMIUM( + current_framebuffer_texture_->id(), 0, GL_TEXTURE_2D, texture_id, 0, 0, + 0, window_rect.x(), window_rect.y(), window_rect.width(), + window_rect.height(), GL_FALSE, GL_FALSE, GL_FALSE); + } else { + *internal_format = GetFramebufferCopyTextureFormat(); + + // CopyTexImage2D requires inernalformat channels to be a subset of + // the channels of the source texture internalformat. + DCHECK(*internal_format == GL_RGB || *internal_format == GL_RGBA || + *internal_format == GL_BGRA_EXT); + if (*internal_format == GL_BGRA_EXT) + *internal_format = GL_RGBA; + gl_->CopyTexImage2D(GL_TEXTURE_2D, 0, *internal_format, window_rect.x(), + window_rect.y(), window_rect.width(), + window_rect.height(), 0); + } gl_->BindTexture(GL_TEXTURE_2D, 0); return texture_id; }
diff --git a/components/viz/service/display/gl_renderer.h b/components/viz/service/display/gl_renderer.h index 4e79bab..2ef26fff 100644 --- a/components/viz/service/display/gl_renderer.h +++ b/components/viz/service/display/gl_renderer.h
@@ -426,6 +426,7 @@ gfx::Size offscreen_stencil_renderbuffer_size_; unsigned num_triangles_drawn_ = 0; + bool prefer_draw_to_copy_ = false; // This may be null if the compositor is run on a thread without a // MessageLoop.
diff --git a/components/viz/service/display/skia_output_surface.h b/components/viz/service/display/skia_output_surface.h index 0a004d6..690522d1 100644 --- a/components/viz/service/display/skia_output_surface.h +++ b/components/viz/service/display/skia_output_surface.h
@@ -26,6 +26,7 @@ class ContextLostObserver; class CopyOutputRequest; +class DCLayerOverlay; namespace copy_output { struct RenderPassGeometry; @@ -73,8 +74,11 @@ sk_sp<SkColorSpace> dst_color_space, bool has_alpha) = 0; - // Swaps the current backbuffer to the screen. - virtual void SkiaSwapBuffers(OutputSurfaceFrame frame) = 0; + // Swaps the current backbuffer to the screen. This method returns a non-empty + // sync token which can be waited on to ensure swap is complete if + // |wants_sync_token| is true. + virtual gpu::SyncToken SkiaSwapBuffers(OutputSurfaceFrame frame, + bool wants_sync_token) = 0; // TODO(weiliangc): This API should move to OverlayProcessor. // Schedule |output_surface_plane| as an overlay plane to be displayed. @@ -125,6 +129,13 @@ const gfx::ColorSpace& color_space, std::unique_ptr<CopyOutputRequest> request) = 0; + // Enables/disables drawing with DC layers. Should be enabled before + // ScheduleDCLayers() will be called. + virtual void SetEnableDCLayers(bool enable) = 0; + + // Schedule drawing DC layer overlays at next SkiaSwapBuffers() call. + virtual void ScheduleDCLayers(std::vector<DCLayerOverlay> dc_layers) = 0; + // Add context lost observer. virtual void AddContextLostObserver(ContextLostObserver* observer) = 0;
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index 9096789..b34d2f6 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -30,12 +30,14 @@ #include "components/viz/common/resources/platform_color.h" #include "components/viz/common/resources/resource_format_utils.h" #include "components/viz/common/skia_helper.h" +#include "components/viz/service/display/display_resource_provider.h" #include "components/viz/service/display/output_surface.h" #include "components/viz/service/display/output_surface_frame.h" #include "components/viz/service/display/renderer_utils.h" #include "components/viz/service/display/resource_fence.h" #include "components/viz/service/display/skia_output_surface.h" #include "gpu/command_buffer/client/gles2_interface.h" +#include "gpu/command_buffer/common/sync_token.h" #include "skia/ext/opacity_filter_canvas.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkColor.h" @@ -704,9 +706,13 @@ swap_content_bounds_ = current_frame()->root_content_bounds; // TODO(weiliangc): Remove this once OverlayProcessor schedules overlays. - if (current_frame()->output_surface_plane) + if (current_frame()->output_surface_plane) { skia_output_surface_->ScheduleOutputSurfaceAsOverlay( current_frame()->output_surface_plane.value()); + } + + // Schedule overlay planes to be presented before SwapBuffers(). + ScheduleDCLayers(); } void SkiaRenderer::SwapBuffers(std::vector<ui::LatencyInfo> latency_info) { @@ -726,7 +732,10 @@ switch (draw_mode_) { case DrawMode::DDL: { - skia_output_surface_->SkiaSwapBuffers(std::move(output_frame)); + gpu::SyncToken sync_token = skia_output_surface_->SkiaSwapBuffers( + std::move(output_frame), has_locked_overlay_resources_); + if (has_locked_overlay_resources_) + lock_set_for_external_use_->UnlockResources(sync_token); break; } case DrawMode::SKPRECORD: { @@ -1522,6 +1531,29 @@ #endif } +void SkiaRenderer::ScheduleDCLayers() { + if (current_frame()->dc_layer_overlay_list.empty()) + return; + + for (auto& dc_layer_overlay : current_frame()->dc_layer_overlay_list) { + for (size_t i = 0; i < DCLayerOverlay::kNumResources; ++i) { + ResourceId resource_id = dc_layer_overlay.resources[i]; + if (resource_id == kInvalidResourceId) + break; + + // Resources will be unlocked after the next call to SwapBuffers(). + auto* image_context = + lock_set_for_external_use_->LockResource(resource_id, true); + dc_layer_overlay.mailbox[i] = image_context->mailbox_holder().mailbox; + } + DCHECK(!dc_layer_overlay.mailbox[0].IsZero()); + } + + has_locked_overlay_resources_ = true; + skia_output_surface_->ScheduleDCLayers( + std::move(current_frame()->dc_layer_overlay_list)); +} + sk_sp<SkColorFilter> SkiaRenderer::GetColorFilter(const gfx::ColorSpace& src, const gfx::ColorSpace& dst, float resource_offset, @@ -1913,8 +1945,7 @@ } void SkiaRenderer::SetEnableDCLayers(bool enable) { - // TODO(crbug.com/678800): Part of surport overlay on Windows. - NOTIMPLEMENTED(); + skia_output_surface_->SetEnableDCLayers(enable); } void SkiaRenderer::DidChangeVisibility() {
diff --git a/components/viz/service/display/skia_renderer.h b/components/viz/service/display/skia_renderer.h index 63f2435..4867116 100644 --- a/components/viz/service/display/skia_renderer.h +++ b/components/viz/service/display/skia_renderer.h
@@ -160,6 +160,9 @@ void DrawYUVVideoQuad(const YUVVideoDrawQuad* quad, DrawQuadParams* params); void DrawUnsupportedQuad(const DrawQuad* quad, DrawQuadParams* params); + // Schedule overlay candidates for presentation at next SwapBuffers(). + void ScheduleDCLayers(); + const TileDrawQuad* CanPassBeDrawnDirectly(const RenderPass* pass) override; // Get corresponding GrContext. Returns nullptr when there is no GrContext. @@ -253,6 +256,8 @@ base::Optional<DisplayResourceProvider::LockSetForExternalUse> lock_set_for_external_use_; + bool has_locked_overlay_resources_ = false; + // Specific for SkPRecord. std::unique_ptr<SkPictureRecorder> root_recorder_; sk_sp<SkPicture> root_picture_;
diff --git a/components/viz/service/display_embedder/DEPS b/components/viz/service/display_embedder/DEPS index af3d14b..1a1f4982 100644 --- a/components/viz/service/display_embedder/DEPS +++ b/components/viz/service/display_embedder/DEPS
@@ -5,6 +5,8 @@ "+cc/output", "+cc/resources", "+cc/scheduler", + "+components/viz/common", + "+components/viz/service/display/dc_layer_overlay.h", "+components/viz/service/display/external_use_client.h", "+components/viz/service/display/output_surface_client.h", "+components/viz/service/display/output_surface_frame.h", @@ -15,14 +17,13 @@ "+components/viz/service/display/shared_bitmap_manager.h", "+components/viz/service/display/skia_output_surface.h", "+components/viz/service/display/software_output_device.h", - "+components/viz/common", - "+gpu/config/gpu_feature_info.h", "+components/viz/service/gl/gpu_service_impl.h", - "+gpu/GLES2", "+gpu/command_buffer/client", "+gpu/command_buffer/common", "+gpu/command_buffer/service", "+gpu/config", + "+gpu/config/gpu_feature_info.h", + "+gpu/GLES2", "+gpu/ipc", "+gpu/skia_bindings", "+gpu/vulkan",
diff --git a/components/viz/service/display_embedder/skia_output_device.cc b/components/viz/service/display_embedder/skia_output_device.cc index 7d59ade..a33e9f1 100644 --- a/components/viz/service/display_embedder/skia_output_device.cc +++ b/components/viz/service/display_embedder/skia_output_device.cc
@@ -6,6 +6,8 @@ #include <utility> +#include "base/logging.h" +#include "components/viz/service/display/dc_layer_overlay.h" #include "third_party/skia/include/core/SkSurface.h" #include "ui/gfx/gpu_fence.h" #include "ui/gfx/presentation_feedback.h" @@ -32,6 +34,14 @@ void SkiaOutputDevice::SetDrawRectangle(const gfx::Rect& draw_rectangle) {} +void SkiaOutputDevice::SetEnableDCLayers(bool enable) { + NOTIMPLEMENTED(); +} + +void SkiaOutputDevice::ScheduleDCLayers(std::vector<DCLayerOverlay> dc_layers) { + NOTIMPLEMENTED(); +} + void SkiaOutputDevice::StartSwapBuffers( base::Optional<BufferPresentedCallback> feedback) { DCHECK_LT(static_cast<int>(pending_swaps_.size()),
diff --git a/components/viz/service/display_embedder/skia_output_device.h b/components/viz/service/display_embedder/skia_output_device.h index 02256056..014432c5 100644 --- a/components/viz/service/display_embedder/skia_output_device.h +++ b/components/viz/service/display_embedder/skia_output_device.h
@@ -5,6 +5,9 @@ #ifndef COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_SKIA_OUTPUT_DEVICE_H_ #define COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_SKIA_OUTPUT_DEVICE_H_ +#include <memory> +#include <vector> + #include "base/callback.h" #include "base/containers/queue.h" #include "base/macros.h" @@ -31,6 +34,7 @@ } namespace viz { +class DCLayerOverlay; class SkiaOutputDevice { public: @@ -87,6 +91,9 @@ // Set the rectangle that will be drawn into on the surface. virtual void SetDrawRectangle(const gfx::Rect& draw_rectangle); + virtual void SetEnableDCLayers(bool enable); + virtual void ScheduleDCLayers(std::vector<DCLayerOverlay> dc_layers); + const OutputSurface::Capabilities& capabilities() const { return capabilities_; }
diff --git a/components/viz/service/display_embedder/skia_output_device_gl.cc b/components/viz/service/display_embedder/skia_output_device_gl.cc index 2c9d021..a39b7ee 100644 --- a/components/viz/service/display_embedder/skia_output_device_gl.cc +++ b/components/viz/service/display_embedder/skia_output_device_gl.cc
@@ -7,35 +7,43 @@ #include <utility> #include "base/bind_helpers.h" +#include "components/viz/service/display/dc_layer_overlay.h" #include "gpu/command_buffer/common/swap_buffers_complete_params.h" #include "gpu/command_buffer/service/feature_info.h" #include "gpu/command_buffer/service/gl_utils.h" +#include "gpu/command_buffer/service/mailbox_manager.h" +#include "gpu/command_buffer/service/texture_base.h" +#include "gpu/command_buffer/service/texture_manager.h" #include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/core/SkSurfaceProps.h" #include "third_party/skia/include/gpu/GrBackendSurface.h" #include "third_party/skia/include/gpu/GrContext.h" #include "third_party/skia/include/gpu/gl/GrGLTypes.h" #include "ui/gl/color_space_utils.h" +#include "ui/gl/dc_renderer_layer_params.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_context.h" #include "ui/gl/gl_surface.h" #include "ui/gl/gl_version_info.h" + namespace viz { SkiaOutputDeviceGL::SkiaOutputDeviceGL( + gpu::MailboxManager* mailbox_manager, scoped_refptr<gl::GLSurface> gl_surface, scoped_refptr<gpu::gles2::FeatureInfo> feature_info, const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback) : SkiaOutputDevice(false /*need_swap_semaphore */, did_swap_buffer_complete_callback), - gl_surface_(gl_surface) { + mailbox_manager_(mailbox_manager), + gl_surface_(std::move(gl_surface)) { capabilities_.flipped_output_surface = gl_surface_->FlipsVertically(); capabilities_.supports_post_sub_buffer = gl_surface_->SupportsPostSubBuffer(); if (feature_info->workarounds() .disable_post_sub_buffers_for_onscreen_surfaces) capabilities_.supports_post_sub_buffer = false; - capabilities_.max_frames_pending = gl_surface->GetBufferCount() - 1; - capabilities_.supports_dc_layers = gl_surface->SupportsDCLayers(); + capabilities_.max_frames_pending = gl_surface_->GetBufferCount() - 1; + capabilities_.supports_dc_layers = gl_surface_->SupportsDCLayers(); } void SkiaOutputDeviceGL::Initialize(GrContext* gr_context, @@ -154,6 +162,51 @@ gl_surface_->SetDrawRectangle(draw_rectangle); } +void SkiaOutputDeviceGL::SetEnableDCLayers(bool enable) { + gl_surface_->SetEnableDCLayers(enable); +} + +void SkiaOutputDeviceGL::ScheduleDCLayers( + std::vector<DCLayerOverlay> dc_layers) { + for (auto& dc_layer : dc_layers) { + ui::DCRendererLayerParams params; + + // Get GLImages for DC layer textures. + bool success = true; + for (size_t i = 0; i < DCLayerOverlay::kNumResources; ++i) { + if (i > 0 && dc_layer.mailbox[i].IsZero()) + break; + + auto image = GetGLImageForMailbox(dc_layer.mailbox[i]); + if (!image) { + success = false; + break; + } + + image->SetColorSpace(dc_layer.color_space); + params.images[i] = std::move(image); + } + + if (!success) { + DLOG(ERROR) << "Failed to get GLImage for DC layer."; + continue; + } + + params.z_order = dc_layer.z_order; + params.content_rect = dc_layer.content_rect; + params.quad_rect = dc_layer.quad_rect; + DCHECK(dc_layer.transform.IsFlat()); + params.transform = dc_layer.transform; + params.is_clipped = dc_layer.is_clipped; + params.clip_rect = dc_layer.clip_rect; + params.protected_video_type = dc_layer.protected_video_type; + + // Schedule DC layer overlay to be presented at next SwapBuffers(). + if (!gl_surface_->ScheduleDCLayer(params)) + DLOG(ERROR) << "ScheduleDCLayer failed"; + } +} + void SkiaOutputDeviceGL::EnsureBackbuffer() { gl_surface_->SetBackbufferAllocation(true); } @@ -169,4 +222,24 @@ void SkiaOutputDeviceGL::EndPaint(const GrBackendSemaphore& semaphore) {} +scoped_refptr<gl::GLImage> SkiaOutputDeviceGL::GetGLImageForMailbox( + const gpu::Mailbox& mailbox) { + // TODO(crbug.com/1005306): Use SharedImageManager to get textures here once + // all clients are using SharedImageInterface to create textures. + auto* texture_base = mailbox_manager_->ConsumeTexture(mailbox); + if (!texture_base) + return nullptr; + + if (texture_base->GetType() == gpu::TextureBase::Type::kPassthrough) { + gpu::gles2::TexturePassthrough* texture = + static_cast<gpu::gles2::TexturePassthrough*>(texture_base); + return texture->GetLevelImage(texture->target(), 0); + } else { + DCHECK_EQ(texture_base->GetType(), gpu::TextureBase::Type::kValidated); + gpu::gles2::Texture* texture = + static_cast<gpu::gles2::Texture*>(texture_base); + return texture->GetLevelImage(texture->target(), 0); + } +} + } // namespace viz
diff --git a/components/viz/service/display_embedder/skia_output_device_gl.h b/components/viz/service/display_embedder/skia_output_device_gl.h index af8cd56b..2088166b 100644 --- a/components/viz/service/display_embedder/skia_output_device_gl.h +++ b/components/viz/service/display_embedder/skia_output_device_gl.h
@@ -6,17 +6,20 @@ #define COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_SKIA_OUTPUT_DEVICE_GL_H_ #include <memory> +#include <vector> #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "build/build_config.h" #include "components/viz/service/display_embedder/skia_output_device.h" +#include "gpu/command_buffer/common/mailbox.h" class GrContext; namespace gl { class GLContext; +class GLImage; class GLSurface; } // namespace gl @@ -25,6 +28,8 @@ } // namespace gfx namespace gpu { +class MailboxManager; + namespace gles2 { class FeatureInfo; } // namespace gles2 @@ -35,6 +40,7 @@ class SkiaOutputDeviceGL final : public SkiaOutputDevice { public: SkiaOutputDeviceGL( + gpu::MailboxManager* mailbox_manager, scoped_refptr<gl::GLSurface> gl_surface, scoped_refptr<gpu::gles2::FeatureInfo> feature_info, const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback); @@ -58,12 +64,18 @@ BufferPresentedCallback feedback, std::vector<ui::LatencyInfo> latency_info) override; void SetDrawRectangle(const gfx::Rect& draw_rectangle) override; + void SetEnableDCLayers(bool enable) override; + void ScheduleDCLayers(std::vector<DCLayerOverlay> dc_layers) override; void EnsureBackbuffer() override; void DiscardBackbuffer() override; SkSurface* BeginPaint() override; void EndPaint(const GrBackendSemaphore& semaphore) override; private: + scoped_refptr<gl::GLImage> GetGLImageForMailbox(const gpu::Mailbox& mailbox); + + gpu::MailboxManager* const mailbox_manager_; + scoped_refptr<gl::GLSurface> gl_surface_; GrContext* gr_context_ = nullptr;
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl.cc b/components/viz/service/display_embedder/skia_output_surface_impl.cc index 4e6f6b4b..fd202cf8 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl.cc
@@ -18,6 +18,7 @@ #include "components/viz/common/frame_sinks/copy_output_request.h" #include "components/viz/common/frame_sinks/copy_output_util.h" #include "components/viz/common/resources/resource_format_utils.h" +#include "components/viz/service/display/dc_layer_overlay.h" #include "components/viz/service/display/output_surface_client.h" #include "components/viz/service/display/output_surface_frame.h" #include "components/viz/service/display_embedder/image_context_impl.h" @@ -129,6 +130,10 @@ task_sequence_ = nullptr; } +gpu::SurfaceHandle SkiaOutputSurfaceImpl::GetSurfaceHandle() const { + return dependency_->GetSurfaceHandle(); +} + void SkiaOutputSurfaceImpl::BindToClient(OutputSurfaceClient* client) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(client); @@ -357,21 +362,34 @@ std::move(color_space)); } -void SkiaOutputSurfaceImpl::SkiaSwapBuffers(OutputSurfaceFrame frame) { +gpu::SyncToken SkiaOutputSurfaceImpl::SkiaSwapBuffers(OutputSurfaceFrame frame, + bool wants_sync_token) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(!current_paint_); + + gpu::SyncToken sync_token; + if (wants_sync_token) { + sync_token = gpu::SyncToken( + gpu::CommandBufferNamespace::VIZ_SKIA_OUTPUT_SURFACE, + impl_on_gpu_->command_buffer_id(), ++sync_fence_release_); + sync_token.SetVerifyFlush(); + } + // impl_on_gpu_ is released on the GPU thread by a posted task from // SkiaOutputSurfaceImpl::dtor. So it is safe to use base::Unretained. auto callback = base::BindOnce(&SkiaOutputSurfaceImplOnGpu::SwapBuffers, base::Unretained(impl_on_gpu_.get()), std::move(frame), - std::move(deferred_framebuffer_draw_closure_)); + std::move(deferred_framebuffer_draw_closure_), + sync_token.release_count()); ScheduleGpuTask(std::move(callback), std::move(resource_sync_tokens_)); // Recreate |root_recorder_| after SwapBuffers has been scheduled on GPU // thread to save some time in BeginPaintCurrentFrame // TODO(vasilyt): reuse root recorder RecreateRootRecorder(); + + return sync_token; } void SkiaOutputSurfaceImpl::ScheduleOutputSurfaceAsOverlay( @@ -536,6 +554,20 @@ ScheduleGpuTask(std::move(callback), std::move(resource_sync_tokens_)); } +void SkiaOutputSurfaceImpl::SetEnableDCLayers(bool enable) { + auto task = base::BindOnce(&SkiaOutputSurfaceImplOnGpu::SetEnableDCLayers, + base::Unretained(impl_on_gpu_.get()), enable); + ScheduleGpuTask(std::move(task), {}); +} + +void SkiaOutputSurfaceImpl::ScheduleDCLayers( + std::vector<DCLayerOverlay> overlays) { + auto task = + base::BindOnce(&SkiaOutputSurfaceImplOnGpu::ScheduleDCLayers, + base::Unretained(impl_on_gpu_.get()), std::move(overlays)); + ScheduleGpuTask(std::move(task), {}); +} + void SkiaOutputSurfaceImpl::SetCapabilitiesForTesting( bool flipped_output_surface) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl.h b/components/viz/service/display_embedder/skia_output_surface_impl.h index 33963305..e9fa29f 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl.h +++ b/components/viz/service/display_embedder/skia_output_surface_impl.h
@@ -57,6 +57,7 @@ ~SkiaOutputSurfaceImpl() override; // OutputSurface implementation: + gpu::SurfaceHandle GetSurfaceHandle() const override; void BindToClient(OutputSurfaceClient* client) override; void BindFramebuffer() override; void SetDrawRectangle(const gfx::Rect& draw_rectangle) override; @@ -89,7 +90,8 @@ SkYUVColorSpace yuv_color_space, sk_sp<SkColorSpace> dst_color_space, bool has_alpha) override; - void SkiaSwapBuffers(OutputSurfaceFrame frame) override; + gpu::SyncToken SkiaSwapBuffers(OutputSurfaceFrame frame, + bool wants_sync_token) override; void ScheduleOutputSurfaceAsOverlay( OverlayProcessor::OutputSurfaceOverlayPlane output_surface_plane) override; @@ -109,6 +111,8 @@ sk_sp<SkColorSpace> color_space) override; void RemoveRenderPassResource(std::vector<RenderPassId> ids) override; + void SetEnableDCLayers(bool enable) override; + void ScheduleDCLayers(std::vector<DCLayerOverlay> overlays) override; void CopyOutput(RenderPassId id, const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space,
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc index c6aee80..566dd3f 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
@@ -18,6 +18,7 @@ #include "components/viz/common/frame_sinks/copy_output_util.h" #include "components/viz/common/resources/resource_format_utils.h" #include "components/viz/common/skia_helper.h" +#include "components/viz/service/display/dc_layer_overlay.h" #include "components/viz/service/display/gl_renderer_copier.h" #include "components/viz/service/display/output_surface_frame.h" #include "components/viz/service/display/texture_deleter.h" @@ -802,7 +803,8 @@ void SkiaOutputSurfaceImplOnGpu::SwapBuffers( OutputSurfaceFrame frame, - base::OnceClosure deferred_framebuffer_draw_closure) { + base::OnceClosure deferred_framebuffer_draw_closure, + uint64_t sync_fence_release) { TRACE_EVENT0("viz", "SkiaOutputSurfaceImplOnGpu::SwapBuffers"); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -813,15 +815,14 @@ if (!MakeCurrent(!dependency_->IsOffscreen() /* need_fbo0 */)) return; } - DCHECK(scoped_output_device_paint_); DCHECK(output_device_); scoped_output_device_paint_.reset(); if (frame.sub_buffer_rect && frame.sub_buffer_rect->IsEmpty()) { - // TODO(https://crbug.com/898680): Maybe do something for overlays here. - // This codepath was added in https://codereview.chromium.org/1489153002 - // to support updating overlays without changing the framebuffer contents. + // Call SwapBuffers() to present overlays. + output_device_->SwapBuffers(buffer_presented_callback_, + std::move(frame.latency_info)); } else if (capabilities().supports_post_sub_buffer && frame.sub_buffer_rect) { if (!capabilities().flipped_output_surface) frame.sub_buffer_rect->set_y(size_.height() - frame.sub_buffer_rect->y() - @@ -834,6 +835,9 @@ std::move(frame.latency_info)); } + if (sync_fence_release) + ReleaseFenceSyncAndPushTextureUpdates(sync_fence_release); + destroy_after_swap_.clear(); } @@ -1186,6 +1190,15 @@ // |image_contexts| goes out of scope here. } +void SkiaOutputSurfaceImplOnGpu::SetEnableDCLayers(bool enable) { + output_device_->SetEnableDCLayers(enable); +} + +void SkiaOutputSurfaceImplOnGpu::ScheduleDCLayers( + std::vector<DCLayerOverlay> dc_layers) { + output_device_->ScheduleDCLayers(std::move(dc_layers)); +} + void SkiaOutputSurfaceImplOnGpu::SetCapabilitiesForTesting( const OutputSurface::Capabilities& capabilities) { MakeCurrent(false /* need_fbo0 */); @@ -1254,7 +1267,8 @@ } else { std::unique_ptr<SkiaOutputDeviceGL> onscreen_device = std::make_unique<SkiaOutputDeviceGL>( - gl_surface_, feature_info_, did_swap_buffer_complete_callback_); + dependency_->GetMailboxManager(), gl_surface_, feature_info_, + did_swap_buffer_complete_callback_); onscreen_device->Initialize(gr_context(), context); supports_alpha_ = onscreen_device->supports_alpha();
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h index df44797f..fcf28021 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h
@@ -21,6 +21,7 @@ #include "components/viz/service/display/output_surface_frame.h" #include "components/viz/service/display/overlay_processor.h" #include "components/viz/service/display_embedder/skia_output_device.h" +#include "gpu/command_buffer/common/mailbox.h" #include "gpu/command_buffer/common/sync_token.h" #include "gpu/command_buffer/service/shared_context_state.h" #include "gpu/command_buffer/service/sync_point_manager.h" @@ -126,7 +127,8 @@ void ScheduleOutputSurfaceAsOverlay( const OverlayProcessor::OutputSurfaceOverlayPlane& output_surface_plane); void SwapBuffers(OutputSurfaceFrame frame, - base::OnceClosure deferred_framebuffer_draw_closure); + base::OnceClosure deferred_framebuffer_draw_closure, + uint64_t sync_fence_release); void EnsureBackbuffer() { output_device_->EnsureBackbuffer(); } void DiscardBackbuffer() { output_device_->DiscardBackbuffer(); } void FinishPaintRenderPass(RenderPassId id, @@ -153,6 +155,8 @@ void ReleaseImageContexts( std::vector<std::unique_ptr<ExternalUseClient::ImageContext>> image_contexts); + void SetEnableDCLayers(bool enable); + void ScheduleDCLayers(std::vector<DCLayerOverlay> dc_layers); bool was_context_lost() { return context_state_->context_lost(); }
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc index abfa4711..d92f2173 100644 --- a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc +++ b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
@@ -156,14 +156,6 @@ last_drawn_frame_index_ = surface->GetActiveFrameIndex(); } -void CompositorFrameSinkSupport::OnSurfaceWasDrawn( - uint32_t frame_token, - base::TimeTicks draw_start_timestamp) { - auto frame_timing_details = pending_frame_timing_details_.find(frame_token); - DCHECK(frame_timing_details != pending_frame_timing_details_.end()); - frame_timing_details->second.draw_start_timestamp = draw_start_timestamp; -} - void CompositorFrameSinkSupport::OnFrameTokenChanged(uint32_t frame_token) { frame_sink_manager_->OnFrameTokenChanged(frame_sink_id_, frame_token); } @@ -204,8 +196,11 @@ void CompositorFrameSinkSupport::OnSurfacePresented( uint32_t frame_token, + base::TimeTicks draw_start_timestamp, + const gfx::SwapTimings& swap_timings, const gfx::PresentationFeedback& feedback) { - DidPresentCompositorFrame(frame_token, feedback); + DidPresentCompositorFrame(frame_token, draw_start_timestamp, swap_timings, + feedback); } bool CompositorFrameSinkSupport::NeedsSyncTokens() const { @@ -393,9 +388,7 @@ } base::TimeTicks now_time = base::TimeTicks::Now(); - FrameTimingDetails details; - details.received_compositor_frame_timestamp = now_time; - pending_frame_timing_details_.emplace(frame.metadata.frame_token, details); + pending_received_frame_times_.emplace(frame.metadata.frame_token, now_time); // Ensure no CopyOutputRequests have been submitted if they are banned. if (!allow_copy_output_requests_ && frame.HasCopyOutputRequests()) { @@ -574,17 +567,25 @@ void CompositorFrameSinkSupport::DidPresentCompositorFrame( uint32_t frame_token, + base::TimeTicks draw_start_timestamp, + const gfx::SwapTimings& swap_timings, const gfx::PresentationFeedback& feedback) { DCHECK(frame_token); + DCHECK((feedback.flags & gfx::PresentationFeedback::kFailure) || + (!draw_start_timestamp.is_null() && !swap_timings.is_null())); - DCHECK_LE(pending_frame_timing_details_.size(), 25u); - auto pending_details = pending_frame_timing_details_.find(frame_token); - DCHECK(pending_details != pending_frame_timing_details_.end()); + DCHECK_LE(pending_received_frame_times_.size(), 25u); + auto received_frame_timestamp = + pending_received_frame_times_.find(frame_token); + DCHECK(received_frame_timestamp != pending_received_frame_times_.end()); - FrameTimingDetails details = pending_details->second; + FrameTimingDetails details; + details.received_compositor_frame_timestamp = + received_frame_timestamp->second; + details.draw_start_timestamp = draw_start_timestamp; + details.swap_timings = swap_timings; details.presentation_feedback = feedback; - - pending_frame_timing_details_.erase(pending_details); + pending_received_frame_times_.erase(received_frame_timestamp); // We should only ever get one PresentationFeedback per frame_token. DCHECK(frame_timing_details_.find(frame_token) == @@ -601,7 +602,8 @@ TransferableResource::ReturnResources(frame_resource_list); ReturnResources(resources); DidReceiveCompositorFrameAck(); - DidPresentCompositorFrame(frame_token, gfx::PresentationFeedback::Failure()); + DidPresentCompositorFrame(frame_token, base::TimeTicks(), gfx::SwapTimings(), + gfx::PresentationFeedback::Failure()); } void CompositorFrameSinkSupport::UpdateDisplayRootReference(
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support.h b/components/viz/service/frame_sinks/compositor_frame_sink_support.h index 280aedde1..d1d79f4 100644 --- a/components/viz/service/frame_sinks/compositor_frame_sink_support.h +++ b/components/viz/service/frame_sinks/compositor_frame_sink_support.h
@@ -112,8 +112,6 @@ void OnSurfaceActivated(Surface* surface) override; void OnSurfaceDestroyed(Surface* surface) override; void OnSurfaceWillDraw(Surface* surface) override; - void OnSurfaceWasDrawn(uint32_t frame_token, - base::TimeTicks draw_start_timestamp) override; void RefResources( const std::vector<TransferableResource>& resources) override; void UnrefResources(const std::vector<ReturnedResource>& resources) override; @@ -133,6 +131,8 @@ const gfx::Rect& damage_rect, base::TimeTicks expected_display_time) override; void OnSurfacePresented(uint32_t frame_token, + base::TimeTicks draw_start_timestamp, + const gfx::SwapTimings& swap_timings, const gfx::PresentationFeedback& feedback) override; bool NeedsSyncTokens() const override; @@ -214,6 +214,8 @@ void DidReceiveCompositorFrameAck(); void DidPresentCompositorFrame(uint32_t frame_token, + base::TimeTicks draw_start_timestamp, + const gfx::SwapTimings& swap_timings, const gfx::PresentationFeedback& feedback); void DidRejectCompositorFrame( uint32_t frame_token, @@ -326,11 +328,10 @@ bool callback_received_receive_ack_ = true; uint32_t trace_sequence_ = 0; - // Contains FrameTimingDetails for in-flight frames that have not yet been - // presented or aborted. After presentation the details are moved into - // |frame_timing_details_| which is sent to the client and cleared with each - // OnBeginFrame() - FrameTimingDetailsMap pending_frame_timing_details_; + // Maps |frame_token| to the timestamp when that frame was received. This + // timestamp is combined with the information received in OnSurfacePresented() + // and stored in |frame_timing_details_|. + base::flat_map<uint32_t, base::TimeTicks> pending_received_frame_times_; FrameTimingDetailsMap frame_timing_details_; LocalSurfaceId last_evicted_local_surface_id_;
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc index 21de062..197efa9 100644 --- a/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc +++ b/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc
@@ -225,9 +225,13 @@ void SendPresentationFeedback(CompositorFrameSinkSupport* support, uint32_t frame_token) { - support->OnSurfaceWasDrawn(frame_token, base::TimeTicks::Now()); + base::TimeTicks draw_time = base::TimeTicks::Now(); + + base::TimeTicks swap_time = base::TimeTicks::Now(); + gfx::SwapTimings timings = {swap_time, swap_time}; + support->DidPresentCompositorFrame( - frame_token, + frame_token, draw_time, timings, gfx::PresentationFeedback(base::TimeTicks::Now(), base::TimeDelta::FromMilliseconds(16), /*flags=*/0));
diff --git a/components/viz/service/surfaces/surface.cc b/components/viz/service/surfaces/surface.cc index a3f9565..da26e71f 100644 --- a/components/viz/service/surfaces/surface.cc +++ b/components/viz/service/surfaces/surface.cc
@@ -23,6 +23,7 @@ #include "components/viz/service/surfaces/surface_manager.h" #include "components/viz/service/viz_service_export.h" #include "ui/gfx/presentation_feedback.h" +#include "ui/gfx/swap_result.h" namespace viz { @@ -34,14 +35,19 @@ Surface::PresentationHelper::~PresentationHelper() { // The class that called TakePresentationHelperForPresentNotification // should have called present on this helper. If not, give a Failure feedback - // to the appropriate surface. - DidPresent(gfx::PresentationFeedback::Failure()); + // to the appropriate surface client. + DidPresent(base::TimeTicks(), gfx::SwapTimings(), + gfx::PresentationFeedback::Failure()); } void Surface::PresentationHelper::DidPresent( + base::TimeTicks draw_start_timestamp, + const gfx::SwapTimings& swap_timings, const gfx::PresentationFeedback& feedback) { - if (surface_client_ && frame_token_) - surface_client_->OnSurfacePresented(frame_token_, feedback); + if (surface_client_ && frame_token_) { + surface_client_->OnSurfacePresented(frame_token_, draw_start_timestamp, + swap_timings, feedback); + } surface_client_ = nullptr; } @@ -641,6 +647,7 @@ // when the frame is unref'd. if (!frame_data->will_be_notified_of_presentation && surface_client_) surface_client_->OnSurfacePresented(frame_data->frame.metadata.frame_token, + base::TimeTicks(), gfx::SwapTimings(), gfx::PresentationFeedback::Failure()); } @@ -712,14 +719,6 @@ MarkAsDrawn(); } -void Surface::OnWasDrawn(uint32_t frame_token, - base::TimeTicks draw_start_timestamp) { - if (!surface_client_) - return; - - surface_client_->OnSurfaceWasDrawn(frame_token, draw_start_timestamp); -} - void Surface::ActivatePendingFrameForInheritedDeadline() { DCHECK(HasPendingFrame()); // Deadline inheritance implies that this surface was blocking the embedder,
diff --git a/components/viz/service/surfaces/surface.h b/components/viz/service/surfaces/surface.h index 21aef17..ba666a6 100644 --- a/components/viz/service/surfaces/surface.h +++ b/components/viz/service/surfaces/surface.h
@@ -35,6 +35,7 @@ namespace gfx { struct PresentationFeedback; +struct SwapTimings; } namespace ui { @@ -82,8 +83,9 @@ uint32_t frame_token); ~PresentationHelper(); - void DidPresent(const gfx::PresentationFeedback& feedback); - uint32_t frame_token() const { return frame_token_; } + void DidPresent(base::TimeTicks draw_start_timestamp, + const gfx::SwapTimings& timings, + const gfx::PresentationFeedback& feedback); private: base::WeakPtr<SurfaceClient> surface_client_; @@ -221,10 +223,6 @@ // Called when this surface will be included in the next display frame. void OnWillBeDrawn(); - // Called after the display compositor finishes drawing the frame - // associated with frame_token. - void OnWasDrawn(uint32_t frame_token, base::TimeTicks draw_start_timestamp); - // Called when |surface_id| is activated for the first time and its part of a // referenced SurfaceRange. void OnChildActivatedForActiveFrame(const SurfaceId& surface_id);
diff --git a/components/viz/service/surfaces/surface_client.h b/components/viz/service/surfaces/surface_client.h index d46505a8..7887bd02 100644 --- a/components/viz/service/surfaces/surface_client.h +++ b/components/viz/service/surfaces/surface_client.h
@@ -18,6 +18,7 @@ namespace gfx { struct PresentationFeedback; class Rect; +struct SwapTimings; } // namespace gfx namespace viz { @@ -43,10 +44,6 @@ // Called when a |surface| is about to be drawn. virtual void OnSurfaceWillDraw(Surface* surface) = 0; - // Called when a |surface| has been successfully drawn. - virtual void OnSurfaceWasDrawn(uint32_t frame_token, - base::TimeTicks draw_start_timestamp) = 0; - // Increments the reference count on resources specified by |resources|. virtual void RefResources( const std::vector<TransferableResource>& resources) = 0; @@ -80,6 +77,8 @@ // Notifies the client that a frame with |token| has been presented. virtual void OnSurfacePresented( uint32_t frame_token, + base::TimeTicks draw_start_timestamp, + const gfx::SwapTimings& swap_timings, const gfx::PresentationFeedback& feedback) = 0; // This is called when |surface| or one of its descendents is determined to be
diff --git a/components/viz/test/fake_skia_output_surface.cc b/components/viz/test/fake_skia_output_surface.cc index 0c4eaf17..8573db5 100644 --- a/components/viz/test/fake_skia_output_surface.cc +++ b/components/viz/test/fake_skia_output_surface.cc
@@ -185,11 +185,13 @@ holder, size, format, std::move(color_space)); } -void FakeSkiaOutputSurface::SkiaSwapBuffers(OutputSurfaceFrame frame) { +gpu::SyncToken FakeSkiaOutputSurface::SkiaSwapBuffers(OutputSurfaceFrame frame, + bool wants_sync_token) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(&FakeSkiaOutputSurface::SwapBuffersAck, weak_ptr_factory_.GetWeakPtr())); + return gpu::SyncToken(); } SkCanvas* FakeSkiaOutputSurface::BeginPaintRenderPass(
diff --git a/components/viz/test/fake_skia_output_surface.h b/components/viz/test/fake_skia_output_surface.h index 35cd1a5..29e2271 100644 --- a/components/viz/test/fake_skia_output_surface.h +++ b/components/viz/test/fake_skia_output_surface.h
@@ -73,7 +73,8 @@ SkYUVColorSpace yuv_color_space, sk_sp<SkColorSpace> dst_color_space, bool has_alpha) override; - void SkiaSwapBuffers(OutputSurfaceFrame frame) override; + gpu::SyncToken SkiaSwapBuffers(OutputSurfaceFrame frame, + bool wants_sync_token) override; SkCanvas* BeginPaintRenderPass(const RenderPassId& id, const gfx::Size& surface_size, ResourceFormat format, @@ -87,8 +88,9 @@ ResourceFormat format, bool mipmap, sk_sp<SkColorSpace> color_space) override; - void RemoveRenderPassResource(std::vector<RenderPassId> ids) override; + void SetEnableDCLayers(bool enable) override {} + void ScheduleDCLayers(std::vector<DCLayerOverlay> overlays) override {} void CopyOutput(RenderPassId id, const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space,
diff --git a/components/viz/test/stub_surface_client.h b/components/viz/test/stub_surface_client.h index 4325d72..b85d86b1 100644 --- a/components/viz/test/stub_surface_client.h +++ b/components/viz/test/stub_surface_client.h
@@ -19,8 +19,6 @@ void OnSurfaceActivated(Surface* surface) override {} void OnSurfaceDestroyed(Surface* surface) override {} void OnSurfaceWillDraw(Surface* surface) override {} - void OnSurfaceWasDrawn(uint32_t frame_token, - base::TimeTicks draw_start_timestamp) override {} void RefResources( const std::vector<TransferableResource>& resources) override {} void UnrefResources(const std::vector<ReturnedResource>& resources) override { @@ -40,6 +38,8 @@ const gfx::Rect& damage_rect, base::TimeTicks expected_display_time) override {} void OnSurfacePresented(uint32_t frame_token, + base::TimeTicks draw_start_timestamp, + const gfx::SwapTimings& swap_timings, const gfx::PresentationFeedback& feedback) override {} bool NeedsSyncTokens() const override;
diff --git a/content/browser/dom_storage/local_storage_context_mojo.cc b/content/browser/dom_storage/local_storage_context_mojo.cc index 759feab..44fe2a93 100644 --- a/content/browser/dom_storage/local_storage_context_mojo.cc +++ b/content/browser/dom_storage/local_storage_context_mojo.cc
@@ -712,7 +712,9 @@ if (!subdirectory_.empty() && !in_memory_only) { // We were given a subdirectory to write to. Get it and use a disk backed // database. - connector_->BindInterface(file::mojom::kServiceName, &file_system_); + file_system_.reset(); + connector_->Connect(file::mojom::kServiceName, + file_system_.BindNewPipeAndPassReceiver()); file_system_->GetSubDirectory( subdirectory_.AsUTF8Unsafe(), MakeRequest(&directory_), base::BindOnce(&LocalStorageContextMojo::OnDirectoryOpened,
diff --git a/content/browser/dom_storage/local_storage_context_mojo.h b/content/browser/dom_storage/local_storage_context_mojo.h index 9520807..7d472582 100644 --- a/content/browser/dom_storage/local_storage_context_mojo.h +++ b/content/browser/dom_storage/local_storage_context_mojo.h
@@ -184,7 +184,7 @@ bool force_keep_session_state_ = false; scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_; - file::mojom::FileSystemPtr file_system_; + mojo::Remote<file::mojom::FileSystem> file_system_; filesystem::mojom::DirectoryPtr directory_; base::trace_event::MemoryAllocatorDumpGuid memory_dump_id_;
diff --git a/content/browser/dom_storage/session_storage_context_mojo.cc b/content/browser/dom_storage/session_storage_context_mojo.cc index 11bf380..475a735 100644 --- a/content/browser/dom_storage/session_storage_context_mojo.cc +++ b/content/browser/dom_storage/session_storage_context_mojo.cc
@@ -711,7 +711,9 @@ if (backing_mode_ != BackingMode::kNoDisk && !in_memory_only) { // We were given a subdirectory to write to. Get it and use a disk backed // database. - connector_->BindInterface(file::mojom::kServiceName, &file_system_); + file_system_.reset(); + connector_->Connect(file::mojom::kServiceName, + file_system_.BindNewPipeAndPassReceiver()); file_system_->GetSubDirectory( partition_directory_path_.AsUTF8Unsafe(), MakeRequest(&partition_directory_),
diff --git a/content/browser/dom_storage/session_storage_context_mojo.h b/content/browser/dom_storage/session_storage_context_mojo.h index 42aa3ef7..f0a36eb7 100644 --- a/content/browser/dom_storage/session_storage_context_mojo.h +++ b/content/browser/dom_storage/session_storage_context_mojo.h
@@ -253,7 +253,7 @@ } connection_state_ = NO_CONNECTION; bool database_initialized_ = false; - file::mojom::FileSystemPtr file_system_; + mojo::Remote<file::mojom::FileSystem> file_system_; filesystem::mojom::DirectoryPtr partition_directory_; base::trace_event::MemoryAllocatorDumpGuid memory_dump_id_;
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc index d637be2..15989dd 100644 --- a/content/browser/download/download_manager_impl.cc +++ b/content/browser/download/download_manager_impl.cc
@@ -288,6 +288,7 @@ cancelled_download_cleared_from_history_(0), interrupted_download_cleared_from_history_(0) { DCHECK(browser_context); + download::SetIOTaskRunner( base::CreateSingleThreadTaskRunner({BrowserThread::IO})); @@ -1035,6 +1036,11 @@ in_progress_manager_->OnAllInprogressDownloadsLoaded(); for (auto& observer : observers_) observer.OnManagerInitialized(); + size_t size = 0; + for (const auto& it : downloads_) + size += it.second->GetApproximateMemoryUsage(); + if (!IsOffTheRecord() && size > 0) + download::RecordDownloadManagerMemoryUsage(size); } bool DownloadManagerImpl::IsManagerInitialized() {
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc index 8a21e94..454bd55 100644 --- a/content/browser/frame_host/navigation_request.cc +++ b/content/browser/frame_host/navigation_request.cc
@@ -3229,7 +3229,7 @@ // reports. // TODO(http://crbug.com/934317): Remove this once done debugging renderer // hangs. - if (base::RandDouble() < 0.1) { + if (base::RandDouble() < 0.001) { static base::debug::CrashKeyString* url_key = base::debug::AllocateCrashKeyString("commit_timeout_url", base::debug::CrashKeySize::Size256);
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 3ed7fd84..411639913 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1877,16 +1877,12 @@ params->has_committed_real_load = frame_tree_node()->has_committed_real_load(); - params->widget_params = mojom::CreateFrameWidgetParams::New(); if (GetLocalRenderWidgetHost()) { + params->widget_params = mojom::CreateFrameWidgetParams::New(); params->widget_params->routing_id = GetLocalRenderWidgetHost()->GetRoutingID(); params->widget_params->visual_properties = GetLocalRenderWidgetHost()->GetVisualProperties(); - } else { - // MSG_ROUTING_NONE will prevent a new RenderWidget from being created in - // the renderer process. - params->widget_params->routing_id = MSG_ROUTING_NONE; } GetProcess()->GetRendererInterface()->CreateFrame(std::move(params));
diff --git a/content/browser/serial/serial_service.cc b/content/browser/serial/serial_service.cc index a9d1655..da6ff59 100644 --- a/content/browser/serial/serial_service.cc +++ b/content/browser/serial/serial_service.cc
@@ -15,6 +15,7 @@ #include "content/public/browser/serial_delegate.h" #include "content/public/browser/web_contents.h" #include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom.h" namespace content { @@ -40,7 +41,7 @@ : render_frame_host_(render_frame_host) { DCHECK(render_frame_host_->IsFeatureEnabled( blink::mojom::FeaturePolicyFeature::kSerial)); - watchers_.set_connection_error_handler(base::BindRepeating( + watchers_.set_disconnect_handler(base::BindRepeating( &SerialService::OnWatcherConnectionError, base::Unretained(this))); } @@ -101,8 +102,8 @@ web_contents_impl->IncrementSerialActiveFrameCount(); } - device::mojom::SerialPortConnectionWatcherPtr watcher; - watchers_.AddBinding(this, mojo::MakeRequest(&watcher)); + mojo::PendingRemote<device::mojom::SerialPortConnectionWatcher> watcher; + watchers_.Add(this, watcher.InitWithNewPipeAndPassReceiver()); delegate->GetPortManager(render_frame_host_) ->GetPort(token, std::move(receiver), std::move(watcher)); }
diff --git a/content/browser/serial/serial_service.h b/content/browser/serial/serial_service.h index 331a6ff..03b8ffbf 100644 --- a/content/browser/serial/serial_service.h +++ b/content/browser/serial/serial_service.h
@@ -55,7 +55,7 @@ // Each pipe here watches a connection created by GetPort() in order to notify // the WebContentsImpl when an active connection indicator should be shown. - mojo::BindingSet<device::mojom::SerialPortConnectionWatcher> watchers_; + mojo::ReceiverSet<device::mojom::SerialPortConnectionWatcher> watchers_; base::WeakPtrFactory<SerialService> weak_factory_{this};
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index 6dac3df2..b5d51860 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -953,7 +953,6 @@ EXPECT_EQ(expected_dip_scale, GetFrameDeviceScaleFactor(web_contents())); FrameTreeNode* root = web_contents()->GetFrameTree()->root(); - EXPECT_EQ(expected_dip_scale, GetFrameDeviceScaleFactor(root)); ASSERT_EQ(1U, root->child_count()); FrameTreeNode* child = root->child_at(0); @@ -6221,8 +6220,6 @@ params->parent_routing_id = shell()->web_contents()->GetMainFrame()->GetRoutingID(); params->previous_sibling_routing_id = IPC::mojom::kRoutingIdNone; - params->widget_params = mojom::CreateFrameWidgetParams::New(); - params->widget_params->routing_id = IPC::mojom::kRoutingIdNone; params->replication_state.name = "name"; params->replication_state.unique_name = "name"; params->devtools_frame_token = base::UnguessableToken::Create();
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 176018a..5ffb3df 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -6554,10 +6554,7 @@ RenderViewHost* render_view_host) { RenderWidgetHostViewBase* rwh_view = view_->CreateViewForWidget(render_view_host->GetWidget(), false); - - // Now that the RenderView has been created, we need to tell it its size. - if (rwh_view) - rwh_view->SetSize(GetSizeForNewRenderView(true)); + rwh_view->SetSize(GetSizeForNewRenderView(true)); } bool WebContentsImpl::CreateRenderViewForRenderManager(
diff --git a/content/common/renderer.mojom b/content/common/renderer.mojom index 84c0229..fbb4196 100644 --- a/content/common/renderer.mojom +++ b/content/common/renderer.mojom
@@ -75,7 +75,9 @@ // Whether or not the frame has previously committed a real load. bool has_committed_real_load; - // The initial renderer size. + // Initial state for the RenderWidget and RenderView. + // TODO(danakj): The RenderView properties should be sent separately when + // there is not main_frame_routing_id, and this field should not be included. VisualProperties visual_properties; // Whether lookup of frames in the created RenderView (e.g. lookup via @@ -89,12 +91,10 @@ struct CreateFrameWidgetParams { // Gives the routing ID for the RenderWidget that will be attached to the - // new RenderFrame. If the RenderFrame does not need a RenderWidget, this - // is MSG_ROUTING_NONE and the other parameters are not read. + // new RenderFrame. int32 routing_id; - // The initial visual properties of the widget, when the routing_id is not - // MSG_ROUTING_NONE. + // The initial visual properties of the widget. VisualProperties visual_properties; }; @@ -145,7 +145,7 @@ // Specifies properties for a new RenderWidget that will be attached to the // new RenderFrame (if one is needed). - CreateFrameWidgetParams widget_params; + CreateFrameWidgetParams? widget_params; // Whether or not the frame has previously committed a real load. bool has_committed_real_load;
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index c8977dc9..baf8d4bd8 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -763,6 +763,13 @@ base::FEATURE_ENABLED_BY_DEFAULT}; #endif // defined(OS_CHROMEOS) +#if defined(OS_WIN) +// Enables the use of a touch fling curve that is based on the behavior of +// native apps on Windows. +const base::Feature kExperimentalFlingAnimation{ + "ExperimentalFlingAnimation", base::FEATURE_DISABLED_BY_DEFAULT}; +#endif // defined(OS_WIN) + #if defined(OS_MACOSX) // Enables caching of media devices for the purpose of enumerating them. const base::Feature kDeviceMonitorMac{"DeviceMonitorMac",
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index d77f2182..a63f89e1 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -168,6 +168,10 @@ CONTENT_EXPORT extern const base::Feature kWebUIPolymer2Exceptions; #endif +#if defined(OS_WIN) +CONTENT_EXPORT extern const base::Feature kExperimentalFlingAnimation; +#endif // defined(OS_WIN) + #if defined(OS_MACOSX) CONTENT_EXPORT extern const base::Feature kDeviceMonitorMac; CONTENT_EXPORT extern const base::Feature kIOSurfaceCapturer;
diff --git a/content/public/renderer/render_frame.h b/content/public/renderer/render_frame.h index eeb36546..188d1ef 100644 --- a/content/public/renderer/render_frame.h +++ b/content/public/renderer/render_frame.h
@@ -244,6 +244,12 @@ size_t offset, const gfx::Range& range) = 0; + // Notifies the frame's RenderView that the zoom has changed. + virtual void SetZoomLevel(double zoom_level) = 0; + + // Returns the page's zoom level from the frame's RenderView. + virtual double GetZoomLevel() = 0; + // Adds |message| to the DevTools console. virtual void AddMessageToConsole(blink::mojom::ConsoleMessageLevel level, const std::string& message) = 0;
diff --git a/content/public/test/mock_navigation_handle.h b/content/public/test/mock_navigation_handle.h index 1ab6c05b..a0259369 100644 --- a/content/public/test/mock_navigation_handle.h +++ b/content/public/test/mock_navigation_handle.h
@@ -144,6 +144,9 @@ void set_proxy_server(const net::ProxyServer& proxy_server) { proxy_server_ = proxy_server; } + void set_initiator_origin(const url::Origin& initiator_origin) { + initiator_origin_ = initiator_origin; + } void set_reload_type(ReloadType reload_type) { reload_type_ = reload_type; } private:
diff --git a/content/renderer/android/synchronous_layer_tree_frame_sink.cc b/content/renderer/android/synchronous_layer_tree_frame_sink.cc index b833fa1..23533b8 100644 --- a/content/renderer/android/synchronous_layer_tree_frame_sink.cc +++ b/content/renderer/android/synchronous_layer_tree_frame_sink.cc
@@ -361,6 +361,13 @@ root_local_surface_id_allocation_.local_surface_id(), std::move(embed_frame)); display_->DrawAndSwap(); + + // We don't track metrics for frames submitted to |display_| but it still + // expects that every frame will receive a swap ack and presentation + // feedback so we send null signals here. + display_->DidReceiveSwapBuffersAck(gfx::SwapTimings()); + display_->DidReceivePresentationFeedback( + gfx::PresentationFeedback::Failure()); } else { // For hardware draws we send the whole frame to the client so it can draw // the content in it.
diff --git a/content/renderer/media/webrtc/rtc_certificate_generator.cc b/content/renderer/media/webrtc/rtc_certificate_generator.cc index bedcba6..27295e85 100644 --- a/content/renderer/media/webrtc/rtc_certificate_generator.cc +++ b/content/renderer/media/webrtc/rtc_certificate_generator.cc
@@ -12,7 +12,6 @@ #include "base/memory/ref_counted.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" -#include "content/renderer/render_thread_impl.h" #include "media/media_buildflags.h" #include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h" #include "third_party/webrtc/api/scoped_refptr.h" @@ -108,8 +107,8 @@ blink::WebRTCCertificateCallback completion_callback, scoped_refptr<base::SingleThreadTaskRunner> task_runner) { DCHECK(WebRTCKeyParamsToKeyParams(key_params).IsValid()); - blink::PeerConnectionDependencyFactory* pc_dependency_factory = - RenderThreadImpl::current()->GetPeerConnectionDependencyFactory(); + auto* pc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); pc_dependency_factory->EnsureInitialized(); scoped_refptr<RTCCertificateGeneratorRequest> request =
diff --git a/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc index c832496791..58ccdff 100644 --- a/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc +++ b/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc
@@ -83,20 +83,12 @@ } // Test blink::Platform implementation that overrides the known methods needed -// by the tests, including creation of WebRtcAudioDevice and -// AudioCapturerSource instances. +// by the tests, including creation of AudioCapturerSource instances. // // TODO(crbug.com/704136): When this test moves to blink/renderer/ it should // inherit from TestingPlatformSupport and use ScopedTestingPlatformSupport. -class WebRtcAudioDeviceTestingPlatformSupport : public blink::Platform { +class AudioCapturerSourceTestingPlatformSupport : public blink::Platform { public: - WebRtcAudioDeviceTestingPlatformSupport( - MockPeerConnectionDependencyFactory* pc_factory) - : pc_factory_(pc_factory) {} - blink::WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() override { - return pc_factory_->GetWebRtcAudioDevice(); - } - scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() const override { return ChildProcess::current() ? ChildProcess::current()->io_task_runner() : nullptr; @@ -109,9 +101,6 @@ EXPECT_EQ(nullptr, web_frame); return AudioDeviceFactory::NewAudioCapturerSource(MSG_ROUTING_NONE, params); } - - private: - MockPeerConnectionDependencyFactory* pc_factory_; }; class MockRTCStatsResponse : public LocalRTCStatsResponse { @@ -304,9 +293,8 @@ mock_dependency_factory_.reset(new MockPeerConnectionDependencyFactory()); platform_original_ = blink::Platform::Current(); - webrtc_audio_device_platform_support_.reset( - new WebRtcAudioDeviceTestingPlatformSupport( - mock_dependency_factory_.get())); + webrtc_audio_device_platform_support_ = + std::make_unique<AudioCapturerSourceTestingPlatformSupport>(); blink::Platform::SetCurrentPlatformForTesting( webrtc_audio_device_platform_support_.get()); @@ -596,7 +584,7 @@ // ThreadPool. base::test::TaskEnvironment task_environment_; ChildProcess child_process_; - std::unique_ptr<WebRtcAudioDeviceTestingPlatformSupport> + std::unique_ptr<AudioCapturerSourceTestingPlatformSupport> webrtc_audio_device_platform_support_; blink::Platform* platform_original_ = nullptr; std::unique_ptr<MockWebRTCPeerConnectionHandlerClient> mock_client_;
diff --git a/content/renderer/p2p/OWNERS b/content/renderer/p2p/OWNERS deleted file mode 100644 index 70573c4..0000000 --- a/content/renderer/p2p/OWNERS +++ /dev/null
@@ -1,4 +0,0 @@ -sergeyu@chromium.org -juberti@chromium.org - -# COMPONENT: Blink>WebRTC
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index b9ce1744..2e664af 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -1467,19 +1467,24 @@ render_view->page_properties(), params->visual_properties.display_mode, /*is_undead=*/params->main_frame_routing_id == MSG_ROUTING_NONE, params->never_visible); - render_view->GetWidget()->set_delegate(render_view); RenderWidget* render_widget = render_view->GetWidget(); + render_widget->set_delegate(render_view); // Non-owning pointer that is self-referencing and destroyed by calling // Close(). The RenderViewImpl has a RenderWidget already, but not a // WebFrameWidget, which is now attached here. - auto* web_frame_widget = blink::WebFrameWidget::CreateForMainFrame( - render_view->GetWidget(), web_frame); + auto* web_frame_widget = + blink::WebFrameWidget::CreateForMainFrame(render_widget, web_frame); - render_widget->Init(std::move(show_callback), web_frame_widget); + render_widget->InitForMainFrame(std::move(show_callback), web_frame_widget); render_view->AttachWebFrameWidget(web_frame_widget); + // This call makes sure the page zoom is propagated to the provisional frame + // since it has to go through the WebViewImpl, and it may not be be changed + // in OnSynchronizeVisualProperties(), which would pass it along if it did + // change. + render_widget->UpdateWebViewWithDeviceScaleFactor(); render_widget->OnSynchronizeVisualProperties(params->visual_properties); // The WebFrame created here was already attached to the Page as its @@ -1512,7 +1517,7 @@ const base::UnguessableToken& devtools_frame_token, const FrameReplicationState& replicated_state, CompositorDependencies* compositor_deps, - const mojom::CreateFrameWidgetParams& widget_params, + const mojom::CreateFrameWidgetParams* widget_params, const FrameOwnerProperties& frame_owner_properties, bool has_committed_real_load) { // TODO(danakj): Split this method into two pieces. The first block makes a @@ -1621,12 +1626,14 @@ // For a main frame, we use the RenderWidget already attached to the // RenderView (this is being changed by https://crbug.com/419087). - // Main frames are always local roots, so they should always have a routing - // id. Surprisingly, this routing id is *not* used though, as the routing id - // on the existing RenderWidget is not changed. (I don't know why.) + // Main frames are always local roots, so they should always have a + // |widget_params| (and it always comes with a routing id). Surprisingly, + // this routing id is *not* used though, as the routing id on the existing + // RenderWidget is not changed. (I don't know why.) // TODO(crbug.com/888105): It's a bug that the RenderWidget is not using // this routing id. - DCHECK_NE(widget_params.routing_id, MSG_ROUTING_NONE); + DCHECK(widget_params); + DCHECK_NE(widget_params->routing_id, MSG_ROUTING_NONE); // The RenderViewImpl and its RenderWidget already exist by the time we // get here (we get them from the RenderFrameProxy). @@ -1646,13 +1653,20 @@ // WebFrameWidget since that would be part of creating the RenderWidget). render_widget->SetIsUndead(false); + // TODO(crbug.com/419087): This was added in 6ccadf770766e89c3 to prevent + // an empty ScreenInfo, but the WebView has already been created and + // initialized by RenderViewImpl, so this is surely redundant? It will be + // pulling the device scale factor off the WebView itself. + render_widget->UpdateWebViewWithDeviceScaleFactor(); + // Note that we do *not* call WebViewImpl's DidAttachLocalMainFrame() here // yet because this frame is provisional and not attached to the Page yet. // We will tell WebViewImpl about it once it is swapped in. render_frame->render_widget_ = render_widget; DCHECK(!render_frame->owned_render_widget_); - } else if (widget_params.routing_id != MSG_ROUTING_NONE) { + } else if (widget_params) { + DCHECK(widget_params->routing_id != MSG_ROUTING_NONE); // This frame is a child local root, so we require a separate RenderWidget // for it from any other frames in the frame tree. Each local root defines // a separate context/coordinate space/world for compositing, painting, @@ -1669,7 +1683,7 @@ // local root with a new compositing, painting, and input coordinate // space/context. std::unique_ptr<RenderWidget> render_widget = RenderWidget::CreateForFrame( - widget_params.routing_id, compositor_deps, + widget_params->routing_id, compositor_deps, render_view->page_properties(), blink::kWebDisplayModeUndefined, /*is_undead=*/false, /*never_visible=*/false); @@ -1684,12 +1698,17 @@ // will not be destroyed by scoped_refptr unless Close() has been called // and run. render_widget->InitForChildLocalRoot(web_frame_widget); + // TODO(crbug.com/419087): This was added in 6ccadf770766e89c3 to prevent + // an empty ScreenInfo, but the WebView has already been created and + // initialized by RenderViewImpl, so this is surely redundant? It will be + // pulling the device scale factor off the WebView itself. + render_widget->UpdateWebViewWithDeviceScaleFactor(); render_frame->render_widget_ = render_widget.get(); render_frame->owned_render_widget_ = std::move(render_widget); } - if (widget_params.routing_id != MSG_ROUTING_NONE) { + if (widget_params) { DCHECK(render_frame->render_widget_); // The RenderWidget should start with valid VisualProperties, including a // non-zero size. While RenderWidget would not normally receive IPCs and @@ -1697,7 +1716,7 @@ // we need at least one update to them in order to meet expectations in the // renderer, and that update comes as part of the CreateFrame message. render_frame->render_widget_->OnSynchronizeVisualProperties( - widget_params.visual_properties); + widget_params->visual_properties); } if (has_committed_real_load) @@ -3263,19 +3282,12 @@ static_cast<uint32_t>(offset), range)); } -bool RenderFrameImpl::SetZoomLevelOnRenderView(double zoom_level) { - return render_view_->SetZoomLevel(zoom_level); +void RenderFrameImpl::SetZoomLevel(double zoom_level) { + render_view_->UpdateZoomLevel(zoom_level); } -void RenderFrameImpl::SetPreferCompositingToLCDTextEnabledOnRenderView( - bool prefer) { - render_view_->SetPreferCompositingToLCDTextEnabled(prefer); -} - -void RenderFrameImpl::SetDeviceScaleFactorOnRenderView( - bool use_zoom_for_dsf, - float device_scale_factor) { - render_view_->SetDeviceScaleFactor(use_zoom_for_dsf, device_scale_factor); +double RenderFrameImpl::GetZoomLevel() { + return render_view_->page_zoom_level(); } void RenderFrameImpl::AddMessageToConsole( @@ -4058,8 +4070,17 @@ // mojom::HostZoom implementation ---------------------------------------------- void RenderFrameImpl::SetHostZoomLevel(const GURL& url, double zoom_level) { - DCHECK(is_main_frame_); - render_view_->SetHostZoomLevel(url, zoom_level); + // TODO(wjmaclean): We should see if this restriction is really necessary, + // since it isn't enforced in other parts of the page zoom system (e.g. + // when a users changes the zoom of a currently displayed page). Android + // has no UI for this, so in theory the following code would normally just use + // the default zoom anyways. +#if !defined(OS_ANDROID) + // On Android, page zoom isn't used, and in case of WebView, text zoom is used + // for legacy WebView text scaling emulation. Thus, the code that resets + // the zoom level from this map will be effectively resetting text zoom level. + host_zoom_levels_[url] = zoom_level; +#endif } // blink::WebLocalFrameClient implementation @@ -6074,6 +6095,45 @@ return params; } +void RenderFrameImpl::UpdateZoomLevel() { + if (!frame_->Parent()) { + // Reset the zoom limits in case a plugin had changed them previously. This + // will also call us back which will cause us to send a message to + // update WebContentsImpl. + render_view_->webview()->ZoomLimitsChanged( + ZoomFactorToZoomLevel(kMinimumZoomFactor), + ZoomFactorToZoomLevel(kMaximumZoomFactor)); + + // Set zoom level, but don't do it for full-page plugin since they don't use + // the same zoom settings. + auto host_zoom = host_zoom_levels_.find(GetLoadingUrl()); + if (render_view_->webview()->MainFrame()->IsWebLocalFrame() && + render_view_->webview() + ->MainFrame() + ->ToWebLocalFrame() + ->GetDocument() + .IsPluginDocument()) { + // Reset the zoom levels for plugins. + render_view_->SetZoomLevel(0); + } else { + // If the zoom level is not found, then do nothing. In-page navigation + // relies on not changing the zoom level in this case. + if (host_zoom != host_zoom_levels_.end()) + render_view_->SetZoomLevel(host_zoom->second); + } + + if (host_zoom != host_zoom_levels_.end()) { + // This zoom level was merely recorded transiently for this load. We can + // erase it now. If at some point we reload this page, the browser will + // send us a new, up-to-date zoom level. + host_zoom_levels_.erase(host_zoom); + } + } else { + // Subframes should match the zoom level of the main frame. + render_view_->SetZoomLevel(render_view_->page_zoom_level()); + } +} + bool RenderFrameImpl::UpdateNavigationHistory( const blink::WebHistoryItem& item, blink::WebHistoryCommitType commit_type) { @@ -6145,12 +6205,9 @@ render_view_->webview()->ResetScrollAndScaleState(); internal_data->set_must_reset_scroll_and_scale_state(false); } - if (!frame_->Parent()) { // Only for top frames. - // TODO(danakj): This seems redundant, the RenderWidget has the zoom set - // already via VisualProperties. Remove it. - render_view_->UpdateZoomLevelForNavigationCommitOfMainFrame( - GetLoadingUrl()); + UpdateZoomLevel(); + if (!frame_->Parent()) { // Only for top frames. RenderThreadImpl* render_thread_impl = RenderThreadImpl::current(); if (render_thread_impl) { // Can be NULL in tests. render_thread_impl->histogram_customizer()->RenderViewNavigatedToHost( @@ -6158,26 +6215,6 @@ } } - if (render_widget_) { - // This goes to WebViewImpl and sets the zoom factor which will be - // propagated down to this RenderFrameImpl's LocalFrame in blink. - // Non-local-roots are able to grab the value off their parents but local - // roots can not and this is a huge action-at-a-distance to make up for that - // flaw in how LocalFrame determines the zoom factor. - // TODO(danakj): This should not be needed if the zoom factor/device scale - // factor did not need to be propagated to each frame. Since they are a - // global that should be okay?? The test that fails without this, for - // child frames, is in content_browsertests: - // SitePerProcessHighDPIBrowserTest. - // SubframeLoadsWithCorrectDeviceScaleFactor - // And when UseZoomForDSF is disabled, in content_browsertests: - // IFrameZoomBrowserTest.SubframesDontZoomIndependently (and the whole - // suite). - render_view_->PropagatePageZoomToNewlyAttachedFrame( - render_widget_->compositor_deps()->IsUseZoomForDSFEnabled(), - render_view_->page_properties()->GetDeviceScaleFactor()); - } - // Remember that we've already processed this request, so we don't update // the session history again. We do this regardless of whether this is // a session history navigation, because if we attempted a session history @@ -6348,6 +6385,11 @@ CHECK(!render_view_->main_render_frame_); render_view_->main_render_frame_ = this; + // TODO(danakj): This was added in 02dffc89d823832ac8 due to the zoom factor + // not being scaled by DSF when the frame was provisional. We should + // properly scale the zoom factor all along. + render_view_->GetWidget()->UpdateWebViewWithDeviceScaleFactor(); + // The WebFrame being swapped in here has now been attached to the Page as // its main frame, and the WebFrameWidget was previously initialized when // the frame was created, so we can call WebViewImpl's
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 805bd94..044ae01 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -215,6 +215,9 @@ // owner FrameTreeNode. It can only be used for tagging requests and calls // for context frame attribution. It should never be passed back to the // browser as a frame identifier in the control flows calls. + // The |widget_params| is not null if the frame is to be a local root, which + // means it will own a RenderWidget, in which case the |widget_params| hold + // the routing id and initialization properties for the RenderWidget. // // Note: This is called only when RenderFrame is being created in response // to IPC message from the browser process. All other frame creation is driven @@ -235,7 +238,7 @@ const base::UnguessableToken& devtools_frame_token, const FrameReplicationState& replicated_state, CompositorDependencies* compositor_deps, - const mojom::CreateFrameWidgetParams& params, + const mojom::CreateFrameWidgetParams* widget_params, const FrameOwnerProperties& frame_owner_properties, bool has_committed_real_load); @@ -489,6 +492,8 @@ void SetSelectedText(const base::string16& selection_text, size_t offset, const gfx::Range& range) override; + void SetZoomLevel(double zoom_level) override; + double GetZoomLevel() override; void AddMessageToConsole(blink::mojom::ConsoleMessageLevel level, const std::string& message) override; void SetPreviewsState(PreviewsState previews_state) override; @@ -913,16 +918,6 @@ media::MediaPermission* GetMediaPermission(); - // Proxies the call to set the zoom level over to the RenderViewImpl and - // returns its result. - bool SetZoomLevelOnRenderView(double zoom_level); - // Proxies the call to set the prefer compositing flag over to the - // RenderViewImpl. - void SetPreferCompositingToLCDTextEnabledOnRenderView(bool prefer); - // Proxies the call to set the device scale factor over to the RenderViewImpl. - void SetDeviceScaleFactorOnRenderView(bool use_zoom_for_dsf, - float device_scale_factor); - // Sends the current frame's navigation state to the browser. void SendUpdateState(); @@ -1089,6 +1084,8 @@ class FrameURLLoaderFactory; + typedef std::map<GURL, double> HostZoomLevels; + // Creates a new RenderFrame. |render_view| is the RenderView object that this // frame belongs to, |interface_provider| is the RenderFrameHost's // InterfaceProvider through which services are exposed to the RenderFrame, @@ -1354,6 +1351,9 @@ MakeDidCommitProvisionalLoadParams(blink::WebHistoryCommitType commit_type, ui::PageTransition transition); + // Updates the Zoom level of the render view to match current content. + void UpdateZoomLevel(); + // Updates the navigation history depending on the passed parameters. // This could result either in the creation of a new entry or a modification // of the current entry or nothing. If a new entry was created, @@ -1679,6 +1679,8 @@ PepperPluginInstanceImpl* pepper_last_mouse_event_target_; #endif + HostZoomLevels host_zoom_levels_; + using AutoplayOriginAndFlags = std::pair<url::Origin, int32_t>; AutoplayOriginAndFlags autoplay_flags_;
diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc index ab2c344..23961e9b 100644 --- a/content/renderer/render_frame_impl_browsertest.cc +++ b/content/renderer/render_frame_impl_browsertest.cc
@@ -101,6 +101,7 @@ void LoadChildFrame() { mojom::CreateFrameWidgetParams widget_params; widget_params.routing_id = kSubframeWidgetRouteId; + widget_params.visual_properties.new_size = gfx::Size(100, 100); FrameReplicationState frame_replication_state; frame_replication_state.name = "frame"; @@ -135,7 +136,7 @@ std::move(stub_browser_interface_broker), MSG_ROUTING_NONE, MSG_ROUTING_NONE, kFrameProxyRouteId, MSG_ROUTING_NONE, base::UnguessableToken::Create(), frame_replication_state, - &compositor_deps_, widget_params, FrameOwnerProperties(), + &compositor_deps_, &widget_params, FrameOwnerProperties(), /*has_committed_real_load=*/true); frame_ = static_cast<TestRenderFrame*>(
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 51796ca..815bc3c 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -49,8 +49,8 @@ #include "cc/mojo_embedder/async_layer_tree_frame_sink.h" #include "cc/raster/task_graph_runner.h" #include "cc/trees/layer_tree_frame_sink.h" -#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_settings.h" +#include "cc/trees/ukm_manager.h" #include "components/discardable_memory/client/client_discardable_shared_memory_manager.h" #include "components/metrics/public/mojom/single_sample_metrics.mojom.h" #include "components/metrics/single_sample_metrics.h" @@ -92,7 +92,6 @@ #include "content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h" #include "content/renderer/media/render_media_client.h" #include "content/renderer/media/webrtc/peer_connection_tracker.h" -#include "content/renderer/media/webrtc/rtc_peer_connection_handler.h" #include "content/renderer/net_info_helper.h" #include "content/renderer/render_frame_proxy.h" #include "content/renderer/render_process_impl.h" @@ -147,7 +146,6 @@ #include "third_party/blink/public/platform/web_scoped_page_pauser.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/public/web/blink.h" -#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h" #include "third_party/blink/public/web/web_document.h" #include "third_party/blink/public/web/web_frame.h" #include "third_party/blink/public/web/web_script_controller.h" @@ -746,9 +744,6 @@ new PeerConnectionTracker(main_thread_runner())); AddObserver(peer_connection_tracker_.get()); - peer_connection_factory_.reset(new blink::PeerConnectionDependencyFactory( - /*create_p2p_socket_dispatcher =*/true)); - unfreezable_message_filter_ = new UnfreezableMessageFilter(this); AddFilter(unfreezable_message_filter_.get()); @@ -1999,11 +1994,6 @@ return &associated_interfaces_; } -blink::PeerConnectionDependencyFactory* -RenderThreadImpl::GetPeerConnectionDependencyFactory() { - return peer_connection_factory_.get(); -} - mojom::RenderMessageFilter* RenderThreadImpl::render_message_filter() { if (!render_message_filter_) GetChannel()->GetRemoteAssociatedInterface(&render_message_filter_); @@ -2057,7 +2047,7 @@ std::move(browser_interface_broker), params->previous_routing_id, params->opener_routing_id, params->parent_routing_id, params->previous_sibling_routing_id, params->devtools_frame_token, - params->replication_state, compositor_deps, *params->widget_params, + params->replication_state, compositor_deps, params->widget_params.get(), params->frame_owner_properties, params->has_committed_real_load); }
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h index 40041ff..8e05e39 100644 --- a/content/renderer/render_thread_impl.h +++ b/content/renderer/render_thread_impl.h
@@ -72,7 +72,6 @@ class SkBitmap; namespace blink { -class PeerConnectionDependencyFactory; class WebVideoCaptureImplManager; } @@ -308,9 +307,6 @@ return browser_plugin_manager_.get(); } - // Returns a factory used for creating RTC PeerConnection objects. - blink::PeerConnectionDependencyFactory* GetPeerConnectionDependencyFactory(); - PeerConnectionTracker* peer_connection_tracker() { return peer_connection_tracker_.get(); } @@ -577,9 +573,6 @@ std::unique_ptr<BrowserPluginManager> browser_plugin_manager_; - std::unique_ptr<blink::PeerConnectionDependencyFactory> - peer_connection_factory_; - // This is used to communicate to the browser process the status // of all the peer connections created in the renderer. std::unique_ptr<PeerConnectionTracker> peer_connection_tracker_;
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index 7f82f28..d587d02 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc
@@ -425,6 +425,10 @@ return view()->preferred_size_; } + void SetZoomLevel(double level) { view()->UpdateZoomLevel(level); } + + double GetZoomLevel() { return view()->page_zoom_level(); } + int GetScrollbarWidth() { blink::WebView* webview = view()->webview(); return webview->MainFrameWidget()->Size().width - @@ -1062,7 +1066,7 @@ std::move(stub_browser_interface_broker), kProxyRoutingId, MSG_ROUTING_NONE, MSG_ROUTING_NONE, MSG_ROUTING_NONE, base::UnguessableToken::Create(), replication_state, nullptr, - widget_params, FrameOwnerProperties(), /*has_committed_real_load=*/true); + &widget_params, FrameOwnerProperties(), /*has_committed_real_load=*/true); TestRenderFrame* provisional_frame = static_cast<TestRenderFrame*>(RenderFrameImpl::FromRoutingID(routing_id)); EXPECT_TRUE(provisional_frame); @@ -1128,8 +1132,6 @@ stub_browser_interface_broker; ignore_result(stub_browser_interface_broker.InitWithNewPipeAndPassReceiver()); - mojom::CreateFrameWidgetParams widget_params; - widget_params.routing_id = MSG_ROUTING_NONE; RenderFrameImpl::CreateFrame( routing_id, std::move(stub_interface_provider), std::move(stub_document_interface_broker_content), @@ -1137,7 +1139,8 @@ std::move(stub_browser_interface_broker), kProxyRoutingId, MSG_ROUTING_NONE, frame()->GetRoutingID(), MSG_ROUTING_NONE, base::UnguessableToken::Create(), replication_state, nullptr, - widget_params, FrameOwnerProperties(), /*has_committed_real_load=*/true); + /*widget_params=*/nullptr, FrameOwnerProperties(), + /*has_committed_real_load=*/true); { TestRenderFrame* provisional_frame = static_cast<TestRenderFrame*>( RenderFrameImpl::FromRoutingID(routing_id)); @@ -2347,7 +2350,7 @@ gfx::Size size = GetPreferredSize(); EXPECT_EQ(gfx::Size(400 + scrollbar_width, 400), size); - EXPECT_TRUE(view()->SetZoomLevel(ZoomFactorToZoomLevel(2.0))); + SetZoomLevel(ZoomFactorToZoomLevel(2.0)); size = GetPreferredSize(); EXPECT_EQ(gfx::Size(800 + scrollbar_width, 800), size); } @@ -2728,12 +2731,13 @@ } TEST_F(RenderViewImplTest, ZoomLevelUpdate) { - // 0 will use the minimum zoom level, which is the default, nothing will - // change. - EXPECT_FALSE(view()->SetZoomLevel(0)); + // 0 is the default zoom level, nothing will change. + SetZoomLevel(0); + EXPECT_NEAR(0.0, GetZoomLevel(), 0.01); // Change the zoom level to 25% and check if the view gets the change. - EXPECT_TRUE(view()->SetZoomLevel(content::ZoomFactorToZoomLevel(0.25))); + SetZoomLevel(content::ZoomFactorToZoomLevel(0.25)); + EXPECT_NEAR(content::ZoomFactorToZoomLevel(0.25), GetZoomLevel(), 0.01); } #endif
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 866f7e7..4b7df6e3 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -124,7 +124,6 @@ #include "third_party/blink/public/platform/web_vector.h" #include "third_party/blink/public/public_buildflags.h" #include "third_party/blink/public/web/modules/mediastream/web_media_stream_device_observer.h" -#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h" #include "third_party/blink/public/web/web_autofill_client.h" #include "third_party/blink/public/web/web_ax_object.h" #include "third_party/blink/public/web/web_document.h" @@ -512,18 +511,12 @@ render_widget_ = RenderWidget::CreateForFrame( params->main_frame_widget_routing_id, compositor_deps, page_properties(), params->visual_properties.display_mode, - /*is_undead=*/params->main_frame_routing_id == MSG_ROUTING_NONE, - params->never_visible); - GetWidget()->set_delegate(this); - // Note: The GetWidget->Init() call causes an AddRef() to itself meaning - // that IPC system has taken conceptual ownership of the object. Though it - // is tempting to have RenderView retain the RenderWidget(), this lifecycle - // only requires single ownership and adding scoped_refptr<RenderWidget> - // muddies this unnecessarily -- especially since this RenderWidget should - // ultimately be own by the main frame. + /*is_undead=*/true, params->never_visible); + render_widget_->set_delegate(this); // We intentionally pass in a null webwidget since it shouldn't be needed // for remote frames. - GetWidget()->Init(std::move(show_callback), nullptr); + render_widget_->InitForMainFrame(std::move(show_callback), + /*web_frame_widget=*/nullptr); RenderFrameProxy::CreateFrameProxy(params->proxy_routing_id, GetRoutingID(), opener_frame, MSG_ROUTING_NONE, @@ -1024,7 +1017,7 @@ } void RenderViewImpl::Destroy() { - GetWidget()->PrepareForClose(); + render_widget_->PrepareForClose(); webview_->Close(); // The webview_ is already destroyed by the time we get here, remove any @@ -1032,7 +1025,12 @@ g_view_map.Get().erase(webview_); webview_ = nullptr; - GetWidget()->Close(std::move(render_widget_)); + // We pass ownership of |render_widget_| to itself. Grab a raw pointer to call + // the Close() method on so we don't have to be a C++ expert to know whether + // we will end up with a nullptr where we didn't intend due to order of + // execution. + RenderWidget* closing_widget = render_widget_.get(); + closing_widget->Close(std::move(render_widget_)); g_routing_id_view_map.Get().erase(GetRoutingID()); @@ -1070,7 +1068,7 @@ const blink::WebMouseEvent& event) { // If the mouse is locked, only the current owner of the mouse lock can // process mouse events. - return GetWidget()->mouse_lock_dispatcher()->WillHandleMouseEvent(event); + return render_widget_->mouse_lock_dispatcher()->WillHandleMouseEvent(event); } void RenderViewImpl::SetActiveForWidget(bool active) { @@ -1416,7 +1414,7 @@ base::Unretained(creator_frame), opened_by_user_gesture); RenderViewImpl* view = RenderViewImpl::Create( - GetWidget()->compositor_deps(), std::move(view_params), + render_widget_->compositor_deps(), std::move(view_params), std::move(show_callback), creator->GetTaskRunner(blink::TaskType::kInternalDefault)); @@ -1449,7 +1447,7 @@ // state off it for the popup. // TODO(crbug.com/419087): This should probably be using the local root's // RenderWidget for the frame making the popup. - RenderWidget* view_render_widget = GetWidget(); + RenderWidget* view_render_widget = render_widget_.get(); RenderWidget* popup_widget = RenderWidget::CreateForPopup( widget_routing_id, view_render_widget->compositor_deps(), @@ -1513,14 +1511,14 @@ void RenderViewImpl::PrintPage(WebLocalFrame* frame) { RenderFrameImpl::FromWebFrame(frame)->ScriptedPrint( - GetWidget()->input_handler().handling_input_event()); + render_widget_->input_handler().handling_input_event()); } void RenderViewImpl::AttachWebFrameWidget(blink::WebFrameWidget* frame_widget) { // The previous WebFrameWidget must already be detached by CloseForFrame(). DCHECK(!frame_widget_); frame_widget_ = frame_widget; - GetWidget()->SetWebWidgetInternal(frame_widget); + render_widget_->SetWebWidgetInternal(frame_widget); // Initialization for the WebFrameWidget that should only occur for the main // frame, and that uses types not allowed in blink. This should maybe be @@ -1535,88 +1533,24 @@ // We should detach when making the RenderWidget undead so we don't expect it // to be undead already. But when it is recycled for a provisional frame, then // we can detach when closing the provisional frame. - DCHECK(GetWidget()->IsUndeadOrProvisional() || GetWidget()->is_closing()); + DCHECK(render_widget_->IsUndeadOrProvisional() || + render_widget_->is_closing()); DCHECK(frame_widget_); frame_widget_->Close(); frame_widget_ = nullptr; // This just clears the webwidget_internal_ member from RenderWidget. - GetWidget()->SetWebWidgetInternal(nullptr); + render_widget_->SetWebWidgetInternal(nullptr); } -void RenderViewImpl::SetHostZoomLevel(const GURL& url, double zoom_level) { - // TODO(wjmaclean): We should see if this restriction is really necessary, - // since it isn't enforced in other parts of the page zoom system (e.g. - // when a users changes the zoom of a currently displayed page). Android - // has no UI for this, so in theory the following code would normally just use - // the default zoom anyways. -#if !defined(OS_ANDROID) - // On Android, page zoom isn't used, and in case of WebView, text zoom is used - // for legacy WebView text scaling emulation. Thus, the code that resets - // the zoom level from this map will be effectively resetting text zoom level. - host_zoom_levels_[url] = zoom_level; -#endif -} - -void RenderViewImpl::UpdateZoomLevelForNavigationCommitOfMainFrame( - const GURL& loading_url) { - // Reset the zoom limits in case a plugin had changed them previously. This - // will also call us back via ZoomLimitsChanged() which will cause us to send - // a message to update WebContentsImpl. - webview()->ZoomLimitsChanged(ZoomFactorToZoomLevel(kMinimumZoomFactor), - ZoomFactorToZoomLevel(kMaximumZoomFactor)); - - auto host_zoom_it = host_zoom_levels_.find(loading_url); - - // Full-page plugin documents always use the default zoom level. Otherwise, - // apply the zoom level specified by the browser in the |host_zoom_levels_| - // map, if present. - WebFrame* main_frame = webview()->MainFrame(); - if (main_frame->IsWebLocalFrame() && - main_frame->ToWebLocalFrame()->GetDocument().IsPluginDocument()) { - SetZoomLevel(0); - } else if (host_zoom_it != host_zoom_levels_.end()) { - SetZoomLevel(host_zoom_it->second); - } - - // This zoom level was merely recorded transiently for a single navigation. - // We can erase it now. On another navigation/reload, the browser will another - // zoom level. - host_zoom_levels_.clear(); -} - -bool RenderViewImpl::SetZoomLevel(double zoom_level) { - if (zoom_level == page_zoom_level_) - return false; - +void RenderViewImpl::SetZoomLevel(double zoom_level) { // If we change the zoom level for the view, make sure any subsequent subframe // loads reflect the current zoom level. page_zoom_level_ = zoom_level; + webview()->SetZoomLevel(zoom_level); for (auto& observer : observers_) observer.OnZoomLevelChanged(); - return true; -} - -void RenderViewImpl::SetPreferCompositingToLCDTextEnabled(bool prefer) { - webview()->GetSettings()->SetPreferCompositingToLCDTextEnabled(prefer); -} - -void RenderViewImpl::SetDeviceScaleFactor(bool use_zoom_for_dsf, - float device_scale_factor) { - if (use_zoom_for_dsf) - webview()->SetZoomFactorForDeviceScaleFactor(device_scale_factor); - else - webview()->SetDeviceScaleFactor(device_scale_factor); -} - -void RenderViewImpl::PropagatePageZoomToNewlyAttachedFrame( - bool use_zoom_for_dsf, - float device_scale_factor) { - if (use_zoom_for_dsf) - webview()->SetZoomFactorForDeviceScaleFactor(device_scale_factor); - else - webview()->SetZoomLevel(page_zoom_level_); } void RenderViewImpl::SetValidationMessageDirection( @@ -1769,9 +1703,8 @@ TRACE_EVENT_INSTANT1("renderer", "is_animated", TRACE_EVENT_SCOPE_THREAD, "animated", animate); - if (GetWidget() && GetWidget()->layer_tree_view()) { - GetWidget() - ->layer_tree_view() + if (render_widget_ && render_widget_->layer_tree_view()) { + render_widget_->layer_tree_view() ->layer_tree_host() ->UpdateBrowserControlsState(ContentToCc(constraints), ContentToCc(current), animate); @@ -1815,11 +1748,11 @@ void RenderViewImpl::SetEditCommandForNextKeyEvent(const std::string& name, const std::string& value) { - GetWidget()->SetEditCommandForNextKeyEvent(name, value); + render_widget_->SetEditCommandForNextKeyEvent(name, value); } void RenderViewImpl::ClearEditCommands() { - GetWidget()->ClearEditCommands(); + render_widget_->ClearEditCommands(); } const std::string& RenderViewImpl::GetAcceptLanguages() { @@ -1887,7 +1820,7 @@ CHECK_NE(message->routing_id(), MSG_ROUTING_NONE); // Don't send any messages after the browser has told us to close. - if (GetWidget()->is_closing()) { + if (render_widget_->is_closing()) { delete message; return false; } @@ -1911,7 +1844,7 @@ } gfx::Size RenderViewImpl::GetSize() { - return GetWidget()->size(); + return render_widget_->size(); } float RenderViewImpl::GetDeviceScaleFactor() { @@ -1944,6 +1877,11 @@ webview()->SetPageScaleFactor(page_scale_factor); } +void RenderViewImpl::UpdateZoomLevel(double zoom_level) { + webview()->CancelPagePopup(); + SetZoomLevel(zoom_level); +} + void RenderViewImpl::ApplyPageHidden(bool hidden, bool initial_setting) { webview()->SetIsHidden(hidden, initial_setting); // Note: RenderWidget visibility is separately set from the IPC handlers, and @@ -2176,7 +2114,7 @@ } void RenderViewImpl::DidAutoResize(const blink::WebSize& newSize) { - GetWidget()->DidAutoResize(newSize); + render_widget_->DidAutoResize(newSize); } void RenderViewImpl::DidFocus(blink::WebLocalFrame* calling_frame) { @@ -2260,16 +2198,16 @@ if (webview()->MainFrame()->IsWebRemoteFrame()) return; - if (enable == GetWidget()->has_focus()) + if (enable == render_widget_->has_focus()) return; if (enable) { SetActiveForWidget(true); // Fake an IPC message so go through the IPC handler. - GetWidget()->OnSetFocus(true); + render_widget_->OnSetFocus(true); } else { // Fake an IPC message so go through the IPC handler. - GetWidget()->OnSetFocus(false); + render_widget_->OnSetFocus(false); SetActiveForWidget(false); } }
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 75724b0..92952cd3 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h
@@ -14,7 +14,6 @@ #include <string> #include <vector> -#include "base/containers/flat_map.h" #include "base/containers/id_map.h" #include "base/gtest_prod_util.h" #include "base/macros.h" @@ -167,26 +166,10 @@ void AddObserver(RenderViewObserver* observer); void RemoveObserver(RenderViewObserver* observer); - // Stores a map of url to zoom level, specified by the browser. - void SetHostZoomLevel(const GURL& url, double zoom_level); + // Sets the zoom level and notifies observers. + void SetZoomLevel(double zoom_level); - // When the main frame commits, the zoom level may need to be changed. - void UpdateZoomLevelForNavigationCommitOfMainFrame(const GURL& loading_url); - - // Sets the zoom level and notifies observers. Returns true if the zoom level - // changed. A value of 0 means the default zoom level. - bool SetZoomLevel(double zoom_level); - - // Passes along the prefer compositing preference to the WebView's settings. - void SetPreferCompositingToLCDTextEnabled(bool prefer); - - // Passes along the device scale factor to the WebView. - void SetDeviceScaleFactor(bool use_zoom_for_dsf, float device_scale_factor); - - // Passes along the page zoom to the WebView to set it on a newly attached - // LocalFrame. - void PropagatePageZoomToNewlyAttachedFrame(bool use_zoom_for_dsf, - float device_scale_factor); + double page_zoom_level() { return page_zoom_level_; } // Sets page-level focus in this view and notifies plugins and Blink's // FocusController. @@ -317,6 +300,7 @@ bool renderer_wide_named_frame_lookup() { return renderer_wide_named_frame_lookup_; } + void UpdateZoomLevel(double zoom_level); protected: RenderViewImpl(CompositorDependencies* compositor_deps, @@ -659,9 +643,6 @@ // they should match page zoom level. double page_zoom_level_ = 0; - // A map of urls to zoom levels specified by the browser. - base::flat_map<GURL, double> host_zoom_levels_; - // Helper objects ------------------------------------------------------------ RenderFrameImpl* main_render_frame_ = nullptr;
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index a910da7..20a7f24 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc
@@ -391,9 +391,8 @@ #endif } -static bool ComputePreferCompositingToLCDText( - CompositorDependencies* compositor_deps, - float device_scale_factor) { +static bool PreferCompositingToLCDText(CompositorDependencies* compositor_deps, + float device_scale_factor) { const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); if (command_line.HasSwitch(switches::kDisablePreferCompositingToLCDText)) @@ -509,11 +508,20 @@ Init(std::move(show_callback), web_page_popup); } +void RenderWidget::InitForPepperFullscreen(ShowCallback show_callback, + blink::WebWidget* web_widget) { + pepper_fullscreen_ = true; + Init(std::move(show_callback), web_widget); +} + +void RenderWidget::InitForMainFrame(ShowCallback show_callback, + blink::WebFrameWidget* web_frame_widget) { + Init(std::move(show_callback), web_frame_widget); +} + void RenderWidget::InitForChildLocalRoot( blink::WebFrameWidget* web_frame_widget) { for_child_local_root_frame_ = true; - // Init() increments the reference count on |this|, making it - // self-referencing. Init(base::NullCallback(), web_frame_widget); } @@ -787,9 +795,6 @@ if (delegate()) { if (size_ != visual_properties.new_size) { // Only hide popups when the size changes. Eg https://crbug.com/761908. - // TODO(danakj): If OnSynchronizeVisualProperties doesn't happen on an - // undead widget then this can go through the WebFrameWidget->WebView - // instead of through the delegate, letting us delete that delegate API. delegate()->CancelPagePopupForWidget(); } @@ -798,25 +803,10 @@ delegate()->ApplyNewDisplayModeForWidget(visual_properties.display_mode); } - bool auto_resize_mode_changed = - auto_resize_mode_ != visual_properties.auto_resize_enabled; - auto_resize_mode_ = visual_properties.auto_resize_enabled; - min_size_for_auto_resize_ = visual_properties.min_size_for_auto_resize; - max_size_for_auto_resize_ = visual_properties.max_size_for_auto_resize; - - if (auto_resize_mode_) { - gfx::Size min_auto_size = min_size_for_auto_resize_; - gfx::Size max_auto_size = max_size_for_auto_resize_; - if (compositor_deps_->IsUseZoomForDSFEnabled()) { - min_auto_size = gfx::ScaleToCeiledSize( - min_auto_size, visual_properties.screen_info.device_scale_factor); - max_auto_size = gfx::ScaleToCeiledSize( - max_auto_size, visual_properties.screen_info.device_scale_factor); - } - delegate()->ApplyAutoResizeLimitsForWidget(min_auto_size, max_auto_size); - } else if (auto_resize_mode_changed) { - delegate()->DisableAutoResizeForWidget(); - } + SetAutoResizeMode(visual_properties.auto_resize_enabled, + visual_properties.min_size_for_auto_resize, + visual_properties.max_size_for_auto_resize, + visual_properties.screen_info.device_scale_factor); browser_controls_shrink_blink_size_ = visual_properties.browser_controls_shrink_blink_size; @@ -839,29 +829,9 @@ ignore_resize_ipc = true; } + UpdateZoom(visual_properties.zoom_level); + if (for_frame()) { - // TODO(danakj): This should not need to go through RenderFrame to set - // Page-level properties. - blink::WebFrameWidget* frame_widget = GetFrameWidget(); - DCHECK(frame_widget); - RenderFrameImpl* render_frame = - RenderFrameImpl::FromWebFrame(frame_widget->LocalRoot()); - - bool zoom_level_changed = - render_frame->SetZoomLevelOnRenderView(visual_properties.zoom_level); - if (zoom_level_changed) { - // Hide popups when the zoom changes. - blink::WebView* web_view = frame_widget->LocalRoot()->View(); - web_view->CancelPagePopup(); - - // Propagate changes down to child local root RenderWidgets and - // BrowserPlugins in other frame trees/processes. - for (auto& observer : render_frame_proxies_) - observer.OnZoomLevelChanged(visual_properties.zoom_level); - for (auto& plugin : browser_plugins_) - plugin.OnZoomLevelChanged(visual_properties.zoom_level); - } - bool capture_sequence_number_changed = visual_properties.capture_sequence_number != last_capture_sequence_number_; @@ -886,7 +856,7 @@ visual_properties.bottom_controls_height, visual_properties.browser_controls_shrink_blink_size); - if (!visual_properties.auto_resize_enabled) { + if (!auto_resize_mode_) { if (visual_properties.is_fullscreen_granted != is_fullscreen_granted_) { is_fullscreen_granted_ = visual_properties.is_fullscreen_granted; if (is_fullscreen_granted_) @@ -993,6 +963,31 @@ } } +void RenderWidget::SetAutoResizeMode(bool auto_resize, + const gfx::Size& min_size_before_dsf, + const gfx::Size& max_size_before_dsf, + float device_scale_factor) { + bool was_changed = auto_resize_mode_ != auto_resize; + auto_resize_mode_ = auto_resize; + + min_size_for_auto_resize_ = min_size_before_dsf; + max_size_for_auto_resize_ = max_size_before_dsf; + + if (auto_resize) { + gfx::Size min_auto_size = min_size_for_auto_resize_; + gfx::Size max_auto_size = max_size_for_auto_resize_; + if (compositor_deps_->IsUseZoomForDSFEnabled()) { + min_auto_size = + gfx::ScaleToCeiledSize(min_auto_size, device_scale_factor); + max_auto_size = + gfx::ScaleToCeiledSize(max_auto_size, device_scale_factor); + } + delegate()->ApplyAutoResizeLimitsForWidget(min_auto_size, max_auto_size); + } else if (was_changed) { + delegate()->DisableAutoResizeForWidget(); + } +} + void RenderWidget::OnDisableDeviceEmulation() { screen_metrics_emulator_.reset(); } @@ -1702,6 +1697,27 @@ return layer_tree_view_->layer_tree_host()->device_viewport_rect(); } +void RenderWidget::UpdateZoom(double zoom_level) { + blink::WebFrameWidget* frame_widget = GetFrameWidget(); + if (!frame_widget) + return; + RenderFrameImpl* render_frame = + RenderFrameImpl::FromWebFrame(frame_widget->LocalRoot()); + + // Return early if zoom level is unchanged. + if (render_frame->GetZoomLevel() == zoom_level) { + return; + } + + render_frame->SetZoomLevel(zoom_level); + + for (auto& observer : render_frame_proxies_) + observer.OnZoomLevelChanged(zoom_level); + + for (auto& plugin : browser_plugins_) + plugin.OnZoomLevelChanged(zoom_level); +} + void RenderWidget::SynchronizeVisualProperties( const VisualProperties& visual_properties) { // This method needs to handle changes to the screen_info, new_size, and @@ -1710,7 +1726,7 @@ // but not others. gfx::Rect new_compositor_viewport_pixel_rect = - visual_properties.auto_resize_enabled + auto_resize_mode_ ? gfx::Rect(gfx::ScaleToCeiledSize( size_, visual_properties.screen_info.device_scale_factor)) : visual_properties.compositor_viewport_pixel_rect; @@ -1719,28 +1735,7 @@ viz::LocalSurfaceIdAllocation()), new_compositor_viewport_pixel_rect, visual_properties.screen_info); - if (for_frame()) { - // TODO(danakj): This should not need to go through RenderFrame to set - // Page-level properties. - blink::WebFrameWidget* frame_widget = GetFrameWidget(); - // TODO(danakj): Stop doing SynchronizeVisualProperties() (due to emulation) - // while undead, and change this to a DCHECK. - if (frame_widget) { - RenderFrameImpl* render_frame = - RenderFrameImpl::FromWebFrame(frame_widget->LocalRoot()); - - // This causes compositing state to be modified which dirties the document - // lifecycle. Android Webview relies on the document lifecycle being clean - // after the RenderWidget is initialized, in order to send IPCs that query - // and change compositing state. So ResizeWebWidget() must come after this - // call, as it runs the entire document lifecycle. - render_frame->SetPreferCompositingToLCDTextEnabledOnRenderView( - ComputePreferCompositingToLCDText( - compositor_deps_, page_properties_->GetDeviceScaleFactor())); - } - } - - if (!visual_properties.auto_resize_enabled) { + if (!auto_resize_mode_) { visible_viewport_size_ = visual_properties.visible_viewport_size; display_mode_ = visual_properties.display_mode; size_ = visual_properties.new_size; @@ -2038,6 +2033,24 @@ close_weak_ptr_factory_.InvalidateWeakPtrs(); } +void RenderWidget::UpdateWebViewWithDeviceScaleFactor() { + blink::WebFrameWidget* frame_widget = GetFrameWidget(); + blink::WebFrame* current_frame = + frame_widget ? frame_widget->LocalRoot() : nullptr; + blink::WebView* webview = current_frame ? current_frame->View() : nullptr; + if (webview) { + if (compositor_deps_->IsUseZoomForDSFEnabled()) + webview->SetZoomFactorForDeviceScaleFactor( + page_properties_->GetDeviceScaleFactor()); + else + webview->SetDeviceScaleFactor(page_properties_->GetDeviceScaleFactor()); + + webview->GetSettings()->SetPreferCompositingToLCDTextEnabled( + PreferCompositingToLCDText(compositor_deps_, + page_properties_->GetDeviceScaleFactor())); + } +} + blink::WebFrameWidget* RenderWidget::GetFrameWidget() const { // TODO(danakj): Remove this check and don't call this method for non-frames. if (!for_frame()) @@ -2265,6 +2278,9 @@ new_screen_info.orientation_angle || page_properties_->GetScreenInfo().orientation_type != new_screen_info.orientation_type; + bool web_device_scale_factor_changed = + page_properties_->GetScreenInfo().device_scale_factor != + new_screen_info.device_scale_factor; ScreenInfo previous_original_screen_info = GetOriginalScreenInfo(); local_surface_id_allocation_from_parent_ = new_local_surface_id_allocation; @@ -2286,35 +2302,17 @@ if (orientation_changed) OnOrientationChange(); - if (for_frame()) { - // TODO(danakj): This should not need to go through RenderFrame to set - // Page-level properties. - blink::WebFrameWidget* frame_widget = GetFrameWidget(); - // TODO(danakj): Stop sending/receiving visual properties while undead, and - // change this to a DCHECK. - if (frame_widget) { - RenderFrameImpl* render_frame = - RenderFrameImpl::FromWebFrame(frame_widget->LocalRoot()); - // TODO(danakj): RenderWidget knows the DSF and could avoid calling into - // blink when it hasn't changed, but it sets an initial |screen_info_| - // during construction, so it is hard to tell if the value is not the - // default value once we get to OnSynchronizeVisualProperties. Thus we - // call into blink unconditionally and let it early out if it's already - // set. - render_frame->SetDeviceScaleFactorOnRenderView( - compositor_deps_->IsUseZoomForDSFEnabled(), - page_properties_->GetDeviceScaleFactor()); - } - } - - // Propagate changes down to child local root RenderWidgets and BrowserPlugins - // in other frame trees/processes. if (previous_original_screen_info != GetOriginalScreenInfo()) { for (auto& observer : render_frame_proxies_) observer.OnScreenInfoChanged(GetOriginalScreenInfo()); + + // Notify all embedded BrowserPlugins of the updated ScreenInfo. for (auto& observer : browser_plugins_) observer.ScreenInfoChanged(GetOriginalScreenInfo()); } + + if (web_device_scale_factor_changed) + UpdateWebViewWithDeviceScaleFactor(); } void RenderWidget::SetWindowRectSynchronously( @@ -3802,15 +3800,6 @@ "must be done via the RenderView."; delegate()->ResizeVisualViewportForWidget(visible_viewport_size); - // TODO(danakj): This should not need to go through RenderFrame to set - // Page-level properties. - blink::WebFrameWidget* frame_widget = GetFrameWidget(); - RenderFrameImpl* render_frame = - RenderFrameImpl::FromWebFrame(frame_widget->LocalRoot()); - render_frame->SetPreferCompositingToLCDTextEnabledOnRenderView( - ComputePreferCompositingToLCDText( - compositor_deps_, page_properties_->GetDeviceScaleFactor())); - // Make sure the DSF override stays for future VisualProperties updates, and // that includes overriding the VisualProperties' // compositor_viewport_pixel_rect with size * this for-testing DSF. @@ -3836,43 +3825,23 @@ void RenderWidget::EnableAutoResizeForTesting(const gfx::Size& min_size, const gfx::Size& max_size) { - VisualProperties visual_properties; - visual_properties.auto_resize_enabled = true; - visual_properties.min_size_for_auto_resize = min_size; - visual_properties.max_size_for_auto_resize = max_size; - visual_properties.local_surface_id_allocation = - base::Optional<viz::LocalSurfaceIdAllocation>( - viz::LocalSurfaceIdAllocation( - viz::LocalSurfaceId(1, 1, base::UnguessableToken::Create()), - base::TimeTicks::Now())); - OnSynchronizeVisualProperties(visual_properties); + SetAutoResizeMode(true, min_size, max_size, + page_properties_->GetDeviceScaleFactor()); } void RenderWidget::DisableAutoResizeForTesting(const gfx::Size& new_size) { if (!auto_resize_mode_) return; - VisualProperties visual_properties; - visual_properties.auto_resize_enabled = false; - visual_properties.screen_info = page_properties_->GetScreenInfo(); - visual_properties.new_size = new_size; - visual_properties.compositor_viewport_pixel_rect = CompositorViewportRect(); - visual_properties.browser_controls_shrink_blink_size = - browser_controls_shrink_blink_size_; - visual_properties.top_controls_height = top_controls_height_; - visual_properties.visible_viewport_size = visible_viewport_size_; - visual_properties.is_fullscreen_granted = is_fullscreen_granted_; - visual_properties.display_mode = display_mode_; + SetAutoResizeMode(false, gfx::Size(), gfx::Size(), + page_properties_->GetDeviceScaleFactor()); - if (new_size.IsEmpty()) { - // The |new_size| is empty when resetting auto resize in between tests. In - // this case the current size should just be preserved. - visual_properties.new_size = size_; - } else { - visual_properties.new_size = new_size; + // The |new_size| is empty when resetting auto resize in between tests. In + // this case the current size should just be preserved. + if (!new_size.IsEmpty()) { + size_ = new_size; + ResizeWebWidget(); } - - OnSynchronizeVisualProperties(visual_properties); } blink::WebLocalFrame* RenderWidget::GetFocusedWebLocalFrameInWidget() const {
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index 7189fae..f840c77 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h
@@ -221,16 +221,23 @@ mojo::PendingReceiver<mojom::Widget> widget_receiver); // Initialize a new RenderWidget for a popup. The |show_callback| is called - // when RenderWidget::Show() happens. This method increments the reference - // count on the RenderWidget, making it self-referencing, which is then - // release when a WidgetMsg_Close IPC is received. + // when RenderWidget::Show() happens. void InitForPopup(ShowCallback show_callback, blink::WebPagePopup* web_page_popup); + // Initialize a new RenderWidget for pepper fullscreen. The |show_callback| is + // called when RenderWidget::Show() happens. + void InitForPepperFullscreen(ShowCallback show_callback, + blink::WebWidget* web_widget); + + // Initialize a new RenderWidget that will be attached to a RenderFrame (via + // the WebFrameWidget), for a frame that is a main frame. + void InitForMainFrame(ShowCallback show_callback, + blink::WebFrameWidget* web_frame_widget); + // Initialize a new RenderWidget that will be attached to a RenderFrame (via // the WebFrameWidget), for a frame that is a local root, but not the main - // frame. This method increments the reference count on the RenderWidget, - // making it self-referencing, which can be released by calling Close(). + // frame. void InitForChildLocalRoot(blink::WebFrameWidget* web_frame_widget); // Sets a delegate to handle certain RenderWidget operations that need an @@ -668,12 +675,15 @@ void UseSynchronousResizeModeForTesting(bool enable); void SetDeviceScaleFactorForTesting(float factor); void SetDeviceColorSpaceForTesting(const gfx::ColorSpace& color_space); - void SetPageZoomLevelForTesting(double zoom_level); void SetWindowRectSynchronouslyForTesting(const gfx::Rect& new_window_rect); void EnableAutoResizeForTesting(const gfx::Size& min_size, const gfx::Size& max_size); void DisableAutoResizeForTesting(const gfx::Size& new_size); + // Update the WebView's device scale factor. + // TODO(ajwong): This should be moved into RenderView. + void UpdateWebViewWithDeviceScaleFactor(); + // Forces a redraw and invokes the callback once the frame's been displayed // to the user. using PresentationTimeCallback = @@ -691,11 +701,6 @@ in_synchronous_composite_for_testing_ = in; } - // Called by Create() functions and subclasses to finish initialization. - // |show_callback| will be invoked once WebWidgetClient::Show() occurs, and - // should be null if Show() won't be triggered for this widget. - void Init(ShowCallback show_callback, blink::WebWidget* web_widget); - base::WeakPtr<RenderWidget> AsWeakPtr(); // TODO(https://crbug.com/995981): Eventually, the lifetime of RenderWidget @@ -708,14 +713,6 @@ // Notify subclasses that we initiated the paint operation. virtual void DidInitiatePaint() {} - // RenderWidgets are created for frames, popups and pepper fullscreen. In the - // former case, the caller frame takes ownership and eventually passes the - // unique_ptr back in Close(). In the latter cases, the browser process takes - // ownership via IPC. These booleans exist to allow us to confirm than an IPC - // message to kill the render widget is coming for a popup or fullscreen. - bool popup_ = false; - bool pepper_fullscreen_ = false; - private: // Friend RefCounted so that the dtor can be non-public. Using this class // without ref-counting is an error. @@ -735,6 +732,11 @@ static scoped_refptr<base::SingleThreadTaskRunner> GetCleanupTaskRunner(); + // Called by Create() functions and subclasses to finish initialization. + // |show_callback| will be invoked once WebWidgetClient::Show() occurs, and + // should be null if Show() won't be triggered for this widget. + void Init(ShowCallback show_callback, blink::WebWidget* web_widget); + // Creates the compositor, but leaves it in a stopped state, where it will // not set up IPC channels or begin trying to produce frames until started // via StartStopCompositor(). @@ -752,6 +754,13 @@ gfx::Size GetSizeForWebWidget() const; void ResizeWebWidget(); + // Enable or disable auto-resize. This is part of + // OnSynchronizeVisualProperties though tests may call to it more directly. + void SetAutoResizeMode(bool auto_resize, + const gfx::Size& min_size_before_dsf, + const gfx::Size& max_size_before_dsf, + float device_scale_factor); + // Helper method to get the device_viewport_rect() from the compositor, which // is always in physical pixels. gfx::Rect CompositorViewportRect() const; @@ -898,6 +907,8 @@ gfx::ColorSpace GetRasterColorSpace() const; + void UpdateZoom(double zoom_level); + #if BUILDFLAG(ENABLE_PLUGINS) // Returns the focused pepper plugin, if any, inside the WebWidget. That is // the pepper plugin which is focused inside a frame which belongs to the @@ -1122,6 +1133,13 @@ // that are not for a frame (eg popups) and excludes the widget for the main // frame (which is attached to the RenderViewImpl). bool for_child_local_root_frame_ = false; + // RenderWidgets are created for frames, popups and pepper fullscreen. In the + // former case, the caller frame takes ownership and eventually passes the + // unique_ptr back in Close(). In the latter cases, the browser process takes + // ownership via IPC. These booleans exist to allow us to confirm than an IPC + // message to kill the render widget is coming for a popup or fullscreen. + bool popup_ = false; + bool pepper_fullscreen_ = false; // A callback into the creator/opener of this widget, to be executed when // WebWidgetClient::Show() occurs.
diff --git a/content/renderer/render_widget_fullscreen_pepper.cc b/content/renderer/render_widget_fullscreen_pepper.cc index 1eedd42..9bf822a7 100644 --- a/content/renderer/render_widget_fullscreen_pepper.cc +++ b/content/renderer/render_widget_fullscreen_pepper.cc
@@ -284,8 +284,8 @@ RenderWidgetFullscreenPepper* widget = new RenderWidgetFullscreenPepper( routing_id, compositor_deps, page_properties, plugin, std::move(widget_receiver)); - widget->Init(std::move(show_callback), - new PepperWidget(widget, local_main_frame_url)); + widget->InitForPepperFullscreen( + std::move(show_callback), new PepperWidget(widget, local_main_frame_url)); return widget; } @@ -298,16 +298,14 @@ : RenderWidget(routing_id, compositor_deps, page_properties, - blink::kWebDisplayModeUndefined, - false, - false, - false, + /*display_mode=*/blink::kWebDisplayModeUndefined, + /*is_undead=*/false, + /*hidden=*/false, + /*never_visible=*/false, std::move(widget_receiver)), plugin_(plugin), - layer_(nullptr), - mouse_lock_dispatcher_(new FullscreenMouseLockDispatcher(this)) { - pepper_fullscreen_ = true; -} + mouse_lock_dispatcher_( + std::make_unique<FullscreenMouseLockDispatcher>(this)) {} RenderWidgetFullscreenPepper::~RenderWidgetFullscreenPepper() { }
diff --git a/content/renderer/render_widget_fullscreen_pepper.h b/content/renderer/render_widget_fullscreen_pepper.h index 88d74110..cc08b38 100644 --- a/content/renderer/render_widget_fullscreen_pepper.h +++ b/content/renderer/render_widget_fullscreen_pepper.h
@@ -79,7 +79,7 @@ // The plugin instance this widget wraps. PepperPluginInstanceImpl* plugin_; - cc::Layer* layer_; + cc::Layer* layer_ = nullptr; std::unique_ptr<MouseLockDispatcher> mouse_lock_dispatcher_;
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc index a502b65..5cbfd85 100644 --- a/content/renderer/renderer_blink_platform_impl.cc +++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -542,18 +542,13 @@ // PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler // when it the file gets Onion soup'ed. - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - DCHECK(render_thread); - if (!render_thread) - return nullptr; - // Save histogram data so we can see how much PeerConnection is used. // The histogram counts the number of calls to the JS API // RTCPeerConnection. UpdateWebRTCMethodCount(blink::WebRTCAPIName::kRTCPeerConnection); - blink::PeerConnectionDependencyFactory* rtc_dependency_factory = - render_thread->GetPeerConnectionDependencyFactory(); + auto* rtc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); return std::make_unique<RTCPeerConnectionHandler>( client, rtc_dependency_factory, task_runner); } @@ -569,29 +564,23 @@ scoped_refptr<base::SingleThreadTaskRunner> RendererBlinkPlatformImpl::GetWebRtcWorkerThread() { - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - DCHECK(render_thread); - blink::PeerConnectionDependencyFactory* rtc_dependency_factory = - render_thread->GetPeerConnectionDependencyFactory(); + auto* rtc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); rtc_dependency_factory->EnsureInitialized(); return rtc_dependency_factory->GetWebRtcWorkerThread(); } rtc::Thread* RendererBlinkPlatformImpl::GetWebRtcWorkerThreadRtcThread() { - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - DCHECK(render_thread); - blink::PeerConnectionDependencyFactory* rtc_dependency_factory = - render_thread->GetPeerConnectionDependencyFactory(); + auto* rtc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); rtc_dependency_factory->EnsureInitialized(); return rtc_dependency_factory->GetWebRtcWorkerThreadRtcThread(); } scoped_refptr<base::SingleThreadTaskRunner> RendererBlinkPlatformImpl::GetWebRtcSignalingTaskRunner() { - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - DCHECK(render_thread); - blink::PeerConnectionDependencyFactory* rtc_dependency_factory = - render_thread->GetPeerConnectionDependencyFactory(); + auto* rtc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); rtc_dependency_factory->EnsureInitialized(); return rtc_dependency_factory->GetWebRtcSignalingThread(); } @@ -599,20 +588,16 @@ std::unique_ptr<cricket::PortAllocator> RendererBlinkPlatformImpl::CreateWebRtcPortAllocator( blink::WebLocalFrame* frame) { - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - DCHECK(render_thread); - blink::PeerConnectionDependencyFactory* rtc_dependency_factory = - render_thread->GetPeerConnectionDependencyFactory(); + auto* rtc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); rtc_dependency_factory->EnsureInitialized(); return rtc_dependency_factory->CreatePortAllocator(frame); } std::unique_ptr<webrtc::AsyncResolverFactory> RendererBlinkPlatformImpl::CreateWebRtcAsyncResolverFactory() { - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - DCHECK(render_thread); - blink::PeerConnectionDependencyFactory* rtc_dependency_factory = - render_thread->GetPeerConnectionDependencyFactory(); + auto* rtc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); rtc_dependency_factory->EnsureInitialized(); return rtc_dependency_factory->CreateAsyncResolverFactory(); } @@ -622,8 +607,8 @@ std::unique_ptr<webrtc::RtpCapabilities> RendererBlinkPlatformImpl::GetRtpSenderCapabilities( const blink::WebString& kind) { - blink::PeerConnectionDependencyFactory* pc_dependency_factory = - RenderThreadImpl::current()->GetPeerConnectionDependencyFactory(); + auto* pc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); pc_dependency_factory->EnsureInitialized(); return pc_dependency_factory->GetSenderCapabilities(kind.Utf8()); } @@ -631,8 +616,8 @@ std::unique_ptr<webrtc::RtpCapabilities> RendererBlinkPlatformImpl::GetRtpReceiverCapabilities( const blink::WebString& kind) { - blink::PeerConnectionDependencyFactory* pc_dependency_factory = - RenderThreadImpl::current()->GetPeerConnectionDependencyFactory(); + auto* pc_dependency_factory = + blink::PeerConnectionDependencyFactory::GetInstance(); pc_dependency_factory->EnsureInitialized(); return pc_dependency_factory->GetReceiverCapabilities(kind.Utf8()); } @@ -667,13 +652,6 @@ return AudioDeviceFactory::GetSourceLatencyType(source_type); } -blink::WebRtcAudioDeviceImpl* -RendererBlinkPlatformImpl::GetWebRtcAudioDevice() { - blink::PeerConnectionDependencyFactory* pc_dependency_factory = - RenderThreadImpl::current()->GetPeerConnectionDependencyFactory(); - return pc_dependency_factory->GetWebRtcAudioDevice(); -} - base::Optional<std::string> RendererBlinkPlatformImpl::GetWebRTCAudioProcessingConfiguration() { return GetContentClient()
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h index c1ada87..16d420e5 100644 --- a/content/renderer/renderer_blink_platform_impl.h +++ b/content/renderer/renderer_blink_platform_impl.h
@@ -151,7 +151,6 @@ const media::AudioSinkParameters& params) override; media::AudioLatency::LatencyType GetAudioSourceLatencyType( blink::WebAudioDeviceSourceType source_type) override; - blink::WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() override; base::Optional<std::string> GetWebRTCAudioProcessingConfiguration() override; bool ShouldEnforceWebRTCRoutingPreferences() override; bool UsesFakeCodecForPeerConnection() override;
diff --git a/content/shell/test_runner/event_sender.cc b/content/shell/test_runner/event_sender.cc index ce1d0b6..36e4ca3 100644 --- a/content/shell/test_runner/event_sender.cc +++ b/content/shell/test_runner/event_sender.cc
@@ -23,7 +23,6 @@ #include "base/time/time.h" #include "build/build_config.h" #include "content/common/input/web_mouse_wheel_event_traits.h" -#include "content/renderer/render_widget.h" #include "content/shell/test_runner/mock_spell_check.h" #include "content/shell/test_runner/test_interfaces.h" #include "content/shell/test_runner/web_test_delegate.h" @@ -1812,29 +1811,32 @@ } void EventSender::ZoomPageIn() { - for (WebViewTestProxy* view_proxy : interfaces()->GetWindowList()) { - // TODO(danakj): Child frame widgets in other frame trees (ie OOPIFs) won't - // get the zoom level though. So this only works in tests with a single - // origin. - view_proxy->SetZoomLevel(view_proxy->webview()->ZoomLevel() + 1); + const std::vector<WebViewTestProxy*>& window_list = + interfaces()->GetWindowList(); + + for (size_t i = 0; i < window_list.size(); ++i) { + window_list.at(i)->webview()->SetZoomLevel( + window_list.at(i)->webview()->ZoomLevel() + 1); } } void EventSender::ZoomPageOut() { - for (WebViewTestProxy* view_proxy : interfaces()->GetWindowList()) { - // TODO(danakj): Child frame widgets in other frame trees (ie OOPIFs) won't - // get the zoom level though. So this only works in tests with a single - // origin. - view_proxy->SetZoomLevel(view_proxy->webview()->ZoomLevel() - 1); + const std::vector<WebViewTestProxy*>& window_list = + interfaces()->GetWindowList(); + + for (size_t i = 0; i < window_list.size(); ++i) { + window_list.at(i)->webview()->SetZoomLevel( + window_list.at(i)->webview()->ZoomLevel() - 1); } } void EventSender::SetPageZoomFactor(double zoom_factor) { - for (WebViewTestProxy* view_proxy : interfaces()->GetWindowList()) { - // TODO(danakj): Child frame widgets in other frame trees (ie OOPIFs) won't - // get the zoom level though. So this only works in tests with a single - // origin. - view_proxy->SetZoomLevel(std::log(zoom_factor) / std::log(1.2)); + const std::vector<WebViewTestProxy*>& window_list = + interfaces()->GetWindowList(); + + for (size_t i = 0; i < window_list.size(); ++i) { + window_list.at(i)->webview()->SetZoomLevel(std::log(zoom_factor) / + std::log(1.2)); } }
diff --git a/content/test/data/lite_js_test.mojom b/content/test/data/lite_js_test.mojom index 9bf8d77..c44873f9 100644 --- a/content/test/data/lite_js_test.mojom +++ b/content/test/data/lite_js_test.mojom
@@ -17,6 +17,11 @@ // An interface whose definition covers various types of message signatures in // order to exercise the lite JS mojom bindings. interface TestMessageTarget { + enum NestedEnum { + kFoo, + kBar, + }; + // Zero arguments, no reply. Poke(); @@ -27,6 +32,8 @@ Repeat(string? message, array<int32>? numbers) => (string? message, array<int32>? numbers); + Echo(NestedEnum nested) => (NestedEnum nested); + Flatten(array<TestStruct> values) => (array<int32> values); FlattenUnions(array<TestUnion> unions) => (array<int32> x, array<int32> s); @@ -41,4 +48,3 @@ interface SubinterfaceClient { DidFlush(array<int32> values); }; -
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt index 87c9ed4..a3eb65b4 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
@@ -164,6 +164,8 @@ # Win / NVidia crbug.com/631317 [ d3d11 win nvidia ] deqp/functional/gles3/fbomultisample* [ RetryOnFailure ] crbug.com/679639 [ d3d11 win nvidia ] conformance2/rendering/draw-with-integer-texture-base-level.html [ Failure ] +# Flake seen once. +crbug.com/691951 [ d3d11 win nvidia ] deqp/functional/gles3/shaderoperator/binary_operator_11.html [ RetryOnFailure ] crbug.com/735464 [ d3d11 win nvidia ] deqp/functional/gles3/textureshadow/* [ RetryOnFailure ] crbug.com/907544 [ vulkan win passthrough nvidia ] conformance/uniforms/uniform-default-values.html [ RetryOnFailure ]
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_revision.txt b/content/test/gpu/gpu_tests/webgl_conformance_revision.txt index 76d616e..91ada69 100644 --- a/content/test/gpu/gpu_tests/webgl_conformance_revision.txt +++ b/content/test/gpu/gpu_tests/webgl_conformance_revision.txt
@@ -1,3 +1,3 @@ # AUTOGENERATED FILE - DO NOT EDIT # SEE roll_webgl_conformance.py -Current webgl revision abaae129d9a0c6e1e092067e0b105475df43352e +Current webgl revision f4ddbafcf24befc473497eaa0d83016baafdff52
diff --git a/docs/speed/binary_size/metrics.md b/docs/speed/binary_size/metrics.md index ecf12fc..66117efe 100644 --- a/docs/speed/binary_size/metrics.md +++ b/docs/speed/binary_size/metrics.md
@@ -37,9 +37,10 @@ * Computed as: * The size of an APK * With all native code as the sum of section sizes (except .bss), uncompressed. - * With all dex code as if it were stored compressed and also extracted. + * With all dex code counted as `uncompressed_size * 1.5` (meant to simulate Android Go on Oreo). * With all translations as if they were not missing (estimates size of missing translations based on size of english strings). * Without translation-normalization, translation dumps cause jumps. + * Translation-normalization applies only to apks (not to Android App Bundles). ### Native Code Size Metrics
diff --git a/extensions/browser/api/serial/serial_apitest.cc b/extensions/browser/api/serial/serial_apitest.cc index d69a12f6..2a056c1 100644 --- a/extensions/browser/api/serial/serial_apitest.cc +++ b/extensions/browser/api/serial/serial_apitest.cc
@@ -21,6 +21,7 @@ #include "extensions/common/switches.h" #include "extensions/test/result_catcher.h" #include "mojo/public/cpp/bindings/binding_set.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/system/data_pipe.h" #include "mojo/public/cpp/system/simple_watcher.h" #include "services/device/public/mojom/constants.mojom.h" @@ -303,7 +304,8 @@ void GetPort(const base::UnguessableToken& token, device::mojom::SerialPortRequest request, - device::mojom::SerialPortConnectionWatcherPtr watcher) override { + mojo::PendingRemote<device::mojom::SerialPortConnectionWatcher> + watcher) override { DCHECK(!watcher); auto it = ports_.find(token); DCHECK(it != ports_.end());
diff --git a/extensions/browser/api/serial/serial_port_manager.cc b/extensions/browser/api/serial/serial_port_manager.cc index 448e339..b5990fe 100644 --- a/extensions/browser/api/serial/serial_port_manager.cc +++ b/extensions/browser/api/serial/serial_port_manager.cc
@@ -14,6 +14,7 @@ #include "extensions/browser/api/serial/serial_connection.h" #include "extensions/browser/event_router.h" #include "extensions/browser/extensions_browser_client.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/device/public/mojom/constants.mojom.h" #include "services/service_manager/public/cpp/connector.h" @@ -174,7 +175,7 @@ for (auto& device : devices) { if (device->path.AsUTF8Unsafe() == path) { port_manager_->GetPort(device->token, std::move(request), - /*watcher=*/nullptr); + /*watcher=*/mojo::NullRemote()); return; } }
diff --git a/extensions/browser/extension_navigation_throttle.cc b/extensions/browser/extension_navigation_throttle.cc index b4fa481..cf0d59f 100644 --- a/extensions/browser/extension_navigation_throttle.cc +++ b/extensions/browser/extension_navigation_throttle.cc
@@ -11,6 +11,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/common/url_constants.h" #include "extensions/browser/extension_registry.h" +#include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/url_request_util.h" #include "extensions/common/constants.h" @@ -118,65 +119,64 @@ if (!allowed) return content::NavigationThrottle::BLOCK_REQUEST; } + } + // Browser-initiated requests are always considered trusted, and thus allowed. + // + // Note that GuestView navigations initiated by the embedder also count as a + // browser-initiated navigation. + if (!navigation_handle()->IsRendererInitiated()) + return content::NavigationThrottle::PROCEED; + + // All renderer-initiated navigations must have an initiator. + DCHECK(navigation_handle()->GetInitiatorOrigin().has_value()); + const url::Origin& initiator_origin = + navigation_handle()->GetInitiatorOrigin().value(); + + // TODO(lukasza): https://crbug.com/1003957: Get rid of duplication with + // ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL. + + // Navigations from chrome://, devtools:// or chrome-search:// pages need to + // be allowed, even if the target |url| is not web-accessible. See + // https://crbug.com/662602. + if (initiator_origin.scheme() == content::kChromeUIScheme || + initiator_origin.scheme() == content::kChromeDevToolsScheme || + ExtensionsBrowserClient::Get()->ShouldSchemeBypassNavigationChecks( + initiator_origin.scheme())) { return content::NavigationThrottle::PROCEED; } - // This is a subframe navigation to a |target_extension| resource. - // Enforce the web_accessible_resources restriction, and same-origin - // restrictions for platform apps. - content::RenderFrameHost* parent = navigation_handle()->GetParentFrame(); + // An extension can initiate navigations to any of its resources. + if (initiator_origin == target_origin) + return content::NavigationThrottle::PROCEED; - // Look to see if all ancestors belong to |target_extension|. If not, - // then the web_accessible_resource restriction applies. - bool external_ancestor = false; - for (auto* ancestor = parent; ancestor; ancestor = ancestor->GetParent()) { - // Look for a match on the last committed origin. This handles the - // common case, and the about:blank case. - if (ancestor->GetLastCommittedOrigin() == target_origin) - continue; - // Look for an origin match with the last committed URL. This handles the - // case of sandboxed extension resources, which commit with a null origin, - // but are permitted to load non-webaccessible extension resources in - // subframes. - if (url::Origin::Create(ancestor->GetLastCommittedURL()) == target_origin) - continue; - // Ignore DevTools, as it is allowed to embed extension pages. - if (ancestor->GetLastCommittedURL().SchemeIs( - content::kChromeDevToolsScheme)) - continue; + // Cancel cross-origin-initiator navigations to blob: or filesystem: URLs. + if (!url_has_extension_scheme) + return content::NavigationThrottle::CANCEL; - // Otherwise, we have an external ancestor. - external_ancestor = true; - break; + // Cross-origin-initiator navigations require that the |url| is in the + // manifest's "web_accessible_resources" section. + if (!WebAccessibleResourcesInfo::IsResourceWebAccessible(target_extension, + url.path())) { + return content::NavigationThrottle::BLOCK_REQUEST; } - if (external_ancestor) { - // Cancel navigations to nested URLs, to match the main frame behavior. - if (!url_has_extension_scheme) - return content::NavigationThrottle::CANCEL; + // A platform app may not be loaded in an <iframe> by another origin. + // + // In fact, platform apps may not have any cross-origin iframes at all; + // for non-extension origins of |url| this is enforced by means of a + // Content Security Policy. But CSP is incapable of blocking the + // chrome-extension scheme. Thus, this case must be handled specially + // here. + if (target_extension->is_platform_app()) + return content::NavigationThrottle::CANCEL; - // |url| must be in the manifest's "web_accessible_resources" section. - if (!WebAccessibleResourcesInfo::IsResourceWebAccessible(target_extension, - url.path())) - return content::NavigationThrottle::BLOCK_REQUEST; - - // A platform app may not be loaded in an <iframe> by another origin. - // - // In fact, platform apps may not have any cross-origin iframes at all; for - // non-extension origins of |url| this is enforced by means of a Content - // Security Policy. But CSP is incapable of blocking the chrome-extension - // scheme. Thus, this case must be handled specially here. - if (target_extension->is_platform_app()) - return content::NavigationThrottle::CANCEL; - - // A platform app may not load another extension in an <iframe>. - const Extension* parent_extension = - registry->enabled_extensions().GetExtensionOrAppByURL( - parent->GetSiteInstance()->GetSiteURL()); - if (parent_extension && parent_extension->is_platform_app()) - return content::NavigationThrottle::BLOCK_REQUEST; - } + // A platform app may not load another extension in an <iframe>. + const Extension* initiator_extension = + registry->enabled_extensions().GetExtensionOrAppByURL( + initiator_origin.GetURL()); + if (initiator_extension && initiator_extension->is_platform_app()) + return content::NavigationThrottle::BLOCK_REQUEST; return content::NavigationThrottle::PROCEED; }
diff --git a/extensions/browser/extensions_browser_client.cc b/extensions/browser/extensions_browser_client.cc index 1455836..9f1690e 100644 --- a/extensions/browser/extensions_browser_client.cc +++ b/extensions/browser/extensions_browser_client.cc
@@ -94,4 +94,9 @@ return std::string(); } +bool ExtensionsBrowserClient::ShouldSchemeBypassNavigationChecks( + const std::string& scheme) const { + return false; +} + } // namespace extensions
diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h index ed47ee5..206b160b 100644 --- a/extensions/browser/extensions_browser_client.h +++ b/extensions/browser/extensions_browser_client.h
@@ -335,6 +335,12 @@ // Returns the user agent used by the content module. virtual std::string GetUserAgent() const; + // Returns whether |scheme| should bypass extension-specific navigation checks + // (e.g. whether the |scheme| is allowed to initiate navigations to extension + // resources that are not declared as web accessible). + virtual bool ShouldSchemeBypassNavigationChecks( + const std::string& scheme) const; + private: std::vector<std::unique_ptr<ExtensionsBrowserAPIProvider>> providers_;
diff --git a/gpu/command_buffer/client/webgpu_implementation.cc b/gpu/command_buffer/client/webgpu_implementation.cc index f8c86a5..edba897 100644 --- a/gpu/command_buffer/client/webgpu_implementation.cc +++ b/gpu/command_buffer/client/webgpu_implementation.cc
@@ -37,6 +37,17 @@ // commands are still in flight. Flush(); helper_->Finish(); + +#if BUILDFLAG(USE_DAWN) + // Now that commands are finished, free the wire client. + wire_client_.reset(); + + // All client-side Dawn objects are now destroyed. + // Shared memory allocations for buffers that were still mapped at the time + // of destruction can now be safely freed. + memory_transfer_service_->FreeHandlesPendingToken(helper_->InsertToken()); + helper_->Finish(); +#endif } gpu::ContextResult WebGPUImplementation::Initialize(
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 65b8d5a..cd5f53e 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -18092,6 +18092,12 @@ } #endif + // Use DRAW instead of COPY if the workaround is enabled. + if (method == CopyTextureMethod::DIRECT_COPY && + workarounds().prefer_draw_to_copy) { + method = CopyTextureMethod::DIRECT_DRAW; + } + copy_texture_chromium_->DoCopySubTexture( this, source_target, source_texture->service_id(), source_level, source_internal_format, dest_target, dest_texture->service_id(),
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json index 694b89d..47d8032 100644 --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json
@@ -3357,6 +3357,18 @@ "features": [ "disable_half_float_for_gmb" ] + }, + { + "id": 312, + "cr_bugs": [991869], + "description": "Crash on Mali-T8x when using glTexImage2D", + "os": { + "type": "android" + }, + "gl_renderer": ".*Mali-T8.*", + "features": [ + "prefer_draw_to_copy" + ] } ] }
diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt index 92a00ff6..5d5beda 100644 --- a/gpu/config/gpu_workaround_list.txt +++ b/gpu/config/gpu_workaround_list.txt
@@ -115,3 +115,4 @@ use_eqaa_storage_samples_2 max_3d_array_texture_size_1024 disable_half_float_for_gmb +prefer_draw_to_copy
diff --git a/gpu/vulkan/x/vulkan_implementation_x11.cc b/gpu/vulkan/x/vulkan_implementation_x11.cc index 2c96e78..eeb95b1 100644 --- a/gpu/vulkan/x/vulkan_implementation_x11.cc +++ b/gpu/vulkan/x/vulkan_implementation_x11.cc
@@ -33,6 +33,15 @@ DISALLOW_COPY_AND_ASSIGN(ScopedUnsetDisplay); }; +bool InitializeVulkanFunctionPointers( + const base::FilePath& path, + VulkanFunctionPointers* vulkan_function_pointers) { + base::NativeLibraryLoadError native_library_load_error; + vulkan_function_pointers->vulkan_loader_library_ = + base::LoadNativeLibrary(path, &native_library_load_error); + return vulkan_function_pointers->vulkan_loader_library_; +} + } // namespace VulkanImplementationX11::VulkanImplementationX11(bool use_swiftshader) @@ -61,20 +70,25 @@ VulkanFunctionPointers* vulkan_function_pointers = gpu::GetVulkanFunctionPointers(); - base::FilePath path; if (use_swiftshader()) { + base::FilePath path; if (!base::PathService::Get(base::DIR_MODULE, &path)) return false; - path = path.Append("swiftshader/libvk_swiftshader.so"); - } else { - path = base::FilePath("libvulkan.so.1"); - } - base::NativeLibraryLoadError native_library_load_error; - vulkan_function_pointers->vulkan_loader_library_ = - base::LoadNativeLibrary(path, &native_library_load_error); - if (!vulkan_function_pointers->vulkan_loader_library_) - return false; + base::FilePath root_path = path.Append("libvk_swiftshader.so"); + if (!InitializeVulkanFunctionPointers(root_path, + vulkan_function_pointers)) { + base::FilePath rel_path = path.Append("swiftshader/libvk_swiftshader.so"); + if (!InitializeVulkanFunctionPointers(rel_path, + vulkan_function_pointers)) { + return false; + } + } + } else { + base::FilePath path = base::FilePath("libvulkan.so.1"); + if (!InitializeVulkanFunctionPointers(path, vulkan_function_pointers)) + return false; + } if (!vulkan_instance_.Initialize(required_extensions, {})) return false;
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index b7a4c5d0..65dfa89 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -326,9 +326,11 @@ flags_ui::kOsIos, FEATURE_VALUE_TYPE(autofill::features::kAutofillRichMetadataQueries)}, {"fullscreen-viewport-adjustment-experiment", - flag_descriptions::kFullscreenSmoothScrollingName, - flag_descriptions::kFullscreenSmoothScrollingDescription, flags_ui::kOsIos, - FEATURE_VALUE_TYPE(fullscreen::features::kSmoothScrollingDefault)}, + flag_descriptions::kFullscreenViewportAdjustmentExperimentName, + flag_descriptions::kFullscreenViewportAdjustmentExperimentDescription, + flags_ui::kOsIos, + MULTI_VALUE_TYPE( + fullscreen::features::kViewportAdjustmentExperimentChoices)}, {"autofill-enforce-min-required-fields-for-heuristics", flag_descriptions::kAutofillEnforceMinRequiredFieldsForHeuristicsName, flag_descriptions:: @@ -507,6 +509,9 @@ {"language-settings", flag_descriptions::kLanguageSettingsName, flag_descriptions::kLanguageSettingsDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(kLanguageSettings)}, + {"lock-bottom-toolbar", flag_descriptions::kLockBottomToolbarName, + flag_descriptions::kLockBottomToolbarDescription, flags_ui::kOsIos, + FEATURE_VALUE_TYPE(fullscreen::features::kLockBottomToolbar)}, {"toolbar-new-tab-button", flag_descriptions::kToolbarNewTabButtonName, flag_descriptions::kToolbarNewTabButtonDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(kToolbarNewTabButton)},
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 9ffe795e..31568f1 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -204,11 +204,11 @@ const char kFindInPageiFrameDescription[] = "When enabled, Find In Page will search in iFrames."; -const char kFullscreenSmoothScrollingName[] = "Fullscreen Smooth Scrolling"; -const char kFullscreenSmoothScrollingDescription[] = - "When enabled, the web view's insets are updated for scoll events. If " - "disabled, the " - "the web view's frame are updated."; +const char kFullscreenViewportAdjustmentExperimentName[] = + "Fullscreen Viewport Adjustment Mode"; +const char kFullscreenViewportAdjustmentExperimentDescription[] = + "The different ways in which the web view's viewport is updated for scroll " + "events. The default option updates the web view's frame."; const char kIgnoresViewportScaleLimitsName[] = "Ignore Viewport Scale Limits"; const char kIgnoresViewportScaleLimitsDescription[] = @@ -230,6 +230,11 @@ "Enables the Language Settings page allowing modifications to user " "preferred languages and translate preferences."; +const char kLockBottomToolbarName[] = "Lock bottom toolbar"; +const char kLockBottomToolbarDescription[] = + "When enabled, the bottom toolbar will not get collapsed when scrolling " + "into fullscreen mode."; + const char kMarkHttpAsName[] = "Mark non-secure origins as non-secure"; const char kMarkHttpAsDescription[] = "Change the UI treatment for HTTP pages";
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index 7e0b7e40..b6f2e24 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -167,10 +167,10 @@ extern const char kFindInPageiFrameName[]; extern const char kFindInPageiFrameDescription[]; -// Title and description for the flag to update the web view's insets for scroll -// events. -extern const char kFullscreenSmoothScrollingName[]; -extern const char kFullscreenSmoothScrollingDescription[]; +// Title and description for the command line switch used to determine the +// active fullscreen viewport adjustment mode. +extern const char kFullscreenViewportAdjustmentExperimentName[]; +extern const char kFullscreenViewportAdjustmentExperimentDescription[]; // Title and description for the flag to ignore viewport scale limits. extern const char kIgnoresViewportScaleLimitsName[]; @@ -189,6 +189,10 @@ extern const char kLanguageSettingsName[]; extern const char kLanguageSettingsDescription[]; +// Title and description for the flag to lock the bottom toolbar into place. +extern const char kLockBottomToolbarName[]; +extern const char kLockBottomToolbarDescription[]; + // Title, description, and options for the MarkHttpAs setting that controls // display of omnibox warnings about non-secure pages. extern const char kMarkHttpAsName[];
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 32d67dd1..9efe2f2e 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -597,6 +597,9 @@ // The webState of the active tab. @property(nonatomic, readonly) web::WebState* currentWebState; +// Whether the safe area insets should be used to adjust the viewport. +@property(nonatomic, readonly) BOOL usesSafeInsetsForViewportAdjustments; + // Whether the keyboard observer helper is viewed @property(nonatomic, strong) KeyboardObserverHelper* observer; @@ -1069,6 +1072,15 @@ : nullptr; } +- (BOOL)usesSafeInsetsForViewportAdjustments { + fullscreen::features::ViewportAdjustmentExperiment viewportExperiment = + fullscreen::features::GetActiveViewportExperiment(); + return viewportExperiment == + fullscreen::features::ViewportAdjustmentExperiment::SAFE_AREA || + viewportExperiment == + fullscreen::features::ViewportAdjustmentExperiment::HYBRID; +} + - (BubblePresenter*)bubblePresenter { if (!_bubblePresenter && self.browserState) { self.bubblePresenter = @@ -1674,7 +1686,7 @@ self.secondaryToolbarNoFullscreenHeightConstraint.constant = [self secondaryToolbarHeightWithInset]; [self updateFootersForFullscreenProgress:self.footerFullscreenProgress]; - if (self.currentWebState) { + if (!self.usesSafeInsetsForViewportAdjustments && self.currentWebState) { UIEdgeInsets contentPadding = self.currentWebState->GetWebViewProxy().contentInset; contentPadding.bottom = AlignValueToPixel( @@ -3816,6 +3828,9 @@ // Translates the footer view up and down according to |progress|, where a // progress of 1.0 fully shows the footer and a progress of 0.0 fully hides it. - (void)updateFootersForFullscreenProgress:(CGFloat)progress { + // If the bottom toolbar is locked into place, reset |progress| to 1.0. + if (base::FeatureList::IsEnabled(fullscreen::features::kLockBottomToolbar)) + progress = 1.0; self.footerFullscreenProgress = progress; @@ -3858,10 +3873,26 @@ // safe area, so the unsafe top height must be added. CGFloat top = AlignValueToPixel( self.headerHeight + (progress - 1.0) * [self primaryToolbarHeightDelta]); - CGFloat bottom = - AlignValueToPixel(progress * [self secondaryToolbarHeightWithInset]); + // If the bottom toolbar is locked into place, use 1.0 instead of |progress|. + CGFloat bottomProgress = + base::FeatureList::IsEnabled(fullscreen::features::kLockBottomToolbar) + ? 1.0 + : progress; + CGFloat bottom = AlignValueToPixel(bottomProgress * + [self secondaryToolbarHeightWithInset]); - [self updateContentPaddingForTopToolbarHeight:top bottomToolbarHeight:bottom]; + if (self.usesSafeInsetsForViewportAdjustments) { + if (fullscreen::features::GetActiveViewportExperiment() == + fullscreen::features::ViewportAdjustmentExperiment::HYBRID) { + [self updateWebViewFrameForBottomOffset:bottom]; + } + + [self updateBrowserSafeAreaForTopToolbarHeight:top + bottomToolbarHeight:bottom]; + } else { + [self updateContentPaddingForTopToolbarHeight:top + bottomToolbarHeight:bottom]; + } } // Updates the frame of the web view so that it's |offset| from the bottom of
diff --git a/ios/chrome/browser/ui/download/pass_kit_coordinator.mm b/ios/chrome/browser/ui/download/pass_kit_coordinator.mm index 734597f..0e58b93 100644 --- a/ios/chrome/browser/ui/download/pass_kit_coordinator.mm +++ b/ios/chrome/browser/ui/download/pass_kit_coordinator.mm
@@ -119,8 +119,7 @@ InfoBarManagerImpl::FromWebState(_webState), infobars::InfoBarDelegate::SHOW_PASSKIT_ERROR_INFOBAR_DELEGATE_IOS, /*vector_icon=*/nullptr, - l10n_util::GetStringUTF16(IDS_IOS_GENERIC_PASSKIT_ERROR), - /*auto_expire=*/true); + l10n_util::GetStringUTF16(IDS_IOS_GENERIC_PASSKIT_ERROR)); // Infobar does not provide callback on dismissal. [self stop];
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_features.h b/ios/chrome/browser/ui/fullscreen/fullscreen_features.h index 3826990..916a651 100644 --- a/ios/chrome/browser/ui/fullscreen/fullscreen_features.h +++ b/ios/chrome/browser/ui/fullscreen/fullscreen_features.h
@@ -11,25 +11,35 @@ namespace fullscreen { namespace features { -// Feature used by finch config to enable smooth scrolling when the default -// viewport adjustment experiment is selected via command line switches. -extern const base::Feature kSmoothScrollingDefault; +// The name of the command line switch used to control the method by which the +// viewport of the content area is updated by scrolling events. +extern const char kViewportAdjustmentExperimentCommandLineSwitch[]; + +// The available viewport adjustment experiments. The choices in this array +// correspond with the ViewportAdjustmentExperiment values. +extern const flags_ui::FeatureEntry::Choice + kViewportAdjustmentExperimentChoices[6]; // Enum type describing viewport adjustment experiments. enum class ViewportAdjustmentExperiment : short { FRAME = 0, // Adjust the viewport by resizing the entire WKWebView. + CONTENT_INSET, // Adjust the viewport by updating the WKWebView's scroll view + // contentInset. + SAFE_AREA, // Adjust the viewport by updating the safe area of the browser + // container view. + HYBRID, // Translates the web view up and down and updates the viewport using + // safe area insets. SMOOTH_SCROLLING, // Adjusts the viewport using the smooth scrolling // workaround. }; // Convenience method for retrieving the active viewport adjustment experiment -// from the command line. TODO(crbug.com/914042): Remove once the internal -// references are moved to ShouldUseSmoothScrolling(). +// from the command line. ViewportAdjustmentExperiment GetActiveViewportExperiment(); -// Convenience method for determining when to adjust the viewport by resizing -// WKWebView or using smooth scrolling. -bool ShouldUseSmoothScrolling(); +// Used to control whether the bottom toolbar should be locked into the extended +// position (i.e. fullscreen progress == 1.0). +extern const base::Feature kLockBottomToolbar; } // namespace features } // namespace fullscreen
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_features.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_features.mm index af1a6d51..0d4f0b9d 100644 --- a/ios/chrome/browser/ui/fullscreen/fullscreen_features.mm +++ b/ios/chrome/browser/ui/fullscreen/fullscreen_features.mm
@@ -11,21 +11,63 @@ #error "This file requires ARC support." #endif +namespace { +// The command line values for the content inset and safe area experiment +// choices. +const char kFrameChoiceValue[] = "frame"; +const char kContentInsetChoiceValue[] = "content-inset"; +const char kSafeAreaChoiceValue[] = "safe-area"; +const char kHybridChoiceValue[] = "hybrid"; +const char kSmoothScrollingChoiceValue[] = "smooth"; + +// Feature used by finch config to enable smooth scrolling when the default +// viewport adjustment experiment is selected via command line switches. +const base::Feature kSmoothScrollingDefault{"FullscreenSmoothScrollingDefault", + base::FEATURE_ENABLED_BY_DEFAULT}; +} + namespace fullscreen { namespace features { -const base::Feature kSmoothScrollingDefault{"FullscreenSmoothScrollingDefault", - base::FEATURE_ENABLED_BY_DEFAULT}; +const char kViewportAdjustmentExperimentCommandLineSwitch[] = + "fullscreen-viewport-adjustment-experiment"; + +const flags_ui::FeatureEntry::Choice kViewportAdjustmentExperimentChoices[] = { + {flags_ui::kGenericExperimentChoiceDefault, "", ""}, + {"Update Content Inset", kViewportAdjustmentExperimentCommandLineSwitch, + "content-inset"}, + {"Update Safe Area", kViewportAdjustmentExperimentCommandLineSwitch, + "safe-area"}, + {"Use Hybrid Implementation", + kViewportAdjustmentExperimentCommandLineSwitch, "hybrid"}, + {"Use Smooth Scrolling", kViewportAdjustmentExperimentCommandLineSwitch, + "smooth"}, + {"Update Frame", kViewportAdjustmentExperimentCommandLineSwitch, "frame"}}; ViewportAdjustmentExperiment GetActiveViewportExperiment() { - return ShouldUseSmoothScrolling() + const base::CommandLine* command_line = + base::CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(kViewportAdjustmentExperimentCommandLineSwitch)) { + std::string viewport_experiment = command_line->GetSwitchValueASCII( + kViewportAdjustmentExperimentCommandLineSwitch); + if (viewport_experiment == std::string(kContentInsetChoiceValue)) + return ViewportAdjustmentExperiment::CONTENT_INSET; + if (viewport_experiment == std::string(kSafeAreaChoiceValue)) + return ViewportAdjustmentExperiment::SAFE_AREA; + if (viewport_experiment == std::string(kHybridChoiceValue)) + return ViewportAdjustmentExperiment::HYBRID; + if (viewport_experiment == std::string(kSmoothScrollingChoiceValue)) + return ViewportAdjustmentExperiment::SMOOTH_SCROLLING; + if (viewport_experiment == std::string(kFrameChoiceValue)) + return ViewportAdjustmentExperiment::FRAME; + } + return base::FeatureList::IsEnabled(kSmoothScrollingDefault) ? ViewportAdjustmentExperiment::SMOOTH_SCROLLING : ViewportAdjustmentExperiment::FRAME; } -bool ShouldUseSmoothScrolling() { - return base::FeatureList::IsEnabled(kSmoothScrollingDefault); -} +const base::Feature kLockBottomToolbar{"LockBottomToolbar", + base::FEATURE_DISABLED_BY_DEFAULT}; } // namespace features } // namespace fullscreen
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_model.h b/ios/chrome/browser/ui/fullscreen/fullscreen_model.h index 8d6306e2..f750501 100644 --- a/ios/chrome/browser/ui/fullscreen/fullscreen_model.h +++ b/ios/chrome/browser/ui/fullscreen/fullscreen_model.h
@@ -73,10 +73,14 @@ // Returns the toolbar insets at |progress|. UIEdgeInsets GetToolbarInsetsAtProgress(CGFloat progress) const { + const CGFloat kBottomToolbarProgress = + base::FeatureList::IsEnabled(fullscreen::features::kLockBottomToolbar) + ? 1.0 + : progress; return UIEdgeInsetsMake( collapsed_toolbar_height_ + progress * (expanded_toolbar_height_ - collapsed_toolbar_height_), - 0, progress * bottom_toolbar_height_, 0); + 0, kBottomToolbarProgress * bottom_toolbar_height_, 0); } // Increments and decrements |disabled_counter_| for features that require the
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_web_state_observer.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_web_state_observer.mm index 81f5e6f..80cb935 100644 --- a/ios/chrome/browser/ui/fullscreen/fullscreen_web_state_observer.mm +++ b/ios/chrome/browser/ui/fullscreen/fullscreen_web_state_observer.mm
@@ -28,6 +28,8 @@ #error "This file requires ARC support." #endif +using fullscreen::features::ViewportAdjustmentExperiment; + FullscreenWebStateObserver::FullscreenWebStateObserver( FullscreenController* controller, FullscreenModel* model, @@ -81,13 +83,18 @@ // - For normal pages, using |contentInset| breaks the layout of fixed- // position DOM elements, so top padding must be accomplished by updating // the WKWebView's frame. + bool force_content_inset = + fullscreen::features::GetActiveViewportExperiment() == + ViewportAdjustmentExperiment::CONTENT_INSET; bool is_pdf = web_state->GetContentsMimeType() == "application/pdf"; + bool use_content_inset = force_content_inset || is_pdf; id<CRWWebViewProxy> web_view_proxy = web_state->GetWebViewProxy(); - web_view_proxy.shouldUseViewContentInset = is_pdf; + web_view_proxy.shouldUseViewContentInset = use_content_inset; - model_->SetResizesScrollView(!is_pdf && !ios::GetChromeBrowserProvider() - ->GetFullscreenProvider() - ->IsInitialized()); + model_->SetResizesScrollView(!use_content_inset && + !ios::GetChromeBrowserProvider() + ->GetFullscreenProvider() + ->IsInitialized()); // Only reset the model for document-changing navigations or same-document // navigations that update the visible URL.
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm index 0ea5d9d8..5829e04 100644 --- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm +++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
@@ -32,6 +32,8 @@ #error "This file requires ARC support." #endif +using fullscreen::features::ViewportAdjustmentExperiment; + namespace { // This enum is used to record the overscroll actions performed by the user on // the histogram named |OverscrollActions|. @@ -569,9 +571,12 @@ - (BOOL)viewportAdjustsContentInset { if (_webViewProxy.shouldUseViewContentInset) return YES; - return ios::GetChromeBrowserProvider() - ->GetFullscreenProvider() - ->IsInitialized(); + ViewportAdjustmentExperiment experiment = + fullscreen::features::GetActiveViewportExperiment(); + return experiment == ViewportAdjustmentExperiment::SMOOTH_SCROLLING && + ios::GetChromeBrowserProvider() + ->GetFullscreenProvider() + ->IsInitialized(); } - (void)recordMetricForTriggeredAction:(OverscrollAction)action {
diff --git a/ios/web/navigation/crw_wk_navigation_handler.mm b/ios/web/navigation/crw_wk_navigation_handler.mm index bec8edd..68e1e5d81 100644 --- a/ios/web/navigation/crw_wk_navigation_handler.mm +++ b/ios/web/navigation/crw_wk_navigation_handler.mm
@@ -568,6 +568,8 @@ } self.webStateImpl->OnNavigationStarted(context); + self.webStateImpl->GetNavigationManagerImpl().OnNavigationStarted( + webViewURL); return; } @@ -618,8 +620,7 @@ return; } - self.webStateImpl->GetNavigationManagerImpl() - .OnRendererInitiatedNavigationStarted(webViewURL); + self.webStateImpl->GetNavigationManagerImpl().OnNavigationStarted(webViewURL); // When a client-side redirect occurs while an interstitial warning is // displayed, clear the warning and its navigation item, so that a new
diff --git a/ios/web/navigation/legacy_navigation_manager_impl.h b/ios/web/navigation/legacy_navigation_manager_impl.h index 3f42d5e..a6df61a 100644 --- a/ios/web/navigation/legacy_navigation_manager_impl.h +++ b/ios/web/navigation/legacy_navigation_manager_impl.h
@@ -36,7 +36,7 @@ void SetSessionController(CRWSessionController* session_controller) override; void InitializeSession() override; void OnNavigationItemsPruned(size_t pruned_item_count) override; - void OnRendererInitiatedNavigationStarted(const GURL& url) override; + void OnNavigationStarted(const GURL& url) override; void OnNavigationItemCommitted() override; CRWSessionController* GetSessionController() const override; void AddTransientItem(const GURL& url) override;
diff --git a/ios/web/navigation/legacy_navigation_manager_impl.mm b/ios/web/navigation/legacy_navigation_manager_impl.mm index e91e04b..16caac2 100644 --- a/ios/web/navigation/legacy_navigation_manager_impl.mm +++ b/ios/web/navigation/legacy_navigation_manager_impl.mm
@@ -59,8 +59,7 @@ delegate_->OnNavigationItemCommitted(item); } -void LegacyNavigationManagerImpl::OnRendererInitiatedNavigationStarted( - const GURL& url) {} +void LegacyNavigationManagerImpl::OnNavigationStarted(const GURL& url) {} CRWSessionController* LegacyNavigationManagerImpl::GetSessionController() const {
diff --git a/ios/web/navigation/navigation_manager_impl.h b/ios/web/navigation/navigation_manager_impl.h index ba194ff48..d9ea158b 100644 --- a/ios/web/navigation/navigation_manager_impl.h +++ b/ios/web/navigation/navigation_manager_impl.h
@@ -94,8 +94,8 @@ virtual void OnNavigationItemsPruned(size_t pruned_item_count) = 0; virtual void OnNavigationItemCommitted() = 0; - // Called when renderer-initiated navigation has started. - virtual void OnRendererInitiatedNavigationStarted(const GURL& url) = 0; + // Called when a navigation has started. + virtual void OnNavigationStarted(const GURL& url) = 0; // Prepares for the deletion of WKWebView such as caching necessary data. virtual void DetachFromWebView();
diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm index d158af9..53c73ea 100644 --- a/ios/web/navigation/navigation_manager_impl_unittest.mm +++ b/ios/web/navigation/navigation_manager_impl_unittest.mm
@@ -1881,8 +1881,7 @@ ->GetPendingItemInCurrentOrRestoredSession() ->SetVirtualURL(virtual_url); [mock_wk_list_ setCurrentURL:base::SysUTF8ToNSString(url.spec())]; - navigation_manager()->OnRendererInitiatedNavigationStarted( - GURL("http://www.1.com/virtual")); + navigation_manager()->OnNavigationStarted(GURL("http://www.1.com/virtual")); navigation_manager()->ReloadWithUserAgentType(UserAgentType::DESKTOP); @@ -2089,14 +2088,14 @@ EXPECT_TRUE(pending_url.SchemeIsFile()); EXPECT_EQ("restore_session.html", pending_url.ExtractFileName()); EXPECT_EQ("http://www.url.com/0", pending_item->GetVirtualURL()); + navigation_manager()->OnNavigationStarted(pending_url); // Simulate the end effect of loading the restore session URL in web view. pending_item->SetURL(urls[1]); [mock_wk_list_ setCurrentURL:@"http://www.url.com/1" backListURLs:@[ @"http://www.url.com/0" ] forwardListURLs:@[ @"http://www.url.com/2" ]]; - navigation_manager()->OnRendererInitiatedNavigationStarted( - GURL("http://www.url.com/2")); + navigation_manager()->OnNavigationStarted(GURL("http://www.url.com/2")); } ASSERT_TRUE(WaitUntilConditionOrTimeout(kWaitForPageLoadTimeout, ^{
diff --git a/ios/web/navigation/wk_based_navigation_manager_impl.h b/ios/web/navigation/wk_based_navigation_manager_impl.h index b0be92c..daba362 100644 --- a/ios/web/navigation/wk_based_navigation_manager_impl.h +++ b/ios/web/navigation/wk_based_navigation_manager_impl.h
@@ -94,7 +94,7 @@ void InitializeSession() override; void OnNavigationItemsPruned(size_t pruned_item_count) override; void OnNavigationItemCommitted() override; - void OnRendererInitiatedNavigationStarted(const GURL& url) override; + void OnNavigationStarted(const GURL& url) override; void DetachFromWebView() override; CRWSessionController* GetSessionController() const override; void AddTransientItem(const GURL& url) override;
diff --git a/ios/web/navigation/wk_based_navigation_manager_impl.mm b/ios/web/navigation/wk_based_navigation_manager_impl.mm index 7a911e55..738d66d 100644 --- a/ios/web/navigation/wk_based_navigation_manager_impl.mm +++ b/ios/web/navigation/wk_based_navigation_manager_impl.mm
@@ -98,14 +98,17 @@ } } -void WKBasedNavigationManagerImpl::OnRendererInitiatedNavigationStarted( - const GURL& url) { - if (!wk_navigation_util::IsRestoreSessionUrl(url) && - is_restore_session_in_progress_) { - // Session restoration navigations are rendered-initiated. +void WKBasedNavigationManagerImpl::OnNavigationStarted(const GURL& url) { + if (!is_restore_session_in_progress_) + return; + GURL target_url; + if (wk_navigation_util::IsRestoreSessionUrl(url) && + !web::wk_navigation_util::ExtractTargetURL(url, &target_url)) { + restoration_timer_ = std::make_unique<base::ElapsedTimer>(); + } else if (!wk_navigation_util::IsRestoreSessionUrl(url)) { is_restore_session_in_progress_ = false; - + DCHECK(restoration_timer_); UMA_HISTOGRAM_TIMES(kRestoreNavigationTime, restoration_timer_->Elapsed()); restoration_timer_.reset(); @@ -715,7 +718,6 @@ // committed item, because a restored session has no pending or transient // item. is_restore_session_in_progress_ = true; - restoration_timer_ = std::make_unique<base::ElapsedTimer>(); if (last_committed_item_index > -1) restored_visible_item_ = std::move(items[last_committed_item_index]);
diff --git a/ios/web/web_state/web_state_unittest.mm b/ios/web/web_state/web_state_unittest.mm index 12cbdeb..09b0244 100644 --- a/ios/web/web_state/web_state_unittest.mm +++ b/ios/web/web_state/web_state_unittest.mm
@@ -607,6 +607,7 @@ CRWSessionStorage* session_storage = [[CRWSessionStorage alloc] init]; session_storage.itemStorages = item_storages; auto web_state = WebState::CreateWithStorageSession(params, session_storage); + web_state->SetKeepRenderProcessAlive(true); NavigationManager* navigation_manager = web_state->GetNavigationManager(); // TODO(crbug.com/873729): The session will not be restored until // LoadIfNecessary call. Fix the bug and remove extra call.
diff --git a/media/audio/pulse/audio_manager_pulse.cc b/media/audio/pulse/audio_manager_pulse.cc index 5df75fa..f449e9a 100644 --- a/media/audio/pulse/audio_manager_pulse.cc +++ b/media/audio/pulse/audio_manager_pulse.cc
@@ -31,6 +31,7 @@ constexpr int kMaximumOutputBufferSize = 8192; constexpr int kDefaultInputBufferSize = 1024; constexpr int kDefaultSampleRate = 48000; +constexpr int kDefaultChannelCount = 2; AudioManagerPulse::AudioManagerPulse(std::unique_ptr<AudioThread> audio_thread, AudioLogFactory* audio_log_factory, @@ -39,9 +40,9 @@ : AudioManagerBase(std::move(audio_thread), audio_log_factory), input_mainloop_(pa_mainloop), input_context_(pa_context), - devices_(NULL), - native_input_sample_rate_(0), - native_channel_count_(0), + devices_(nullptr), + native_input_sample_rate_(kDefaultSampleRate), + native_channel_count_(kDefaultChannelCount), default_source_is_monitor_(false) { DCHECK(input_mainloop_); DCHECK(input_context_); @@ -84,7 +85,7 @@ operation = pa_context_get_sink_info_list( input_context_, OutputDevicesInfoCallback, this); } - WaitForOperationCompletion(input_mainloop_, operation); + WaitForOperationCompletion(input_mainloop_, operation, input_context_); // Prepend the default device if the list is not empty. if (!device_names->empty()) @@ -111,7 +112,7 @@ auto* operation = pa_context_get_source_info_by_name( input_context_, default_source_name_.c_str(), DefaultSourceInfoCallback, this); - WaitForOperationCompletion(input_mainloop_, operation); + WaitForOperationCompletion(input_mainloop_, operation, input_context_); // We don't want to accidentally open a monitor device, so return invalid // parameters for those. @@ -252,18 +253,9 @@ DCHECK(input_mainloop_); DCHECK(input_context_); AutoPulseLock auto_lock(input_mainloop_); - - // Ensure the context hasn't gone bad after creation. - pa_context_state_t context_state = pa_context_get_state(input_context_); - if (!PA_CONTEXT_IS_GOOD(context_state)) { - LOG(ERROR) << "Can't retrieve hardware parameters. pa_context is bad: " - << context_state; - return; - } - pa_operation* operation = pa_context_get_server_info( input_context_, AudioHardwareInfoCallback, this); - WaitForOperationCompletion(input_mainloop_, operation); + WaitForOperationCompletion(input_mainloop_, operation, input_context_); // Be careful about adding OS calls to this method. // GetPreferredOutputStreamParameters() calls this method on a critical path.
diff --git a/media/audio/pulse/pulse.sigs b/media/audio/pulse/pulse.sigs index 8b58887..61779335 100644 --- a/media/audio/pulse/pulse.sigs +++ b/media/audio/pulse/pulse.sigs
@@ -30,6 +30,7 @@ void pa_context_set_state_callback(pa_context* c, pa_context_notify_cb_t cb, void* userdata); pa_operation_state_t pa_operation_get_state(pa_operation* o); void pa_context_unref(pa_context* c); +void pa_operation_cancel(pa_operation* o) void pa_operation_unref(pa_operation* o); int pa_stream_begin_write(pa_stream* p, void** data, size_t* nbytes); int pa_stream_connect_playback(pa_stream* s, const char* dev, const pa_buffer_attr* attr, pa_stream_flags_t flags, const pa_cvolume* volume,pa_stream* sync_stream);
diff --git a/media/audio/pulse/pulse_input.cc b/media/audio/pulse/pulse_input.cc index f2b6d92..8afeadc 100644 --- a/media/audio/pulse/pulse_input.cc +++ b/media/audio/pulse/pulse_input.cc
@@ -88,7 +88,11 @@ pa_operation* operation = pa_stream_cork(handle_, 0, &pulse::StreamSuccessCallback, pa_mainloop_); - WaitForOperationCompletion(pa_mainloop_, operation); + + if (!WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + handle_)) { + callback_->OnError(); + } } void PulseAudioInputStream::Stop() { @@ -106,16 +110,21 @@ pa_stream_drop(handle_); fifo_.Clear(); - pa_operation* operation = pa_stream_flush(handle_, - &pulse::StreamSuccessCallback, - pa_mainloop_); - WaitForOperationCompletion(pa_mainloop_, operation); + pa_operation* operation = + pa_stream_flush(handle_, &pulse::StreamSuccessCallback, pa_mainloop_); + if (!WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + handle_)) { + callback_->OnError(); + } // Stop the stream. pa_stream_set_read_callback(handle_, NULL, NULL); - operation = pa_stream_cork(handle_, 1, &pulse::StreamSuccessCallback, - pa_mainloop_); - WaitForOperationCompletion(pa_mainloop_, operation); + operation = + pa_stream_cork(handle_, 1, &pulse::StreamSuccessCallback, pa_mainloop_); + if (!WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + handle_)) { + callback_->OnError(); + } callback_ = NULL; } @@ -126,9 +135,9 @@ if (handle_) { // Disable all the callbacks before disconnecting. pa_stream_set_state_callback(handle_, NULL, NULL); - pa_operation* operation = pa_stream_flush( - handle_, &pulse::StreamSuccessCallback, pa_mainloop_); - WaitForOperationCompletion(pa_mainloop_, operation); + pa_operation* operation = + pa_stream_flush(handle_, &pulse::StreamSuccessCallback, pa_mainloop_); + WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, handle_); if (pa_stream_get_state(handle_) != PA_STREAM_UNCONNECTED) pa_stream_disconnect(handle_); @@ -158,10 +167,11 @@ if (!channels_) { // Get the number of channels for the source only when the |channels_| is 0. // We are assuming the stream source is not changed on the fly here. - operation = pa_context_get_source_info_by_index( - pa_context_, index, &VolumeCallback, this); - WaitForOperationCompletion(pa_mainloop_, operation); - if (!channels_) { + operation = pa_context_get_source_info_by_index(pa_context_, index, + &VolumeCallback, this); + if (!WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + handle_) || + !channels_) { DLOG(WARNING) << "Failed to get the number of channels for the source"; return; } @@ -351,8 +361,8 @@ size_t index = pa_stream_get_device_index(handle_); pa_operation* operation = pa_context_get_source_info_by_index(pa_context_, index, callback, this); - WaitForOperationCompletion(pa_mainloop_, operation); - return true; + return WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + handle_); } } // namespace media
diff --git a/media/audio/pulse/pulse_output.cc b/media/audio/pulse/pulse_output.cc index 6ee4d63..55d87230 100644 --- a/media/audio/pulse/pulse_output.cc +++ b/media/audio/pulse/pulse_output.cc
@@ -91,7 +91,8 @@ // Ensure all samples are played out before shutdown. pa_operation* operation = pa_stream_flush( pa_stream_, &pulse::StreamSuccessCallback, pa_mainloop_); - WaitForOperationCompletion(pa_mainloop_, operation); + WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + pa_stream_); // Release PulseAudio structures. pa_stream_disconnect(pa_stream_); @@ -214,7 +215,10 @@ // Uncork (resume) the stream. pa_operation* operation = pa_stream_cork( pa_stream_, 0, &pulse::StreamSuccessCallback, pa_mainloop_); - WaitForOperationCompletion(pa_mainloop_, operation); + if (!WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + pa_stream_)) { + callback->OnError(); + } } void PulseAudioOutputStream::Stop() { @@ -226,18 +230,25 @@ // Set |source_callback_| to NULL so all FulfillWriteRequest() calls which may // occur while waiting on the flush and cork exit immediately. - source_callback_ = NULL; + auto* callback = source_callback_; + source_callback_ = nullptr; // Flush the stream prior to cork, doing so after will cause hangs. Write // callbacks are suspended while inside pa_threaded_mainloop_lock() so this // is all thread safe. - pa_operation* operation = pa_stream_flush( - pa_stream_, &pulse::StreamSuccessCallback, pa_mainloop_); - WaitForOperationCompletion(pa_mainloop_, operation); + pa_operation* operation = + pa_stream_flush(pa_stream_, &pulse::StreamSuccessCallback, pa_mainloop_); + if (!WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + pa_stream_)) { + callback->OnError(); + } operation = pa_stream_cork(pa_stream_, 1, &pulse::StreamSuccessCallback, pa_mainloop_); - WaitForOperationCompletion(pa_mainloop_, operation); + if (!WaitForOperationCompletion(pa_mainloop_, operation, pa_context_, + pa_stream_)) { + callback->OnError(); + } } void PulseAudioOutputStream::SetVolume(double volume) {
diff --git a/media/audio/pulse/pulse_util.cc b/media/audio/pulse/pulse_util.cc index 66d7149b..feb737a6f 100644 --- a/media/audio/pulse/pulse_util.cc +++ b/media/audio/pulse/pulse_util.cc
@@ -292,17 +292,43 @@ return channel_map; } -void WaitForOperationCompletion(pa_threaded_mainloop* pa_mainloop, - pa_operation* operation) { +bool WaitForOperationCompletion(pa_threaded_mainloop* mainloop, + pa_operation* operation, + pa_context* optional_context, + pa_stream* optional_stream) { if (!operation) { - DLOG(WARNING) << "Operation is NULL"; - return; + LOG(ERROR) << "pa_operation is nullptr."; + return false; } - while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) - pa_threaded_mainloop_wait(pa_mainloop); + while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) { + if (optional_context) { + pa_context_state_t context_state = pa_context_get_state(optional_context); + if (!PA_CONTEXT_IS_GOOD(context_state)) { + LOG(ERROR) << "pa_context went bad while waiting: state=" + << context_state << ", error=" + << pa_strerror(pa_context_errno(optional_context)); + pa_operation_cancel(operation); + pa_operation_unref(operation); + return false; + } + } + + if (optional_stream) { + pa_stream_state_t stream_state = pa_stream_get_state(optional_stream); + if (!PA_STREAM_IS_GOOD(stream_state)) { + LOG(ERROR) << "pa_stream went bad while waiting: " << stream_state; + pa_operation_cancel(operation); + pa_operation_unref(operation); + return false; + } + } + + pa_threaded_mainloop_wait(mainloop); + } pa_operation_unref(operation); + return true; } base::TimeDelta GetHardwareLatency(pa_stream* stream) { @@ -534,7 +560,7 @@ InputBusData data(mainloop, name); pa_operation* operation = pa_context_get_source_info_list(context, InputBusCallback, &data); - WaitForOperationCompletion(mainloop, operation); + WaitForOperationCompletion(mainloop, operation, context); return data.bus_; } @@ -547,7 +573,7 @@ OutputBusData data(mainloop, bus); pa_operation* operation = pa_context_get_sink_info_list(context, OutputBusCallback, &data); - WaitForOperationCompletion(mainloop, operation); + WaitForOperationCompletion(mainloop, operation, context); return data.name_; } @@ -560,7 +586,7 @@ DefaultDevicesData data(mainloop); pa_operation* operation = pa_context_get_server_info(context, &GetDefaultDeviceIdCallback, &data); - WaitForOperationCompletion(mainloop, operation); + WaitForOperationCompletion(mainloop, operation, context); return (type == RequestType::INPUT) ? data.input_ : data.output_; }
diff --git a/media/audio/pulse/pulse_util.h b/media/audio/pulse/pulse_util.h index 448ee7e6..93d740e 100644 --- a/media/audio/pulse/pulse_util.h +++ b/media/audio/pulse/pulse_util.h
@@ -50,8 +50,13 @@ pa_channel_map ChannelLayoutToPAChannelMap(ChannelLayout channel_layout); -void WaitForOperationCompletion(pa_threaded_mainloop* mainloop, - pa_operation* operation); +// Blocks until pa_operation completes. If |optional_context| and/or +// |optional_stream| are provided, the method will cancel |operation| and return +// false if either the context or stream enter a bad state while waiting. +bool WaitForOperationCompletion(pa_threaded_mainloop* mainloop, + pa_operation* operation, + pa_context* optional_context = nullptr, + pa_stream* optional_stream = nullptr); base::TimeDelta GetHardwareLatency(pa_stream* stream);
diff --git a/media/blink/websourcebuffer_impl.cc b/media/blink/websourcebuffer_impl.cc index d1a4240f..4ef068b 100644 --- a/media/blink/websourcebuffer_impl.cc +++ b/media/blink/websourcebuffer_impl.cc
@@ -31,6 +31,8 @@ CHROMIUM_PARSE_WARNING_TO_BLINK_ENUM_CASE( kKeyframeTimeGreaterThanDependant); CHROMIUM_PARSE_WARNING_TO_BLINK_ENUM_CASE(kMuxedSequenceMode); + CHROMIUM_PARSE_WARNING_TO_BLINK_ENUM_CASE( + kGroupEndTimestampDecreaseWithinMediaSegment); } NOTREACHED();
diff --git a/media/filters/frame_processor.cc b/media/filters/frame_processor.cc index 7de3796..c19fe36 100644 --- a/media/filters/frame_processor.cc +++ b/media/filters/frame_processor.cc
@@ -413,6 +413,17 @@ "SourceBuffer."; } + // Monitor |group_end_timestamp_| to detect any cases where it decreases while + // processing |frames| (which should all be from no more than 1 media + // segment), to see if (outside of mediasource fuzzers) real API usage hits + // this case frequently enough to potentially warrant MSE spec clarification + // of the last step in the coded frame processing algorithm. The previous + // value is not used as a baseline, since the spec would already handle that + // case interoperably (since we may be starting the processing of frames from + // a new media segment.) See https://crbug.com/920853 and + // https://github.com/w3c/media-source/issues/203. + base::TimeDelta max_group_end_timestamp = kNoTimestamp; + // Implements the coded frame processing algorithm's outer loop for step 1. // Note that ProcessFrame() implements an inner loop for a single frame that // handles "jump to the Loop Top step to restart processing of the current @@ -439,6 +450,9 @@ FlushProcessedFrames(); return false; } + + max_group_end_timestamp = + std::max(group_end_timestamp_, max_group_end_timestamp); } if (!FlushProcessedFrames()) @@ -449,6 +463,13 @@ // 5. If the media segment contains data beyond the current duration, then run // the duration change algorithm with new duration set to the maximum of // the current duration and the group end timestamp. + if (max_group_end_timestamp > group_end_timestamp_) { + // Log a parse warning. For now at least, we don't also log this to + // media-internals. + DCHECK(parse_warning_cb_); + parse_warning_cb_.Run( + SourceBufferParseWarning::kGroupEndTimestampDecreaseWithinMediaSegment); + } update_duration_cb_.Run(group_end_timestamp_); return true;
diff --git a/media/filters/frame_processor_unittest.cc b/media/filters/frame_processor_unittest.cc index 60a6ae86..385f360 100644 --- a/media/filters/frame_processor_unittest.cc +++ b/media/filters/frame_processor_unittest.cc
@@ -1882,6 +1882,39 @@ CheckReadsThenReadStalls(audio_.get(), "0 10 20 30"); } +TEST_P(FrameProcessorTest, + GroupEndTimestampDecreaseWithinMediaSegmentShouldWarn) { + // This parse warning requires: + // 1) a decode time discontinuity within the set of frames being processed, + // 2) the highest frame end time of any frame successfully processed + // before that discontinuity is higher than the highest frame end time of + // all frames processed after that discontinuity. + // TODO(wolenetz): Adjust this case once direction on spec is informed by + // data. See https://crbug.com/920853 and + // https://github.com/w3c/media-source/issues/203. + if (use_sequence_mode_) { + // Sequence mode modifies the presentation timestamps following a decode + // discontinuity such that this scenario should not repro with that mode. + DVLOG(1) << "Skipping segments mode variant; inapplicable to this case."; + return; + } + + InSequence s; + AddTestTracks(HAS_VIDEO); + + EXPECT_CALL(callbacks_, + OnParseWarning(SourceBufferParseWarning:: + kGroupEndTimestampDecreaseWithinMediaSegment)); + + frame_duration_ = Milliseconds(10); + EXPECT_CALL(callbacks_, PossibleDurationIncrease(Milliseconds(15))); + EXPECT_TRUE(ProcessFrames("", "0K 10K 5|40K")); + EXPECT_EQ(Milliseconds(0), timestamp_offset_); + + CheckExpectedRangesByTimestamp(video_.get(), "{ [0,15) }"); + CheckReadsThenReadStalls(video_.get(), "0 5"); +} + INSTANTIATE_TEST_SUITE_P(SequenceMode, FrameProcessorTest, Values(true)); INSTANTIATE_TEST_SUITE_P(SegmentsMode, FrameProcessorTest, Values(false));
diff --git a/media/filters/source_buffer_parse_warnings.h b/media/filters/source_buffer_parse_warnings.h index c4e72ec6..969bbbf7 100644 --- a/media/filters/source_buffer_parse_warnings.h +++ b/media/filters/source_buffer_parse_warnings.h
@@ -15,6 +15,9 @@ enum class SourceBufferParseWarning { kKeyframeTimeGreaterThanDependant, // Reported up to once per track. kMuxedSequenceMode, // Reported up to once per SourceBuffer. + + // Reported up to once per FrameProcessor::ProcessFrames(): + kGroupEndTimestampDecreaseWithinMediaSegment, }; // For reporting telemetry of a non-fatal SourceBufferParseWarning.
diff --git a/mojo/OWNERS b/mojo/OWNERS index 23c057a..5d06c5f 100644 --- a/mojo/OWNERS +++ b/mojo/OWNERS
@@ -1,4 +1,5 @@ jam@chromium.org +oksamyt@chromium.org rockot@google.com sky@chromium.org
diff --git a/mojo/public/java/system/BUILD.gn b/mojo/public/java/system/BUILD.gn index c493a9db..6fae9fa 100644 --- a/mojo/public/java/system/BUILD.gn +++ b/mojo/public/java/system/BUILD.gn
@@ -61,8 +61,10 @@ deps = [ "//base:base_java", + "//base:jni_java", "//mojo/public/java:system_java", ] + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] } # Targets should also depend on :test_support for the native side.
diff --git a/mojo/public/java/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java b/mojo/public/java/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java index 8295906..c36efdc 100644 --- a/mojo/public/java/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java +++ b/mojo/public/java/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java
@@ -6,6 +6,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.annotations.NativeMethods; import org.chromium.mojo.system.RunLoop; /** @@ -21,31 +22,31 @@ BaseRunLoop(CoreImpl core) { this.mCore = core; - this.mRunLoopID = nativeCreateBaseRunLoop(); + this.mRunLoopID = BaseRunLoopJni.get().createBaseRunLoop(BaseRunLoop.this); } @Override public void run() { assert mRunLoopID != 0 : "The run loop cannot run once closed"; - nativeRun(); + BaseRunLoopJni.get().run(BaseRunLoop.this); } @Override public void runUntilIdle() { assert mRunLoopID != 0 : "The run loop cannot run once closed"; - nativeRunUntilIdle(); + BaseRunLoopJni.get().runUntilIdle(BaseRunLoop.this); } @Override public void quit() { assert mRunLoopID != 0 : "The run loop cannot be quitted run once closed"; - nativeQuit(); + BaseRunLoopJni.get().quit(BaseRunLoop.this); } @Override public void postDelayedTask(Runnable runnable, long delay) { assert mRunLoopID != 0 : "The run loop cannot run tasks once closed"; - nativePostDelayedTask(mRunLoopID, runnable, delay); + BaseRunLoopJni.get().postDelayedTask(BaseRunLoop.this, mRunLoopID, runnable, delay); } @Override @@ -56,7 +57,7 @@ // We don't want to de-register a different run loop! assert mCore.getCurrentRunLoop() == this : "Only the current run loop can be closed"; mCore.clearCurrentRunLoop(); - nativeDeleteMessageLoop(mRunLoopID); + BaseRunLoopJni.get().deleteMessageLoop(BaseRunLoop.this, mRunLoopID); mRunLoopID = 0; } @@ -65,10 +66,13 @@ runnable.run(); } - private native long nativeCreateBaseRunLoop(); - private native void nativeRun(); - private native void nativeRunUntilIdle(); - private native void nativeQuit(); - private native void nativePostDelayedTask(long runLoopID, Runnable runnable, long delay); - private native void nativeDeleteMessageLoop(long runLoopID); + @NativeMethods + interface Natives { + long createBaseRunLoop(BaseRunLoop caller); + void run(BaseRunLoop caller); + void runUntilIdle(BaseRunLoop caller); + void quit(BaseRunLoop caller); + void postDelayedTask(BaseRunLoop caller, long runLoopID, Runnable runnable, long delay); + void deleteMessageLoop(BaseRunLoop caller, long runLoopID); + } }
diff --git a/mojo/public/java/system/src/org/chromium/mojo/system/impl/CoreImpl.java b/mojo/public/java/system/src/org/chromium/mojo/system/impl/CoreImpl.java index 6ddac5b..90658763 100644 --- a/mojo/public/java/system/src/org/chromium/mojo/system/impl/CoreImpl.java +++ b/mojo/public/java/system/src/org/chromium/mojo/system/impl/CoreImpl.java
@@ -7,6 +7,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.MainDex; +import org.chromium.base.annotations.NativeMethods; import org.chromium.mojo.system.Core; import org.chromium.mojo.system.Core.HandleSignalsState; import org.chromium.mojo.system.DataPipe; @@ -79,7 +80,8 @@ // Fix for the ART runtime, before: // https://android.googlesource.com/platform/libcore/+/fb6c80875a8a8d0a9628562f89c250b6a962e824%5E!/ // This assumes consistent allocation. - mByteBufferOffset = nativeGetNativeBufferOffset(ByteBuffer.allocateDirect(8), 8); + mByteBufferOffset = CoreImplJni.get().getNativeBufferOffset( + CoreImpl.this, ByteBuffer.allocateDirect(8), 8); } /** @@ -87,7 +89,7 @@ */ @Override public long getTimeTicksNow() { - return nativeGetTimeTicksNow(); + return CoreImplJni.get().getTimeTicksNow(CoreImpl.this); } /** @@ -102,7 +104,8 @@ optionsBuffer.putInt(0, 8); optionsBuffer.putInt(4, options.getFlags().getFlags()); } - ResultAnd<IntegerPair> result = nativeCreateMessagePipe(optionsBuffer); + ResultAnd<IntegerPair> result = + CoreImplJni.get().createMessagePipe(CoreImpl.this, optionsBuffer); if (result.getMojoResult() != MojoResult.OK) { throw new MojoException(result.getMojoResult()); } @@ -124,7 +127,8 @@ optionsBuffer.putInt(8, options.getElementNumBytes()); optionsBuffer.putInt(12, options.getCapacityNumBytes()); } - ResultAnd<IntegerPair> result = nativeCreateDataPipe(optionsBuffer); + ResultAnd<IntegerPair> result = + CoreImplJni.get().createDataPipe(CoreImpl.this, optionsBuffer); if (result.getMojoResult() != MojoResult.OK) { throw new MojoException(result.getMojoResult()); } @@ -145,7 +149,8 @@ optionsBuffer.putInt(0, 8); optionsBuffer.putInt(4, options.getFlags().getFlags()); } - ResultAnd<Integer> result = nativeCreateSharedBuffer(optionsBuffer, numBytes); + ResultAnd<Integer> result = + CoreImplJni.get().createSharedBuffer(CoreImpl.this, optionsBuffer, numBytes); if (result.getMojoResult() != MojoResult.OK) { throw new MojoException(result.getMojoResult()); } @@ -197,11 +202,11 @@ } int closeWithResult(int mojoHandle) { - return nativeClose(mojoHandle); + return CoreImplJni.get().close(CoreImpl.this, mojoHandle); } void close(int mojoHandle) { - int mojoResult = nativeClose(mojoHandle); + int mojoResult = CoreImplJni.get().close(CoreImpl.this, mojoHandle); if (mojoResult != MojoResult.OK) { throw new MojoException(mojoResult); } @@ -209,7 +214,7 @@ HandleSignalsState queryHandleSignalsState(int mojoHandle) { ByteBuffer buffer = allocateDirectBuffer(8); - int result = nativeQueryHandleSignalsState(mojoHandle, buffer); + int result = CoreImplJni.get().queryHandleSignalsState(CoreImpl.this, mojoHandle, buffer); if (result != MojoResult.OK) throw new MojoException(result); return new HandleSignalsState( new HandleSignals(buffer.getInt(0)), new HandleSignals(buffer.getInt(4))); @@ -228,8 +233,8 @@ } handlesBuffer.position(0); } - int mojoResult = nativeWriteMessage(pipeHandle.getMojoHandle(), bytes, - bytes == null ? 0 : bytes.limit(), handlesBuffer, flags.getFlags()); + int mojoResult = CoreImplJni.get().writeMessage(CoreImpl.this, pipeHandle.getMojoHandle(), + bytes, bytes == null ? 0 : bytes.limit(), handlesBuffer, flags.getFlags()); if (mojoResult != MojoResult.OK) { throw new MojoException(mojoResult); } @@ -248,8 +253,8 @@ */ ResultAnd<MessagePipeHandle.ReadMessageResult> readMessage( MessagePipeHandleImpl handle, MessagePipeHandle.ReadFlags flags) { - ResultAnd<MessagePipeHandle.ReadMessageResult> result = - nativeReadMessage(handle.getMojoHandle(), flags.getFlags()); + ResultAnd<MessagePipeHandle.ReadMessageResult> result = CoreImplJni.get().readMessage( + CoreImpl.this, handle.getMojoHandle(), flags.getFlags()); if (result.getMojoResult() != MojoResult.OK && result.getMojoResult() != MojoResult.SHOULD_WAIT) { throw new MojoException(result.getMojoResult()); @@ -273,8 +278,9 @@ * @see ConsumerHandle#discardData(int, DataPipe.ReadFlags) */ int discardData(DataPipeConsumerHandleImpl handle, int numBytes, DataPipe.ReadFlags flags) { - ResultAnd<Integer> result = nativeReadData(handle.getMojoHandle(), null, numBytes, - flags.getFlags() | MOJO_READ_DATA_FLAG_DISCARD); + ResultAnd<Integer> result = + CoreImplJni.get().readData(CoreImpl.this, handle.getMojoHandle(), null, numBytes, + flags.getFlags() | MOJO_READ_DATA_FLAG_DISCARD); if (result.getMojoResult() != MojoResult.OK) { throw new MojoException(result.getMojoResult()); } @@ -286,8 +292,9 @@ */ ResultAnd<Integer> readData( DataPipeConsumerHandleImpl handle, ByteBuffer elements, DataPipe.ReadFlags flags) { - ResultAnd<Integer> result = nativeReadData(handle.getMojoHandle(), elements, - elements == null ? 0 : elements.capacity(), flags.getFlags()); + ResultAnd<Integer> result = + CoreImplJni.get().readData(CoreImpl.this, handle.getMojoHandle(), elements, + elements == null ? 0 : elements.capacity(), flags.getFlags()); if (result.getMojoResult() != MojoResult.OK && result.getMojoResult() != MojoResult.SHOULD_WAIT) { throw new MojoException(result.getMojoResult()); @@ -305,8 +312,8 @@ */ ByteBuffer beginReadData( DataPipeConsumerHandleImpl handle, int numBytes, DataPipe.ReadFlags flags) { - ResultAnd<ByteBuffer> result = - nativeBeginReadData(handle.getMojoHandle(), numBytes, flags.getFlags()); + ResultAnd<ByteBuffer> result = CoreImplJni.get().beginReadData( + CoreImpl.this, handle.getMojoHandle(), numBytes, flags.getFlags()); if (result.getMojoResult() != MojoResult.OK) { throw new MojoException(result.getMojoResult()); } @@ -317,7 +324,8 @@ * @see ConsumerHandle#endReadData(int) */ void endReadData(DataPipeConsumerHandleImpl handle, int numBytesRead) { - int result = nativeEndReadData(handle.getMojoHandle(), numBytesRead); + int result = + CoreImplJni.get().endReadData(CoreImpl.this, handle.getMojoHandle(), numBytesRead); if (result != MojoResult.OK) { throw new MojoException(result); } @@ -328,8 +336,8 @@ */ ResultAnd<Integer> writeData( DataPipeProducerHandleImpl handle, ByteBuffer elements, DataPipe.WriteFlags flags) { - return nativeWriteData( - handle.getMojoHandle(), elements, elements.limit(), flags.getFlags()); + return CoreImplJni.get().writeData(CoreImpl.this, handle.getMojoHandle(), elements, + elements.limit(), flags.getFlags()); } /** @@ -337,8 +345,8 @@ */ ByteBuffer beginWriteData( DataPipeProducerHandleImpl handle, int numBytes, DataPipe.WriteFlags flags) { - ResultAnd<ByteBuffer> result = - nativeBeginWriteData(handle.getMojoHandle(), numBytes, flags.getFlags()); + ResultAnd<ByteBuffer> result = CoreImplJni.get().beginWriteData( + CoreImpl.this, handle.getMojoHandle(), numBytes, flags.getFlags()); if (result.getMojoResult() != MojoResult.OK) { throw new MojoException(result.getMojoResult()); } @@ -349,7 +357,8 @@ * @see ProducerHandle#endWriteData(int) */ void endWriteData(DataPipeProducerHandleImpl handle, int numBytesWritten) { - int result = nativeEndWriteData(handle.getMojoHandle(), numBytesWritten); + int result = CoreImplJni.get().endWriteData( + CoreImpl.this, handle.getMojoHandle(), numBytesWritten); if (result != MojoResult.OK) { throw new MojoException(result); } @@ -365,7 +374,8 @@ optionsBuffer.putInt(0, 8); optionsBuffer.putInt(4, options.getFlags().getFlags()); } - ResultAnd<Integer> result = nativeDuplicate(handle.getMojoHandle(), optionsBuffer); + ResultAnd<Integer> result = + CoreImplJni.get().duplicate(CoreImpl.this, handle.getMojoHandle(), optionsBuffer); if (result.getMojoResult() != MojoResult.OK) { throw new MojoException(result.getMojoResult()); } @@ -376,8 +386,8 @@ * @see SharedBufferHandle#map(long, long, MapFlags) */ ByteBuffer map(SharedBufferHandleImpl handle, long offset, long numBytes, MapFlags flags) { - ResultAnd<ByteBuffer> result = - nativeMap(handle.getMojoHandle(), offset, numBytes, flags.getFlags()); + ResultAnd<ByteBuffer> result = CoreImplJni.get().map( + CoreImpl.this, handle.getMojoHandle(), offset, numBytes, flags.getFlags()); if (result.getMojoResult() != MojoResult.OK) { throw new MojoException(result.getMojoResult()); } @@ -388,7 +398,7 @@ * @see SharedBufferHandle#unmap(ByteBuffer) */ void unmap(ByteBuffer buffer) { - int result = nativeUnmap(buffer); + int result = CoreImplJni.get().unmap(CoreImpl.this, buffer); if (result != MojoResult.OK) { throw new MojoException(result); } @@ -441,7 +451,7 @@ * Trivial alias for Pair<Integer, Integer>. This is needed because our jni generator is unable * to handle class that contains space. */ - private static final class IntegerPair extends Pair<Integer, Integer> { + static final class IntegerPair extends Pair<Integer, Integer> { public IntegerPair(Integer first, Integer second) { super(first, second); } @@ -469,47 +479,33 @@ return new ResultAnd<>(mojoResult, new IntegerPair(mojoHandle1, mojoHandle2)); } - private native long nativeGetTimeTicksNow(); - - private native ResultAnd<IntegerPair> nativeCreateMessagePipe(ByteBuffer optionsBuffer); - - private native ResultAnd<IntegerPair> nativeCreateDataPipe(ByteBuffer optionsBuffer); - - private native ResultAnd<Integer> nativeCreateSharedBuffer( - ByteBuffer optionsBuffer, long numBytes); - - private native int nativeClose(int mojoHandle); - - private native int nativeQueryHandleSignalsState(int mojoHandle, ByteBuffer signalsStateBuffer); - - private native int nativeWriteMessage( - int mojoHandle, ByteBuffer bytes, int numBytes, ByteBuffer handlesBuffer, int flags); - - private native ResultAnd<MessagePipeHandle.ReadMessageResult> nativeReadMessage( - int mojoHandle, int flags); - - private native ResultAnd<Integer> nativeReadData( - int mojoHandle, ByteBuffer elements, int elementsSize, int flags); - - private native ResultAnd<ByteBuffer> nativeBeginReadData( - int mojoHandle, int numBytes, int flags); - - private native int nativeEndReadData(int mojoHandle, int numBytesRead); - - private native ResultAnd<Integer> nativeWriteData( - int mojoHandle, ByteBuffer elements, int limit, int flags); - - private native ResultAnd<ByteBuffer> nativeBeginWriteData( - int mojoHandle, int numBytes, int flags); - - private native int nativeEndWriteData(int mojoHandle, int numBytesWritten); - - private native ResultAnd<Integer> nativeDuplicate(int mojoHandle, ByteBuffer optionsBuffer); - - private native ResultAnd<ByteBuffer> nativeMap( - int mojoHandle, long offset, long numBytes, int flags); - - private native int nativeUnmap(ByteBuffer buffer); - - private native int nativeGetNativeBufferOffset(ByteBuffer buffer, int alignment); + @NativeMethods + interface Natives { + long getTimeTicksNow(CoreImpl caller); + ResultAnd<IntegerPair> createMessagePipe(CoreImpl caller, ByteBuffer optionsBuffer); + ResultAnd<IntegerPair> createDataPipe(CoreImpl caller, ByteBuffer optionsBuffer); + ResultAnd<Integer> createSharedBuffer( + CoreImpl caller, ByteBuffer optionsBuffer, long numBytes); + int close(CoreImpl caller, int mojoHandle); + int queryHandleSignalsState(CoreImpl caller, int mojoHandle, ByteBuffer signalsStateBuffer); + int writeMessage(CoreImpl caller, int mojoHandle, ByteBuffer bytes, int numBytes, + ByteBuffer handlesBuffer, int flags); + ResultAnd<MessagePipeHandle.ReadMessageResult> readMessage( + CoreImpl caller, int mojoHandle, int flags); + ResultAnd<Integer> readData( + CoreImpl caller, int mojoHandle, ByteBuffer elements, int elementsSize, int flags); + ResultAnd<ByteBuffer> beginReadData( + CoreImpl caller, int mojoHandle, int numBytes, int flags); + int endReadData(CoreImpl caller, int mojoHandle, int numBytesRead); + ResultAnd<Integer> writeData( + CoreImpl caller, int mojoHandle, ByteBuffer elements, int limit, int flags); + ResultAnd<ByteBuffer> beginWriteData( + CoreImpl caller, int mojoHandle, int numBytes, int flags); + int endWriteData(CoreImpl caller, int mojoHandle, int numBytesWritten); + ResultAnd<Integer> duplicate(CoreImpl caller, int mojoHandle, ByteBuffer optionsBuffer); + ResultAnd<ByteBuffer> map( + CoreImpl caller, int mojoHandle, long offset, long numBytes, int flags); + int unmap(CoreImpl caller, ByteBuffer buffer); + int getNativeBufferOffset(CoreImpl caller, ByteBuffer buffer, int alignment); + } }
diff --git a/mojo/public/java/system/src/org/chromium/mojo/system/impl/WatcherImpl.java b/mojo/public/java/system/src/org/chromium/mojo/system/impl/WatcherImpl.java index 094ad90..1533093f 100644 --- a/mojo/public/java/system/src/org/chromium/mojo/system/impl/WatcherImpl.java +++ b/mojo/public/java/system/src/org/chromium/mojo/system/impl/WatcherImpl.java
@@ -6,6 +6,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.annotations.NativeMethods; import org.chromium.mojo.system.Core; import org.chromium.mojo.system.Handle; import org.chromium.mojo.system.MojoResult; @@ -13,7 +14,7 @@ @JNINamespace("mojo::android") class WatcherImpl implements Watcher { - private long mImplPtr = nativeCreateWatcher(); + private long mImplPtr = WatcherImplJni.get().createWatcher(WatcherImpl.this); private Callback mCallback; @Override @@ -24,8 +25,8 @@ if (!(handle instanceof HandleBase)) { return MojoResult.INVALID_ARGUMENT; } - int result = - nativeStart(mImplPtr, ((HandleBase) handle).getMojoHandle(), signals.getFlags()); + int result = WatcherImplJni.get().start(WatcherImpl.this, mImplPtr, + ((HandleBase) handle).getMojoHandle(), signals.getFlags()); if (result == MojoResult.OK) mCallback = callback; return result; } @@ -36,7 +37,7 @@ return; } mCallback = null; - nativeCancel(mImplPtr); + WatcherImplJni.get().cancel(WatcherImpl.this, mImplPtr); } @Override @@ -44,7 +45,7 @@ if (mImplPtr == 0) { return; } - nativeDelete(mImplPtr); + WatcherImplJni.get().delete(WatcherImpl.this, mImplPtr); mImplPtr = 0; } @@ -53,11 +54,11 @@ mCallback.onResult(result); } - private native long nativeCreateWatcher(); - - private native int nativeStart(long implPtr, int mojoHandle, int flags); - - private native void nativeCancel(long implPtr); - - private native void nativeDelete(long implPtr); + @NativeMethods + interface Natives { + long createWatcher(WatcherImpl caller); + int start(WatcherImpl caller, long implPtr, int mojoHandle, int flags); + void cancel(WatcherImpl caller, long implPtr); + void delete(WatcherImpl caller, long implPtr); + } }
diff --git a/mojo/public/tools/bindings/generators/js_templates/lite/interface_definition.tmpl b/mojo/public/tools/bindings/generators/js_templates/lite/interface_definition.tmpl index 295987a..4cd08f8e 100644 --- a/mojo/public/tools/bindings/generators/js_templates/lite/interface_definition.tmpl +++ b/mojo/public/tools/bindings/generators/js_templates/lite/interface_definition.tmpl
@@ -168,14 +168,6 @@ {% endif %} }; -{#--- Enums #} -{% from "lite/enum_definition.tmpl" import enum_def with context %} -{%- for enum in interface.enums %} -{{ enum_def("%s.%s"|format(module.namespace, interface.name), - "%s.%s"|format(module.namespace, interface.name), - enum) }} -{%- endfor %} - {% if not use_old_names -%} /** @@ -207,6 +199,14 @@ {% endif %} +{#--- Enums #} +{% from "lite/enum_definition.tmpl" import enum_def with context %} +{%- for enum in interface.enums %} +{{ enum_def("%s.%s"|format(module.namespace, interface.name), + "%s.%s"|format(module.namespace, interface.name), + enum) }} +{%- endfor %} + /** * An object which receives request messages for the {{interface.name}} * mojom interface and dispatches them as callbacks. One callback receiver exists
diff --git a/pdf/document_layout.cc b/pdf/document_layout.cc index 835dd271..433b84f 100644 --- a/pdf/document_layout.cc +++ b/pdf/document_layout.cc
@@ -53,7 +53,7 @@ void DocumentLayout::ComputeSingleViewLayout( const std::vector<pp::Size>& page_sizes) { - set_size({GetWidestPageWidth(page_sizes), 0}); + size_ = {GetWidestPageWidth(page_sizes), 0}; page_layouts_.resize(page_sizes.size()); for (size_t i = 0; i < page_sizes.size(); ++i) { @@ -73,7 +73,7 @@ void DocumentLayout::ComputeTwoUpViewLayout( const std::vector<pp::Size>& page_sizes) { - set_size({GetWidestPageWidth(page_sizes), 0}); + size_ = {GetWidestPageWidth(page_sizes), 0}; page_layouts_.resize(page_sizes.size()); for (size_t i = 0; i < page_sizes.size(); ++i) {
diff --git a/pdf/document_layout.h b/pdf/document_layout.h index f657342..cf1bcaed 100644 --- a/pdf/document_layout.h +++ b/pdf/document_layout.h
@@ -69,11 +69,6 @@ // Returns the layout's total size. const pp::Size& size() const { return size_; } - // Sets the layout's total size. - // - // TODO(kmoon): Get rid of this method. - void set_size(const pp::Size& size) { size_ = size; } - size_t page_count() const { return page_layouts_.size(); } // Gets the layout rectangle for a page. Only valid after computing a layout.
diff --git a/pdf/document_layout_unittest.cc b/pdf/document_layout_unittest.cc index 45f7f07..50ad2ab 100644 --- a/pdf/document_layout_unittest.cc +++ b/pdf/document_layout_unittest.cc
@@ -97,14 +97,15 @@ } TEST_F(DocumentLayoutTest, SetOptionsDoesNotRecomputeLayout) { - layout_.set_size(pp::Size(1, 2)); + layout_.ComputeSingleViewLayout({pp::Size(100, 200)}); + EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(100, 200)); DocumentLayout::Options options; options.RotatePagesClockwise(); layout_.set_options(options); EXPECT_EQ(layout_.options().default_page_orientation(), PageOrientation::kClockwise90); - EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(1, 2)); + EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(100, 200)); } TEST_F(DocumentLayoutTest, ComputeSingleViewLayout) {
diff --git a/remoting/host/installer/linux/debian/postinst b/remoting/host/installer/linux/debian/postinst index 682fc88b..5b5aac3 100755 --- a/remoting/host/installer/linux/debian/postinst +++ b/remoting/host/installer/linux/debian/postinst
@@ -42,7 +42,7 @@ # is not useful), and this ensures that hosts restart even if they are # deadlocked. echo "Shutting down Chrome Remote Desktop hosts (they will restart automatically)..." - killall -9 -q "$HOST_PATH" || true + pkill -KILL -f "^$HOST_PATH" || true # If any files have changed that require the user to restart their virtual # desktops (eg, the wrapper script itself) then notify them but don't do # anything that would result in them losing state.
diff --git a/services/device/public/cpp/test/fake_serial_port_manager.cc b/services/device/public/cpp/test/fake_serial_port_manager.cc index ce2b476..dd77ccd5 100644 --- a/services/device/public/cpp/test/fake_serial_port_manager.cc +++ b/services/device/public/cpp/test/fake_serial_port_manager.cc
@@ -9,6 +9,7 @@ #include "base/callback.h" #include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe.h" namespace device { @@ -17,12 +18,13 @@ class FakeSerialPort : public mojom::SerialPort { public: - FakeSerialPort(mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtr watcher) + FakeSerialPort( + mojom::SerialPortRequest request, + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher) : binding_(this, std::move(request)), watcher_(std::move(watcher)) { binding_.set_connection_error_handler(base::BindOnce( [](FakeSerialPort* self) { delete self; }, base::Unretained(this))); - watcher_.set_connection_error_handler(base::BindOnce( + watcher_.set_disconnect_handler(base::BindOnce( [](FakeSerialPort* self) { delete self; }, base::Unretained(this))); } @@ -70,7 +72,7 @@ private: mojo::Binding<mojom::SerialPort> binding_; - mojom::SerialPortConnectionWatcherPtr watcher_; + mojo::Remote<mojom::SerialPortConnectionWatcher> watcher_; // Mojo handles to keep open in order to simulate an active connection. mojo::ScopedDataPipeConsumerHandle in_stream_; @@ -106,7 +108,7 @@ void FakeSerialPortManager::GetPort( const base::UnguessableToken& token, mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtr watcher) { + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher) { // The new FakeSerialPort instance is owned by the |request| and |watcher| // pipes. new FakeSerialPort(std::move(request), std::move(watcher));
diff --git a/services/device/public/cpp/test/fake_serial_port_manager.h b/services/device/public/cpp/test/fake_serial_port_manager.h index 9ee4be95..3f52e08 100644 --- a/services/device/public/cpp/test/fake_serial_port_manager.h +++ b/services/device/public/cpp/test/fake_serial_port_manager.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "base/unguessable_token.h" #include "mojo/public/cpp/bindings/binding_set.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/device/public/mojom/serial.mojom.h" namespace device { @@ -24,9 +25,10 @@ // mojom::SerialPortManager void GetDevices(GetDevicesCallback callback) override; - void GetPort(const base::UnguessableToken& token, - mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtr watcher) override; + void GetPort( + const base::UnguessableToken& token, + mojom::SerialPortRequest request, + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher) override; private: std::map<base::UnguessableToken, mojom::SerialPortInfoPtr> ports_;
diff --git a/services/device/public/mojom/serial.mojom b/services/device/public/mojom/serial.mojom index 1e2b6721..35c5a03 100644 --- a/services/device/public/mojom/serial.mojom +++ b/services/device/public/mojom/serial.mojom
@@ -99,7 +99,7 @@ // in |watcher| will also be closed. GetPort(mojo_base.mojom.UnguessableToken token, SerialPort& port_request, - SerialPortConnectionWatcher? watcher); + pending_remote<SerialPortConnectionWatcher>? watcher); }; // Performs asynchronous I/O on serial devices.
diff --git a/services/device/serial/serial_port_impl.cc b/services/device/serial/serial_port_impl.cc index d2062ea..f646cdb0 100644 --- a/services/device/serial/serial_port_impl.cc +++ b/services/device/serial/serial_port_impl.cc
@@ -20,7 +20,7 @@ void SerialPortImpl::Create( const base::FilePath& path, mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtrInfo watcher, + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher, scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { // This SerialPortImpl is owned by |request| and |watcher|. new SerialPortImpl(path, std::move(request), std::move(watcher), @@ -30,7 +30,7 @@ SerialPortImpl::SerialPortImpl( const base::FilePath& path, mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtrInfo watcher, + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher, scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) : binding_(this, std::move(request)), io_handler_(device::SerialIoHandler::Create(path, ui_task_runner)), @@ -41,7 +41,7 @@ binding_.set_connection_error_handler(base::BindOnce( [](SerialPortImpl* self) { delete self; }, base::Unretained(this))); if (watcher_.is_bound()) { - watcher_.set_connection_error_handler(base::BindOnce( + watcher_.set_disconnect_handler(base::BindOnce( [](SerialPortImpl* self) { delete self; }, base::Unretained(this))); } }
diff --git a/services/device/serial/serial_port_impl.h b/services/device/serial/serial_port_impl.h index 469854a..a6177075 100644 --- a/services/device/serial/serial_port_impl.h +++ b/services/device/serial/serial_port_impl.h
@@ -12,6 +12,8 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe.h" #include "mojo/public/cpp/system/simple_watcher.h" #include "services/device/public/mojom/serial.mojom.h" @@ -33,14 +35,15 @@ static void Create( const base::FilePath& path, mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtrInfo watcher, + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher, scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); private: - SerialPortImpl(const base::FilePath& path, - mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtrInfo watcher, - scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); + SerialPortImpl( + const base::FilePath& path, + mojom::SerialPortRequest request, + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher, + scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); ~SerialPortImpl() override; // mojom::SerialPort methods: @@ -76,7 +79,7 @@ // Client interfaces. mojom::SerialPortClientPtr client_; - mojom::SerialPortConnectionWatcherPtr watcher_; + mojo::Remote<mojom::SerialPortConnectionWatcher> watcher_; // Data pipes for input and output. mojo::ScopedDataPipeConsumerHandle in_stream_;
diff --git a/services/device/serial/serial_port_impl_unittest.cc b/services/device/serial/serial_port_impl_unittest.cc index 51e62ae..49712f7 100644 --- a/services/device/serial/serial_port_impl_unittest.cc +++ b/services/device/serial/serial_port_impl_unittest.cc
@@ -6,7 +6,8 @@ #include "base/macros.h" #include "mojo/public/cpp/bindings/interface_request.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "services/device/device_service_test_base.h" #include "services/device/public/mojom/serial.mojom.h" @@ -25,48 +26,48 @@ TEST_F(SerialPortImplTest, WatcherClosedWhenPortClosed) { mojom::SerialPortPtr serial_port; - mojom::SerialPortConnectionWatcherPtrInfo watcher_ptr; - auto watcher_binding = mojo::MakeStrongBinding( + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher; + auto watcher_receiver = mojo::MakeSelfOwnedReceiver( std::make_unique<mojom::SerialPortConnectionWatcher>(), - mojo::MakeRequest(&watcher_ptr)); + watcher.InitWithNewPipeAndPassReceiver()); SerialPortImpl::Create(base::FilePath(), mojo::MakeRequest(&serial_port), - std::move(watcher_ptr), + std::move(watcher), base::ThreadTaskRunnerHandle::Get()); // To start with both the serial port connection and the connection watcher // connection should remain open. serial_port.FlushForTesting(); EXPECT_FALSE(serial_port.encountered_error()); - watcher_binding->FlushForTesting(); - EXPECT_TRUE(watcher_binding); + watcher_receiver->FlushForTesting(); + EXPECT_TRUE(watcher_receiver); // When the serial port connection is closed the watcher connection should be // closed. serial_port.reset(); - watcher_binding->FlushForTesting(); - EXPECT_FALSE(watcher_binding); + watcher_receiver->FlushForTesting(); + EXPECT_FALSE(watcher_receiver); } TEST_F(SerialPortImplTest, PortClosedWhenWatcherClosed) { mojom::SerialPortPtr serial_port; - mojom::SerialPortConnectionWatcherPtrInfo watcher_ptr; - auto watcher_binding = mojo::MakeStrongBinding( + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher; + auto watcher_receiver = mojo::MakeSelfOwnedReceiver( std::make_unique<mojom::SerialPortConnectionWatcher>(), - mojo::MakeRequest(&watcher_ptr)); + watcher.InitWithNewPipeAndPassReceiver()); SerialPortImpl::Create(base::FilePath(), mojo::MakeRequest(&serial_port), - std::move(watcher_ptr), + std::move(watcher), base::ThreadTaskRunnerHandle::Get()); // To start with both the serial port connection and the connection watcher // connection should remain open. serial_port.FlushForTesting(); EXPECT_FALSE(serial_port.encountered_error()); - watcher_binding->FlushForTesting(); - EXPECT_TRUE(watcher_binding); + watcher_receiver->FlushForTesting(); + EXPECT_TRUE(watcher_receiver); // When the watcher connection is closed, for safety, the serial port // connection should also be closed. - watcher_binding->Close(); + watcher_receiver->Close(); serial_port.FlushForTesting(); EXPECT_TRUE(serial_port.encountered_error()); }
diff --git a/services/device/serial/serial_port_manager_impl.cc b/services/device/serial/serial_port_manager_impl.cc index b63d273..bb31d14 100644 --- a/services/device/serial/serial_port_manager_impl.cc +++ b/services/device/serial/serial_port_manager_impl.cc
@@ -42,7 +42,7 @@ void SerialPortManagerImpl::GetPort( const base::UnguessableToken& token, mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtr watcher) { + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher) { if (!enumerator_) enumerator_ = SerialDeviceEnumerator::Create(); base::Optional<base::FilePath> path = enumerator_->GetPathFromToken(token); @@ -50,7 +50,7 @@ io_task_runner_->PostTask( FROM_HERE, base::BindOnce(&SerialPortImpl::Create, *path, std::move(request), - watcher.PassInterface(), ui_task_runner_)); + std::move(watcher), ui_task_runner_)); } }
diff --git a/services/device/serial/serial_port_manager_impl.h b/services/device/serial/serial_port_manager_impl.h index a4ddaf6..310d5d2 100644 --- a/services/device/serial/serial_port_manager_impl.h +++ b/services/device/serial/serial_port_manager_impl.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "mojo/public/cpp/bindings/binding_set.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/device/public/mojom/serial.mojom.h" namespace base { @@ -38,9 +39,10 @@ private: // mojom::SerialPortManager methods: void GetDevices(GetDevicesCallback callback) override; - void GetPort(const base::UnguessableToken& token, - mojom::SerialPortRequest request, - mojom::SerialPortConnectionWatcherPtr watcher) override; + void GetPort( + const base::UnguessableToken& token, + mojom::SerialPortRequest request, + mojo::PendingRemote<mojom::SerialPortConnectionWatcher> watcher) override; std::unique_ptr<SerialDeviceEnumerator> enumerator_;
diff --git a/services/device/serial/serial_port_manager_impl_unittest.cc b/services/device/serial/serial_port_manager_impl_unittest.cc index a1834b0..9b0020e3 100644 --- a/services/device/serial/serial_port_manager_impl_unittest.cc +++ b/services/device/serial/serial_port_manager_impl_unittest.cc
@@ -18,6 +18,7 @@ #include "base/threading/thread.h" #include "mojo/public/cpp/bindings/interface_ptr.h" #include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "services/device/device_service_test_base.h" #include "services/device/public/mojom/constants.mojom.h" @@ -77,7 +78,7 @@ for (auto& device : results) { mojom::SerialPortPtr serial_port; port_manager->GetPort(device->token, mojo::MakeRequest(&serial_port), - /*watcher=*/nullptr); + /*watcher=*/mojo::NullRemote()); // Send a message on the pipe and wait for the response to make sure // that the interface request was bound successfully. serial_port.FlushForTesting(); @@ -119,7 +120,7 @@ mojom::SerialPortPtr serial_port; port_manager->GetPort(results[0]->token, mojo::MakeRequest(&serial_port), - /*watcher=*/nullptr); + /*watcher=*/mojo::NullRemote()); // Send a message on the pipe and wait for the response to make sure // that the interface request was bound successfully. serial_port.FlushForTesting();
diff --git a/services/network/public/cpp/content_security_policy.cc b/services/network/public/cpp/content_security_policy.cc index 04938be..ee8ba31 100644 --- a/services/network/public/cpp/content_security_policy.cc +++ b/services/network/public/cpp/content_security_policy.cc
@@ -289,17 +289,32 @@ bool ContentSecurityPolicy::ParseFrameAncestors( base::StringPiece header_value) { - // Parse the CSP directives. - // https://www.w3.org/TR/CSP3/#parse-serialized-policy - if (auto frame_ancestors_value = ParseHeaderValue(header_value)) { - // TODO(lfg): Emit a warning to the user when parsing an invalid - // expression. - if (auto parsed_frame_ancestors = - ParseFrameAncestorsDirective(*frame_ancestors_value)) { - content_security_policy_ptr_ = mojom::ContentSecurityPolicy::New(); - content_security_policy_ptr_->frame_ancestors = - std::move(*parsed_frame_ancestors); - return true; + // A frame-ancestors directive has already been parsed. Skip further + // frame-ancestors directives per + // https://www.w3.org/TR/CSP3/#parse-serialized-policy. + if (content_security_policy_ptr_ && + content_security_policy_ptr_->frame_ancestors) { + return true; + } + + // RFC7230, section 3.2.2 specifies that headers appearing multiple times can + // be combined with a comma. Walk the header string, and parse each comma + // separated chunk as a separate header. + for (const auto& header : + base::SplitStringPiece(header_value, ",", base::TRIM_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { + // Parse the CSP directives. + // https://www.w3.org/TR/CSP3/#parse-serialized-policy + if (auto frame_ancestors_value = ParseHeaderValue(header)) { + // TODO(lfg): Emit a warning to the user when parsing an invalid + // expression. + if (auto parsed_frame_ancestors = + ParseFrameAncestorsDirective(*frame_ancestors_value)) { + content_security_policy_ptr_ = mojom::ContentSecurityPolicy::New(); + content_security_policy_ptr_->frame_ancestors = + std::move(*parsed_frame_ancestors); + return true; + } } } return false;
diff --git a/services/network/public/cpp/content_security_policy_unittest.cc b/services/network/public/cpp/content_security_policy_unittest.cc index 063964d..d50dc7d6 100644 --- a/services/network/public/cpp/content_security_policy_unittest.cc +++ b/services/network/public/cpp/content_security_policy_unittest.cc
@@ -232,6 +232,73 @@ EXPECT_EQ(frame_ancestors->sources[0]->is_port_wildcard, false); EXPECT_EQ(frame_ancestors->sources[0]->allow_self, false); } + + // Multiple CSP headers with multiple frame-ancestors directives present. Only + // the first one is considered. + { + scoped_refptr<net::HttpResponseHeaders> headers( + new net::HttpResponseHeaders("HTTP/1.1 200 OK")); + headers->AddHeader("Content-Security-Policy: frame-ancestors example.com"); + headers->AddHeader("Content-Security-Policy: frame-ancestors example.org"); + ContentSecurityPolicy policy; + policy.Parse(*headers); + + auto& frame_ancestors = + policy.content_security_policy_ptr()->frame_ancestors; + EXPECT_EQ(frame_ancestors->sources.size(), 1U); + EXPECT_EQ(frame_ancestors->sources[0]->scheme, ""); + EXPECT_EQ(frame_ancestors->sources[0]->host, "example.com"); + EXPECT_EQ(frame_ancestors->sources[0]->port, url::PORT_UNSPECIFIED); + EXPECT_EQ(frame_ancestors->sources[0]->path, ""); + EXPECT_EQ(frame_ancestors->sources[0]->is_host_wildcard, false); + EXPECT_EQ(frame_ancestors->sources[0]->is_port_wildcard, false); + EXPECT_EQ(frame_ancestors->sources[0]->allow_self, false); + } + + // Multiple CSP headers separated by ',' (RFC2616 section 4.2). + { + scoped_refptr<net::HttpResponseHeaders> headers( + new net::HttpResponseHeaders("HTTP/1.1 200 OK")); + headers->AddHeader( + "Content-Security-Policy: other_directive value, frame-ancestors " + "example.org"); + ContentSecurityPolicy policy; + policy.Parse(*headers); + + auto& frame_ancestors = + policy.content_security_policy_ptr()->frame_ancestors; + EXPECT_EQ(frame_ancestors->sources.size(), 1U); + EXPECT_EQ(frame_ancestors->sources[0]->scheme, ""); + EXPECT_EQ(frame_ancestors->sources[0]->host, "example.org"); + EXPECT_EQ(frame_ancestors->sources[0]->port, url::PORT_UNSPECIFIED); + EXPECT_EQ(frame_ancestors->sources[0]->path, ""); + EXPECT_EQ(frame_ancestors->sources[0]->is_host_wildcard, false); + EXPECT_EQ(frame_ancestors->sources[0]->is_port_wildcard, false); + EXPECT_EQ(frame_ancestors->sources[0]->allow_self, false); + } + + // Multiple CSP headers separated by ',', with multiple frame-ancestors + // directives present. Only the first one is considered. + { + scoped_refptr<net::HttpResponseHeaders> headers( + new net::HttpResponseHeaders("HTTP/1.1 200 OK")); + headers->AddHeader( + "Content-Security-Policy: frame-ancestors example.com, frame-ancestors " + "example.org"); + ContentSecurityPolicy policy; + policy.Parse(*headers); + + auto& frame_ancestors = + policy.content_security_policy_ptr()->frame_ancestors; + EXPECT_EQ(frame_ancestors->sources.size(), 1U); + EXPECT_EQ(frame_ancestors->sources[0]->scheme, ""); + EXPECT_EQ(frame_ancestors->sources[0]->host, "example.com"); + EXPECT_EQ(frame_ancestors->sources[0]->port, url::PORT_UNSPECIFIED); + EXPECT_EQ(frame_ancestors->sources[0]->path, ""); + EXPECT_EQ(frame_ancestors->sources[0]->is_host_wildcard, false); + EXPECT_EQ(frame_ancestors->sources[0]->is_port_wildcard, false); + EXPECT_EQ(frame_ancestors->sources[0]->allow_self, false); + } } } // namespace network
diff --git a/services/viz/public/cpp/compositing/frame_timing_details_mojom_traits.h b/services/viz/public/cpp/compositing/frame_timing_details_mojom_traits.h index 0e5d94f..d36ca32 100644 --- a/services/viz/public/cpp/compositing/frame_timing_details_mojom_traits.h +++ b/services/viz/public/cpp/compositing/frame_timing_details_mojom_traits.h
@@ -9,17 +9,13 @@ #include "services/viz/public/mojom/compositing/frame_timing_details.mojom-shared.h" #include "ui/gfx/presentation_feedback.h" +#include "ui/gfx/swap_result.h" namespace mojo { template <> struct StructTraits<viz::mojom::FrameTimingDetailsDataView, viz::FrameTimingDetails> { - static gfx::PresentationFeedback presentation_feedback( - const viz::FrameTimingDetails& frame_timing_details) { - return frame_timing_details.presentation_feedback; - } - static base::TimeTicks received_compositor_frame_timestamp( const viz::FrameTimingDetails& frame_timing_details) { return frame_timing_details.received_compositor_frame_timestamp; @@ -30,12 +26,23 @@ return frame_timing_details.draw_start_timestamp; } + static gfx::SwapTimings swap_timings( + const viz::FrameTimingDetails& frame_timing_details) { + return frame_timing_details.swap_timings; + } + + static gfx::PresentationFeedback presentation_feedback( + const viz::FrameTimingDetails& frame_timing_details) { + return frame_timing_details.presentation_feedback; + } + static bool Read(viz::mojom::FrameTimingDetailsDataView data, viz::FrameTimingDetails* out) { - return data.ReadPresentationFeedback(&out->presentation_feedback) && - data.ReadReceivedCompositorFrameTimestamp( + return data.ReadReceivedCompositorFrameTimestamp( &out->received_compositor_frame_timestamp) && - data.ReadDrawStartTimestamp(&out->draw_start_timestamp); + data.ReadDrawStartTimestamp(&out->draw_start_timestamp) && + data.ReadSwapTimings(&out->swap_timings) && + data.ReadPresentationFeedback(&out->presentation_feedback); } };
diff --git a/services/viz/public/mojom/compositing/frame_timing_details.mojom b/services/viz/public/mojom/compositing/frame_timing_details.mojom index 881f2746..22d4d1d3 100644 --- a/services/viz/public/mojom/compositing/frame_timing_details.mojom +++ b/services/viz/public/mojom/compositing/frame_timing_details.mojom
@@ -6,10 +6,12 @@ import "mojo/public/mojom/base/time.mojom"; import "ui/gfx/mojom/presentation_feedback.mojom"; +import "ui/gfx/mojom/swap_timings.mojom"; // viz::FrameTimingDetails struct FrameTimingDetails { - gfx.mojom.PresentationFeedback presentation_feedback; mojo_base.mojom.TimeTicks received_compositor_frame_timestamp; mojo_base.mojom.TimeTicks draw_start_timestamp; + gfx.mojom.SwapTimings swap_timings; + gfx.mojom.PresentationFeedback presentation_feedback; };
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index d750df34..eff4c7d 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -14015,196 +14015,10 @@ ] }, "Mac FYI Experimental Release (Intel)": { - "gtest_tests": [ - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "shards": 4 - }, - "test": "angle_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "angle_unittests" - }, - { - "args": [ - "--enable-gpu", - "--test-launcher-bot-mode", - "--test-launcher-jobs=1", - "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "tab_capture_end2end_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "browser_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--use-cmd-decoder=validating" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_tests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_unittests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gles2_conform_test" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gpu_unittests" - }, - { - "args": [ - "--gtest_filter=*Detection*", - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "services_unittests" - } - ], "isolated_scripts": [ { "args": [ - "context_lost", + "noop_sleep", "--show-stdout", "--browser=release", "--passthrough", @@ -14216,7 +14030,7 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "context_lost_tests", + "name": "noop_sleep_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -14231,571 +14045,14 @@ "expiration": 21600, "idempotent": false } - }, - { - "args": [ - "depth_capture", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "depth_capture_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "gpu_process", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gpu_process_launch_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "hardware_accelerated_feature", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "hardware_accelerated_feature_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "info_collection", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu", - "--expected-vendor-id", - "8086", - "--expected-device-id", - "0a2e" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "info_collection_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "maps", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test", - "--os-type", - "mac", - "--build-revision", - "${got_revision}", - "--test-machine-name", - "${buildername}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "maps_pixel_test", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "pixel", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test", - "--os-type", - "mac", - "--build-revision", - "${got_revision}", - "--test-machine-name", - "${buildername}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "pixel_skia_gold_test", - "precommit_args": [ - "--review-patch-issue", - "${patch_issue}", - "--review-patch-set", - "${patch_set}", - "--buildbucket-build-id", - "${buildbucket_build_id}" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" - } - }, - { - "args": [ - "screenshot_sync", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "screenshot_sync_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "trace_test", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "trace_test", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu", - "--webgl-conformance-version=2.0.1", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl2_conformance_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 20 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl_conformance_gl_passthrough_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl_conformance_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } } ] }, "Mac FYI Experimental Retina Release (AMD)": { - "gtest_tests": [ - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "shards": 4 - }, - "test": "angle_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "angle_unittests" - }, - { - "args": [ - "--enable-gpu", - "--test-launcher-bot-mode", - "--test-launcher-jobs=1", - "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "tab_capture_end2end_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "browser_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--use-cmd-decoder=validating" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_tests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_unittests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gles2_conform_test" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gpu_unittests" - }, - { - "args": [ - "--gtest_filter=*Detection*", - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "services_unittests" - } - ], "isolated_scripts": [ { "args": [ - "context_lost", + "noop_sleep", "--show-stdout", "--browser=release", "--passthrough", @@ -14807,7 +14064,7 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "context_lost_tests", + "name": "noop_sleep_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -14823,582 +14080,14 @@ "expiration": 21600, "idempotent": false } - }, - { - "args": [ - "depth_capture", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "depth_capture_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "gpu_process", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gpu_process_launch_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "hardware_accelerated_feature", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "hardware_accelerated_feature_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "info_collection", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu", - "--expected-vendor-id", - "1002", - "--expected-device-id", - "6821" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "info_collection_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "maps", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test", - "--os-type", - "mac", - "--build-revision", - "${got_revision}", - "--test-machine-name", - "${buildername}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "maps_pixel_test", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "pixel", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test", - "--os-type", - "mac", - "--build-revision", - "${got_revision}", - "--test-machine-name", - "${buildername}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "pixel_skia_gold_test", - "precommit_args": [ - "--review-patch-issue", - "${patch_issue}", - "--review-patch-set", - "${patch_set}", - "--buildbucket-build-id", - "${buildbucket_build_id}" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" - } - }, - { - "args": [ - "screenshot_sync", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "screenshot_sync_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "trace_test", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "trace_test", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu", - "--webgl-conformance-version=2.0.1", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl2_conformance_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 20 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl_conformance_gl_passthrough_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl_conformance_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "1002:6821", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } } ] }, "Mac FYI Experimental Retina Release (NVIDIA)": { - "gtest_tests": [ - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "shards": 4 - }, - "test": "angle_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "angle_unittests" - }, - { - "args": [ - "--enable-gpu", - "--test-launcher-bot-mode", - "--test-launcher-jobs=1", - "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "tab_capture_end2end_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "browser_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--use-cmd-decoder=validating" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_tests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_unittests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gles2_conform_test" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gpu_unittests" - }, - { - "args": [ - "--gtest_filter=*Detection*", - "--use-gpu-in-tests" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "services_unittests" - } - ], "isolated_scripts": [ { "args": [ - "context_lost", + "noop_sleep", "--show-stdout", "--browser=release", "--passthrough", @@ -15410,7 +14099,7 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "context_lost_tests", + "name": "noop_sleep_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -15426,380 +14115,6 @@ "expiration": 21600, "idempotent": false } - }, - { - "args": [ - "depth_capture", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "depth_capture_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "gpu_process", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gpu_process_launch_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "hardware_accelerated_feature", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "hardware_accelerated_feature_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "info_collection", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu", - "--expected-vendor-id", - "10de", - "--expected-device-id", - "0fe9" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "info_collection_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "maps", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test", - "--os-type", - "mac", - "--build-revision", - "${got_revision}", - "--test-machine-name", - "${buildername}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "maps_pixel_test", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "pixel", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test", - "--os-type", - "mac", - "--build-revision", - "${got_revision}", - "--test-machine-name", - "${buildername}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "pixel_skia_gold_test", - "precommit_args": [ - "--review-patch-issue", - "${patch_issue}", - "--review-patch-set", - "${patch_set}", - "--buildbucket-build-id", - "${buildbucket_build_id}" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" - } - }, - { - "args": [ - "screenshot_sync", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "screenshot_sync_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "trace_test", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "trace_test", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu", - "--webgl-conformance-version=2.0.1", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl2_conformance_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 20 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl_conformance_gl_passthrough_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "webgl_conformance_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "10de:0fe9", - "hidpi": "1", - "os": "Mac-10.13.6", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } } ] },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 316a4ef9..71744bd 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -2857,9 +2857,11 @@ 'limited_capacity_bot', 'mac_mini_intel_gpu_experimental', ], + # Currently the experimental driver is identical to the stable + # driver. If it's upgraded, change these test_suites to be the same as + # 'Mac FYI Release (Intel)'. 'test_suites': { - 'gtest_tests': 'gpu_fyi_mac_release_gtests', - 'gpu_telemetry_tests': 'gpu_fyi_mac_release_telemetry_tests', + 'gpu_telemetry_tests': 'gpu_noop_sleep_telemetry_test', }, }, 'Mac FYI Experimental Retina Release (AMD)': { @@ -2869,9 +2871,11 @@ 'limited_capacity_bot', 'mac_retina_amd_gpu_experimental', ], + # Currently the experimental driver is identical to the stable + # driver. If it's upgraded, change these test_suites to be the same as + # 'Mac FYI Retina Release (AMD)'. 'test_suites': { - 'gtest_tests': 'gpu_fyi_mac_release_gtests', - 'gpu_telemetry_tests': 'gpu_fyi_mac_release_telemetry_tests', + 'gpu_telemetry_tests': 'gpu_noop_sleep_telemetry_test', }, }, 'Mac FYI Experimental Retina Release (NVIDIA)': { @@ -2881,9 +2885,11 @@ 'limited_capacity_bot', 'mac_retina_nvidia_gpu_experimental', ], + # Currently the experimental driver is identical to the stable + # driver. If it's upgraded, change these test_suites to be the same as + # 'Mac FYI Retina Release (NVIDIA)'. 'test_suites': { - 'gtest_tests': 'gpu_fyi_mac_release_gtests', - 'gpu_telemetry_tests': 'gpu_fyi_mac_release_telemetry_tests', + 'gpu_telemetry_tests': 'gpu_noop_sleep_telemetry_test', }, }, 'Mac FYI GPU ASAN Release': {
diff --git a/third_party/blink/common/fetch/fetch_api_request_body_mojom_traits.cc b/third_party/blink/common/fetch/fetch_api_request_body_mojom_traits.cc index 9ed7814..439236e 100644 --- a/third_party/blink/common/fetch/fetch_api_request_body_mojom_traits.cc +++ b/third_party/blink/common/fetch/fetch_api_request_body_mojom_traits.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h" #include "services/network/public/cpp/url_request_mojom_traits.h" +#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom.h" namespace mojo {
diff --git a/third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h b/third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h index ecd5fce..c828baf 100644 --- a/third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h +++ b/third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h
@@ -11,7 +11,7 @@ #include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/cpp/resource_request_body.h" #include "services/network/public/mojom/url_loader.mojom.h" -#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom.h" +#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-forward.h" namespace mojo {
diff --git a/third_party/blink/public/common/fetch/fetch_api_request_headers_mojom_traits.h b/third_party/blink/public/common/fetch/fetch_api_request_headers_mojom_traits.h index 9454bd0a..3efb9d6d 100644 --- a/third_party/blink/public/common/fetch/fetch_api_request_headers_mojom_traits.h +++ b/third_party/blink/public/common/fetch/fetch_api_request_headers_mojom_traits.h
@@ -10,7 +10,7 @@ #include "base/containers/flat_map.h" #include "base/strings/string_util.h" #include "third_party/blink/public/common/fetch/fetch_api_request_headers_map.h" -#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom.h" +#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-forward.h" namespace mojo {
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom index 77863a54..eb0a6451 100644 --- a/third_party/blink/public/mojom/web_feature/web_feature.mojom +++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -2414,6 +2414,7 @@ kDelegateFocusNotFirstInFlatTree = 3031, kThirdPartySharedWorker = 3032, kThirdPartyBroadcastChannel = 3033, + kMediaSourceGroupEndTimestampDecreaseWithinMediaSegment = 3034, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h index 5cb51c9..414aff9 100644 --- a/third_party/blink/public/platform/platform.h +++ b/third_party/blink/public/platform/platform.h
@@ -126,7 +126,6 @@ class WebMediaCapabilitiesClient; class WebPrescientNetworking; class WebPublicSuffixList; -class WebRtcAudioDeviceImpl; class WebRTCCertificateGenerator; class WebRTCPeerConnectionHandler; class WebRTCPeerConnectionHandlerClient; @@ -631,10 +630,6 @@ return media::AudioLatency::LATENCY_PLAYBACK; } - virtual blink::WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() { - return nullptr; - } - virtual base::Optional<std::string> GetWebRTCAudioProcessingConfiguration() { return base::nullopt; }
diff --git a/third_party/blink/public/platform/web_source_buffer_client.h b/third_party/blink/public/platform/web_source_buffer_client.h index 81cb946..85f342b 100644 --- a/third_party/blink/public/platform/web_source_buffer_client.h +++ b/third_party/blink/public/platform/web_source_buffer_client.h
@@ -16,7 +16,11 @@ class WebSourceBufferClient { public: // Parser notification types used to monitor problematic usage. - enum ParseWarning { kKeyframeTimeGreaterThanDependant, kMuxedSequenceMode }; + enum ParseWarning { + kKeyframeTimeGreaterThanDependant, + kMuxedSequenceMode, + kGroupEndTimestampDecreaseWithinMediaSegment + }; virtual ~WebSourceBufferClient() = default;
diff --git a/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h b/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h index 3e1d33f9..2e97405 100644 --- a/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h +++ b/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h
@@ -48,9 +48,14 @@ class BLINK_MODULES_EXPORT PeerConnectionDependencyFactory : base::MessageLoopCurrent::DestructionObserver { public: + // TODO(crbug.com/787254): Make this constructor private, when + // MockPeerConnectionDependencyFactory gets moved to blink. + // (friend class declaration will be needed). PeerConnectionDependencyFactory(bool create_p2p_socket_dispatcher); ~PeerConnectionDependencyFactory() override; + static PeerConnectionDependencyFactory* GetInstance(); + // Create a RTCPeerConnectionHandler object that implements the // WebKit WebRTCPeerConnectionHandler interface. std::unique_ptr<blink::WebRTCPeerConnectionHandler>
diff --git a/third_party/blink/renderer/BUILD.gn b/third_party/blink/renderer/BUILD.gn index b8718ca..0d02c49 100644 --- a/third_party/blink/renderer/BUILD.gn +++ b/third_party/blink/renderer/BUILD.gn
@@ -112,6 +112,14 @@ "blink-gc-plugin", ] + # Don't perform checks for GarbageCollectedFinalized. + cflags += [ + "-Xclang", + "-plugin-arg-blink-gc-plugin", + "-Xclang", + "no-gc-finalized", + ] + # Add arguments for enabled GC plugin options: if (blink_gc_plugin_option_do_dump_graph) { cflags += [
diff --git a/third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h b/third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h index 2daa9ac..5f76f3b4 100644 --- a/third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h +++ b/third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h
@@ -18,8 +18,7 @@ // Hash of Member<BoxedV8Module> overrides HashTraits. // Therefore, BoxedV8Module can be a key/value type of WTF::HashMap, // HashSet,HashTable by using BoxedV8ModuleHash. -class CORE_EXPORT BoxedV8Module - : public GarbageCollectedFinalized<BoxedV8Module> { +class CORE_EXPORT BoxedV8Module : public GarbageCollected<BoxedV8Module> { public: BoxedV8Module(v8::Isolate* isolate, v8::Local<v8::Module> module) : record_(isolate, module),
diff --git a/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h b/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h index a6bbfaf..5e20c3c 100644 --- a/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h +++ b/third_party/blink/renderer/bindings/core/v8/idl_dictionary_base.h
@@ -16,7 +16,7 @@ // by auto-generated IDL dictionary impl classes. toV8Impl() is used // in ToV8.h to provide a consistent API of ToV8(). class CORE_EXPORT IDLDictionaryBase - : public GarbageCollectedFinalized<IDLDictionaryBase> { + : public GarbageCollected<IDLDictionaryBase> { public: virtual ~IDLDictionaryBase() = default;
diff --git a/third_party/blink/renderer/bindings/core/v8/isolated_world_csp.cc b/third_party/blink/renderer/bindings/core/v8/isolated_world_csp.cc index 9182773..efa7fbc 100644 --- a/third_party/blink/renderer/bindings/core/v8/isolated_world_csp.cc +++ b/third_party/blink/renderer/bindings/core/v8/isolated_world_csp.cc
@@ -25,7 +25,7 @@ namespace { class IsolatedWorldCSPDelegate final - : public GarbageCollectedFinalized<IsolatedWorldCSPDelegate>, + : public GarbageCollected<IsolatedWorldCSPDelegate>, public ContentSecurityPolicyDelegate { USING_GARBAGE_COLLECTED_MIXIN(IsolatedWorldCSPDelegate);
diff --git a/third_party/blink/renderer/bindings/core/v8/iterable.h b/third_party/blink/renderer/bindings/core/v8/iterable.h index 0d89cfa..9e0f8f2 100644 --- a/third_party/blink/renderer/bindings/core/v8/iterable.h +++ b/third_party/blink/renderer/bindings/core/v8/iterable.h
@@ -88,7 +88,7 @@ } } - class IterationSource : public GarbageCollectedFinalized<IterationSource> { + class IterationSource : public GarbageCollected<IterationSource> { public: virtual ~IterationSource() = default;
diff --git a/third_party/blink/renderer/bindings/core/v8/module_record.h b/third_party/blink/renderer/bindings/core/v8/module_record.h index 83d9e88..f45ed42 100644 --- a/third_party/blink/renderer/bindings/core/v8/module_record.h +++ b/third_party/blink/renderer/bindings/core/v8/module_record.h
@@ -28,7 +28,7 @@ // ModuleRecordProduceCacheData is a parameter object for // ModuleRecord::ProduceCache(). class CORE_EXPORT ModuleRecordProduceCacheData final - : public GarbageCollectedFinalized<ModuleRecordProduceCacheData> { + : public GarbageCollected<ModuleRecordProduceCacheData> { public: ModuleRecordProduceCacheData(v8::Isolate*, SingleCachedMetadataHandler*,
diff --git a/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h b/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h index 4975513..ca5975a 100644 --- a/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h +++ b/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h
@@ -69,7 +69,7 @@ // The trace format is described at: // https://wicg.github.io/js-self-profiling/#the-profilertrace-dictionary class ProfilerTraceBuilder final - : public GarbageCollectedFinalized<ProfilerTraceBuilder> { + : public GarbageCollected<ProfilerTraceBuilder> { public: static ProfilerTrace* FromProfile(ScriptState*, const v8::CpuProfile* profile,
diff --git a/third_party/blink/renderer/bindings/core/v8/scheduled_action.h b/third_party/blink/renderer/bindings/core/v8/scheduled_action.h index 5c6de14..b41f72b 100644 --- a/third_party/blink/renderer/bindings/core/v8/scheduled_action.h +++ b/third_party/blink/renderer/bindings/core/v8/scheduled_action.h
@@ -47,7 +47,7 @@ class V8Function; class WorkerGlobalScope; -class ScheduledAction final : public GarbageCollectedFinalized<ScheduledAction>, +class ScheduledAction final : public GarbageCollected<ScheduledAction>, public NameClient { DISALLOW_COPY_AND_ASSIGN(ScheduledAction);
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise.cc b/third_party/blink/renderer/bindings/core/v8/script_promise.cc index b031ff084..a358e4f 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_promise.cc
@@ -43,8 +43,7 @@ namespace { -class PromiseAllHandler final - : public GarbageCollectedFinalized<PromiseAllHandler> { +class PromiseAllHandler final : public GarbageCollected<PromiseAllHandler> { public: static ScriptPromise All(ScriptState* script_state, const Vector<ScriptPromise>& promises) {
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise_property_base.h b/third_party/blink/renderer/bindings/core/v8/script_promise_property_base.h index cf1785b..11cb4ee 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise_property_base.h +++ b/third_party/blink/renderer/bindings/core/v8/script_promise_property_base.h
@@ -25,7 +25,7 @@ // TODO(yhirano): Remove NOINLINE once we find the cause of crashes. class CORE_EXPORT ScriptPromisePropertyBase - : public GarbageCollectedFinalized<ScriptPromisePropertyBase>, + : public GarbageCollected<ScriptPromisePropertyBase>, public ContextClient { USING_GARBAGE_COLLECTED_MIXIN(ScriptPromisePropertyBase);
diff --git a/third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h b/third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h index 934967b..a83957e 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h +++ b/third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h
@@ -36,7 +36,7 @@ // There are cases where promises cannot work (e.g., where the thread is being // terminated). In such cases operations will silently fail. class CORE_EXPORT ScriptPromiseResolver - : public GarbageCollectedFinalized<ScriptPromiseResolver>, + : public GarbageCollected<ScriptPromiseResolver>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(ScriptPromiseResolver); USING_PRE_FINALIZER(ScriptPromiseResolver, Dispose);
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.h b/third_party/blink/renderer/bindings/core/v8/script_streamer.h index 43f3998a..685112d5 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_streamer.h +++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.h
@@ -29,7 +29,7 @@ // ClassicPendingScript are destroyed while the streaming is in progress, and // ScriptStreamer handles it gracefully. class CORE_EXPORT ScriptStreamer final - : public GarbageCollectedFinalized<ScriptStreamer> { + : public GarbageCollected<ScriptStreamer> { USING_PRE_FINALIZER(ScriptStreamer, Prefinalize); public:
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer_test.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer_test.cc index 1cd0bdcc..93db3b7 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_streamer_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_streamer_test.cc
@@ -43,9 +43,8 @@ namespace { -class TestResourceClient final - : public GarbageCollectedFinalized<TestResourceClient>, - public ResourceClient { +class TestResourceClient final : public GarbageCollected<TestResourceClient>, + public ResourceClient { USING_GARBAGE_COLLECTED_MIXIN(TestResourceClient); public:
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/unpacked_serialized_script_value.h b/third_party/blink/renderer/bindings/core/v8/serialization/unpacked_serialized_script_value.h index da59492f..cb97edb 100644 --- a/third_party/blink/renderer/bindings/core/v8/serialization/unpacked_serialized_script_value.h +++ b/third_party/blink/renderer/bindings/core/v8/serialization/unpacked_serialized_script_value.h
@@ -36,7 +36,7 @@ // reason, a SerializedScriptValue can only be unpacked once, but thereafter it // can be deserialized multiple times. class CORE_EXPORT UnpackedSerializedScriptValue final - : public GarbageCollectedFinalized<UnpackedSerializedScriptValue> { + : public GarbageCollected<UnpackedSerializedScriptValue> { public: // Callers should use SerializedScriptValue::Unpack. explicit UnpackedSerializedScriptValue(scoped_refptr<SerializedScriptValue>);
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc index 8bf3935e..ba95c2b 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
@@ -159,7 +159,7 @@ // argument to BodyStreamBuffer::startLoading, however, it fulfills // a very small role. Consider refactoring to avoid it. class WasmDataLoaderClient final - : public GarbageCollectedFinalized<WasmDataLoaderClient>, + : public GarbageCollected<WasmDataLoaderClient>, public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(WasmDataLoaderClient);
diff --git a/third_party/blink/renderer/bindings/core/v8/window_proxy.h b/third_party/blink/renderer/bindings/core/v8/window_proxy.h index 44a70bd..060b4a3b 100644 --- a/third_party/blink/renderer/bindings/core/v8/window_proxy.h +++ b/third_party/blink/renderer/bindings/core/v8/window_proxy.h
@@ -141,7 +141,7 @@ // ====== References ====== // https://wiki.mozilla.org/Gecko:SplitWindow // https://whatwg.org/C/browsers.html#the-windowproxy-exotic-object -class WindowProxy : public GarbageCollectedFinalized<WindowProxy> { +class WindowProxy : public GarbageCollected<WindowProxy> { public: virtual ~WindowProxy();
diff --git a/third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h b/third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h index 3b9faad..b4d37783 100644 --- a/third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h +++ b/third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h
@@ -50,7 +50,7 @@ class WorkerOrWorkletGlobalScope; class CORE_EXPORT WorkerOrWorkletScriptController final - : public GarbageCollectedFinalized<WorkerOrWorkletScriptController> { + : public GarbageCollected<WorkerOrWorkletScriptController> { public: WorkerOrWorkletScriptController(WorkerOrWorkletGlobalScope*, v8::Isolate*); virtual ~WorkerOrWorkletScriptController();
diff --git a/third_party/blink/renderer/build/scripts/templates/probe_sink.h.tmpl b/third_party/blink/renderer/build/scripts/templates/probe_sink.h.tmpl index 9eadaec6d..163e9e1 100644 --- a/third_party/blink/renderer/build/scripts/templates/probe_sink.h.tmpl +++ b/third_party/blink/renderer/build/scripts/templates/probe_sink.h.tmpl
@@ -23,7 +23,7 @@ class {{ agent | agent_name_to_class }}; {% endfor %} -class {{export_symbol}} {{sink_class}} final : public GarbageCollectedFinalized<{{sink_class}}> { +class {{export_symbol}} {{sink_class}} final : public GarbageCollected<{{sink_class}}> { public: enum AgentType : unsigned {
diff --git a/third_party/blink/renderer/controller/dev_tools_frontend_impl.h b/third_party/blink/renderer/controller/dev_tools_frontend_impl.h index 731f960c7..ce7c49f 100644 --- a/third_party/blink/renderer/controller/dev_tools_frontend_impl.h +++ b/third_party/blink/renderer/controller/dev_tools_frontend_impl.h
@@ -49,7 +49,7 @@ // This class lives as long as a frame (being a supplement), or until // it's host (mojom.DevToolsFrontendHost) is destroyed. class DevToolsFrontendImpl final - : public GarbageCollectedFinalized<DevToolsFrontendImpl>, + : public GarbageCollected<DevToolsFrontendImpl>, public Supplement<LocalFrame>, public mojom::blink::DevToolsFrontend, public InspectorFrontendClient {
diff --git a/third_party/blink/renderer/core/accessibility/ax_object_cache.h b/third_party/blink/renderer/core/accessibility/ax_object_cache.h index 04660530..750d20f 100644 --- a/third_party/blink/renderer/core/accessibility/ax_object_cache.h +++ b/third_party/blink/renderer/core/accessibility/ax_object_cache.h
@@ -47,9 +47,8 @@ class LineLayoutItem; class LocalFrameView; -class CORE_EXPORT AXObjectCache - : public GarbageCollectedFinalized<AXObjectCache>, - public ContextLifecycleObserver { +class CORE_EXPORT AXObjectCache : public GarbageCollected<AXObjectCache>, + public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(AXObjectCache); public:
diff --git a/third_party/blink/renderer/core/animation/animation.h b/third_party/blink/renderer/core/animation/animation.h index d56997d..e4ebcaf 100644 --- a/third_party/blink/renderer/core/animation/animation.h +++ b/third_party/blink/renderer/core/animation/animation.h
@@ -422,7 +422,7 @@ // Animation delegate; use a separate 'holder' on-heap object to accomplish // that. class CompositorAnimationHolder final - : public GarbageCollectedFinalized<CompositorAnimationHolder> { + : public GarbageCollected<CompositorAnimationHolder> { USING_PRE_FINALIZER(CompositorAnimationHolder, Dispose); public:
diff --git a/third_party/blink/renderer/core/animation/animation_effect.h b/third_party/blink/renderer/core/animation/animation_effect.h index f4e6e7dd..aa0bddc6 100644 --- a/third_party/blink/renderer/core/animation/animation_effect.h +++ b/third_party/blink/renderer/core/animation/animation_effect.h
@@ -67,7 +67,7 @@ friend class EffectStack; public: - class EventDelegate : public GarbageCollectedFinalized<EventDelegate> { + class EventDelegate : public GarbageCollected<EventDelegate> { public: virtual ~EventDelegate() = default; virtual bool RequiresIterationEvents(const AnimationEffect&) = 0;
diff --git a/third_party/blink/renderer/core/animation/animation_effect_test.cc b/third_party/blink/renderer/core/animation/animation_effect_test.cc index 9f97b2694..766edf5f 100644 --- a/third_party/blink/renderer/core/animation/animation_effect_test.cc +++ b/third_party/blink/renderer/core/animation/animation_effect_test.cc
@@ -40,7 +40,7 @@ namespace blink { class MockAnimationEffectOwner - : public GarbageCollectedFinalized<MockAnimationEffectOwner>, + : public GarbageCollected<MockAnimationEffectOwner>, public AnimationEffectOwner { USING_GARBAGE_COLLECTED_MIXIN(MockAnimationEffectOwner);
diff --git a/third_party/blink/renderer/core/animation/css/compositor_keyframe_value.h b/third_party/blink/renderer/core/animation/css/compositor_keyframe_value.h index 26bef21a..6823c15 100644 --- a/third_party/blink/renderer/core/animation/css/compositor_keyframe_value.h +++ b/third_party/blink/renderer/core/animation/css/compositor_keyframe_value.h
@@ -12,7 +12,7 @@ namespace blink { class CORE_EXPORT CompositorKeyframeValue - : public GarbageCollectedFinalized<CompositorKeyframeValue> { + : public GarbageCollected<CompositorKeyframeValue> { public: virtual ~CompositorKeyframeValue() = default;
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.h b/third_party/blink/renderer/core/animation/css/css_animations.h index ebf71a33..f64a400 100644 --- a/third_party/blink/renderer/core/animation/css/css_animations.h +++ b/third_party/blink/renderer/core/animation/css/css_animations.h
@@ -102,8 +102,7 @@ void Trace(blink::Visitor*); private: - class RunningAnimation final - : public GarbageCollectedFinalized<RunningAnimation> { + class RunningAnimation final : public GarbageCollected<RunningAnimation> { public: RunningAnimation(Animation* animation, NewCSSAnimation new_animation) : animation(animation),
diff --git a/third_party/blink/renderer/core/animation/document_timeline.h b/third_party/blink/renderer/core/animation/document_timeline.h index d14d5cb..4774bd7 100644 --- a/third_party/blink/renderer/core/animation/document_timeline.h +++ b/third_party/blink/renderer/core/animation/document_timeline.h
@@ -59,7 +59,7 @@ DEFINE_WRAPPERTYPEINFO(); public: - class PlatformTiming : public GarbageCollectedFinalized<PlatformTiming> { + class PlatformTiming : public GarbageCollected<PlatformTiming> { public: // Calls DocumentTimeline's wake() method after duration seconds. virtual void WakeAfter(base::TimeDelta duration) = 0;
diff --git a/third_party/blink/renderer/core/animation/effect_model.h b/third_party/blink/renderer/core/animation/effect_model.h index f34cb89..5b69417 100644 --- a/third_party/blink/renderer/core/animation/effect_model.h +++ b/third_party/blink/renderer/core/animation/effect_model.h
@@ -45,7 +45,7 @@ // Time independent representation of an Animation's content. // Can be sampled for the active pairs of Keyframes (represented by // Interpolations) at a given time fraction. -class CORE_EXPORT EffectModel : public GarbageCollectedFinalized<EffectModel> { +class CORE_EXPORT EffectModel : public GarbageCollected<EffectModel> { public: enum CompositeOperation { kCompositeReplace,
diff --git a/third_party/blink/renderer/core/animation/element_animations.h b/third_party/blink/renderer/core/animation/element_animations.h index 8a1fe6d..acefc4e 100644 --- a/third_party/blink/renderer/core/animation/element_animations.h +++ b/third_party/blink/renderer/core/animation/element_animations.h
@@ -47,7 +47,7 @@ using WorkletAnimationSet = HeapHashSet<WeakMember<WorkletAnimationBase>>; class CORE_EXPORT ElementAnimations final - : public GarbageCollectedFinalized<ElementAnimations> { + : public GarbageCollected<ElementAnimations> { public: ElementAnimations(); ~ElementAnimations();
diff --git a/third_party/blink/renderer/core/animation/interpolation.h b/third_party/blink/renderer/core/animation/interpolation.h index 2db04b42..32690db 100644 --- a/third_party/blink/renderer/core/animation/interpolation.h +++ b/third_party/blink/renderer/core/animation/interpolation.h
@@ -57,8 +57,7 @@ // The interpolation's effect at its current timing state is applied to the // element. How this is done depends on the subclass of Interpolation. See // the subclass documentation for more. -class CORE_EXPORT Interpolation - : public GarbageCollectedFinalized<Interpolation> { +class CORE_EXPORT Interpolation : public GarbageCollected<Interpolation> { public: virtual ~Interpolation() {}
diff --git a/third_party/blink/renderer/core/animation/interpolation_effect.h b/third_party/blink/renderer/core/animation/interpolation_effect.h index 8fd8c6d..d8e0e3a 100644 --- a/third_party/blink/renderer/core/animation/interpolation_effect.h +++ b/third_party/blink/renderer/core/animation/interpolation_effect.h
@@ -53,7 +53,7 @@ private: class InterpolationRecord final - : public GarbageCollectedFinalized<InterpolationRecord> { + : public GarbageCollected<InterpolationRecord> { public: InterpolationRecord(Interpolation* interpolation, scoped_refptr<TimingFunction> easing,
diff --git a/third_party/blink/renderer/core/animation/keyframe.h b/third_party/blink/renderer/core/animation/keyframe.h index 928ac74..9a084a56 100644 --- a/third_party/blink/renderer/core/animation/keyframe.h +++ b/third_party/blink/renderer/core/animation/keyframe.h
@@ -60,7 +60,7 @@ // from the keyframe effect. See KeyframeEffectModelBase::EnsureKeyframeGroups. // // FIXME: Make Keyframe immutable -class CORE_EXPORT Keyframe : public GarbageCollectedFinalized<Keyframe> { +class CORE_EXPORT Keyframe : public GarbageCollected<Keyframe> { public: virtual ~Keyframe() = default; @@ -118,7 +118,7 @@ // Represents a property-specific keyframe as defined in the spec. Refer to // the Keyframe class-level documentation for more details. class CORE_EXPORT PropertySpecificKeyframe - : public GarbageCollectedFinalized<PropertySpecificKeyframe> { + : public GarbageCollected<PropertySpecificKeyframe> { public: PropertySpecificKeyframe(double offset, scoped_refptr<TimingFunction> easing,
diff --git a/third_party/blink/renderer/core/animation/pending_animations.h b/third_party/blink/renderer/core/animation/pending_animations.h index 86afd946..b3fd5373 100644 --- a/third_party/blink/renderer/core/animation/pending_animations.h +++ b/third_party/blink/renderer/core/animation/pending_animations.h
@@ -59,7 +59,7 @@ // with compositor animations when both classes of CSS Animations are triggered // by the same recalc. class CORE_EXPORT PendingAnimations final - : public GarbageCollectedFinalized<PendingAnimations> { + : public GarbageCollected<PendingAnimations> { public: explicit PendingAnimations(Document& document) : timer_(document.GetTaskRunner(TaskType::kInternalDefault),
diff --git a/third_party/blink/renderer/core/animation/sampled_effect.h b/third_party/blink/renderer/core/animation/sampled_effect.h index 01aade7e..48ac6f9 100644 --- a/third_party/blink/renderer/core/animation/sampled_effect.h +++ b/third_party/blink/renderer/core/animation/sampled_effect.h
@@ -16,7 +16,7 @@ // Associates the results of sampling an EffectModel with metadata used for // effect ordering and managing composited animations. -class SampledEffect final : public GarbageCollectedFinalized<SampledEffect> { +class SampledEffect final : public GarbageCollected<SampledEffect> { public: SampledEffect(KeyframeEffect*, unsigned sequence_number);
diff --git a/third_party/blink/renderer/core/animation/worklet_animation_controller.h b/third_party/blink/renderer/core/animation/worklet_animation_controller.h index 0acfb2f..8e490133 100644 --- a/third_party/blink/renderer/core/animation/worklet_animation_controller.h +++ b/third_party/blink/renderer/core/animation/worklet_animation_controller.h
@@ -33,7 +33,7 @@ // For more details on AnimationWorklet, see the spec: // https://wicg.github.io/animation-worklet class CORE_EXPORT WorkletAnimationController - : public GarbageCollectedFinalized<WorkletAnimationController>, + : public GarbageCollected<WorkletAnimationController>, public MutatorClient { public: WorkletAnimationController(Document*);
diff --git a/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h b/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h index 518db93..e987e6b4 100644 --- a/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h +++ b/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h
@@ -26,7 +26,7 @@ // OffscreenCanvas that is connected to a Canvas, and this class signals // OffscreenCanvases when it's time to dispatch frames. class CORE_EXPORT WorkerAnimationFrameProvider - : public GarbageCollectedFinalized<WorkerAnimationFrameProvider>, + : public GarbageCollected<WorkerAnimationFrameProvider>, public BeginFrameProviderClient { public: WorkerAnimationFrameProvider(
diff --git a/third_party/blink/renderer/core/aom/computed_accessible_node.h b/third_party/blink/renderer/core/aom/computed_accessible_node.h index 5a4ab99..ef81643 100644 --- a/third_party/blink/renderer/core/aom/computed_accessible_node.h +++ b/third_party/blink/renderer/core/aom/computed_accessible_node.h
@@ -22,7 +22,7 @@ class ScriptState; class ComputedAccessibleNodePromiseResolver final - : public GarbageCollectedFinalized<ComputedAccessibleNodePromiseResolver> { + : public GarbageCollected<ComputedAccessibleNodePromiseResolver> { public: ComputedAccessibleNodePromiseResolver(ScriptState*, Element&); ~ComputedAccessibleNodePromiseResolver() {}
diff --git a/third_party/blink/renderer/core/clipboard/data_object.h b/third_party/blink/renderer/core/clipboard/data_object.h index f1fdcd3..3e666e2 100644 --- a/third_party/blink/renderer/core/clipboard/data_object.h +++ b/third_party/blink/renderer/core/clipboard/data_object.h
@@ -50,7 +50,7 @@ // A data object for holding data that would be in a clipboard or moved // during a drag-n-drop operation. This is the data that WebCore is aware // of and is not specific to a platform. -class CORE_EXPORT DataObject : public GarbageCollectedFinalized<DataObject>, +class CORE_EXPORT DataObject : public GarbageCollected<DataObject>, public Supplementable<DataObject> { USING_GARBAGE_COLLECTED_MIXIN(DataObject);
diff --git a/third_party/blink/renderer/core/clipboard/data_object_item.h b/third_party/blink/renderer/core/clipboard/data_object_item.h index a057b4833..07f9281 100644 --- a/third_party/blink/renderer/core/clipboard/data_object_item.h +++ b/third_party/blink/renderer/core/clipboard/data_object_item.h
@@ -41,7 +41,7 @@ namespace blink { class CORE_EXPORT DataObjectItem final - : public GarbageCollectedFinalized<DataObjectItem> { + : public GarbageCollected<DataObjectItem> { public: enum ItemKind { kStringKind, kFileKind };
diff --git a/third_party/blink/renderer/core/content_capture/content_capture_manager.h b/third_party/blink/renderer/core/content_capture/content_capture_manager.h index d38c5a05..9d374aa 100644 --- a/third_party/blink/renderer/core/content_capture/content_capture_manager.h +++ b/third_party/blink/renderer/core/content_capture/content_capture_manager.h
@@ -19,7 +19,7 @@ // This class is used to create the NodeHolder, and start the ContentCaptureTask // when necessary. The ContentCaptureManager is owned by main frame. class CORE_EXPORT ContentCaptureManager - : public GarbageCollectedFinalized<ContentCaptureManager> { + : public GarbageCollected<ContentCaptureManager> { public: explicit ContentCaptureManager(LocalFrame& local_frame_root); virtual ~ContentCaptureManager();
diff --git a/third_party/blink/renderer/core/content_capture/sent_nodes.h b/third_party/blink/renderer/core/content_capture/sent_nodes.h index 8ef40844..17ea8e5 100644 --- a/third_party/blink/renderer/core/content_capture/sent_nodes.h +++ b/third_party/blink/renderer/core/content_capture/sent_nodes.h
@@ -15,7 +15,7 @@ // The class manages a list of nodes that have been sent, is only used when // kNodeID is used, see WebContentCaptureClient::GetNodeType(). -class SentNodes final : public GarbageCollectedFinalized<SentNodes> { +class SentNodes final : public GarbageCollected<SentNodes> { public: bool HasSent(const Node& node); void OnSent(const Node& node);
diff --git a/third_party/blink/renderer/core/content_capture/task_session.h b/third_party/blink/renderer/core/content_capture/task_session.h index a7c2892e..80c2864c 100644 --- a/third_party/blink/renderer/core/content_capture/task_session.h +++ b/third_party/blink/renderer/core/content_capture/task_session.h
@@ -37,14 +37,13 @@ // ContentCaptureTask gets the data per document by using // GetUnsentDocumentSession() and GetNextUnsentNode(), and must send // all data out before capturing on-screen content again. -class TaskSession final : public GarbageCollectedFinalized<TaskSession> { +class TaskSession final : public GarbageCollected<TaskSession> { public: // This class manages the captured content and the detached nodes per // document, the data is moved to the ContentCaptureTask while required. This // class has an instance per document, will be released while the associated // document is GC-ed, see TaskSession::to_document_session_. - class DocumentSession final - : public GarbageCollectedFinalized<DocumentSession> { + class DocumentSession final : public GarbageCollected<DocumentSession> { public: // The callback for total_sent_nodes_ metrics. using SentNodeCountCallback = base::RepeatingCallback<void(size_t)>;
diff --git a/third_party/blink/renderer/core/context_features/context_feature_settings.h b/third_party/blink/renderer/core/context_features/context_feature_settings.h index 8ef606ea..7e4ab3a 100644 --- a/third_party/blink/renderer/core/context_features/context_feature_settings.h +++ b/third_party/blink/renderer/core/context_features/context_feature_settings.h
@@ -17,7 +17,7 @@ // pertaining to the enabled/disabled state of any platform API features which // are gated behind a ContextEnabled extended attribute in IDL. class CORE_EXPORT ContextFeatureSettings final - : public GarbageCollectedFinalized<ContextFeatureSettings>, + : public GarbageCollected<ContextFeatureSettings>, public Supplement<ExecutionContext> { USING_GARBAGE_COLLECTED_MIXIN(ContextFeatureSettings);
diff --git a/third_party/blink/renderer/core/css/css_default_style_sheets.h b/third_party/blink/renderer/core/css/css_default_style_sheets.h index 8ad6b8a..7efd4b6 100644 --- a/third_party/blink/renderer/core/css/css_default_style_sheets.h +++ b/third_party/blink/renderer/core/css/css_default_style_sheets.h
@@ -37,7 +37,7 @@ class StyleSheetContents; class CSSDefaultStyleSheets final - : public GarbageCollectedFinalized<CSSDefaultStyleSheets> { + : public GarbageCollected<CSSDefaultStyleSheets> { public: CORE_EXPORT static CSSDefaultStyleSheets& Instance();
diff --git a/third_party/blink/renderer/core/css/css_font_face.h b/third_party/blink/renderer/core/css/css_font_face.h index e76d47b..9f7f7bd 100644 --- a/third_party/blink/renderer/core/css/css_font_face.h +++ b/third_party/blink/renderer/core/css/css_font_face.h
@@ -45,9 +45,7 @@ class RemoteFontFaceSource; class SimpleFontData; -class CORE_EXPORT CSSFontFace final - : public GarbageCollectedFinalized<CSSFontFace> { - +class CORE_EXPORT CSSFontFace final : public GarbageCollected<CSSFontFace> { public: CSSFontFace(FontFace* font_face, Vector<UnicodeRange>& ranges) : ranges_(base::AdoptRef(new UnicodeRangeSet(ranges))),
diff --git a/third_party/blink/renderer/core/css/css_font_face_source.h b/third_party/blink/renderer/core/css/css_font_face_source.h index 6f93e38..7c898d8 100644 --- a/third_party/blink/renderer/core/css/css_font_face_source.h +++ b/third_party/blink/renderer/core/css/css_font_face_source.h
@@ -42,7 +42,7 @@ class SimpleFontData; class CORE_EXPORT CSSFontFaceSource - : public GarbageCollectedFinalized<CSSFontFaceSource> { + : public GarbageCollected<CSSFontFaceSource> { public: virtual ~CSSFontFaceSource();
diff --git a/third_party/blink/renderer/core/css/css_font_face_src_value.h b/third_party/blink/renderer/core/css/css_font_face_src_value.h index b2cf303..437e88d 100644 --- a/third_party/blink/renderer/core/css/css_font_face_src_value.h +++ b/third_party/blink/renderer/core/css/css_font_face_src_value.h
@@ -107,9 +107,8 @@ const ContentSecurityPolicyDisposition should_check_content_security_policy_; const OriginClean origin_clean_; - class FontResourceHelper - : public GarbageCollectedFinalized<FontResourceHelper>, - public FontResourceClient { + class FontResourceHelper : public GarbageCollected<FontResourceHelper>, + public FontResourceClient { USING_GARBAGE_COLLECTED_MIXIN(FontResourceHelper); public:
diff --git a/third_party/blink/renderer/core/css/css_font_selector.cc b/third_party/blink/renderer/core/css/css_font_selector.cc index 7f7758f..c51b5fc 100644 --- a/third_party/blink/renderer/core/css/css_font_selector.cc +++ b/third_party/blink/renderer/core/css/css_font_selector.cc
@@ -76,8 +76,11 @@ HeapVector<Member<FontSelectorClient>> clients; CopyToVector(clients_, clients); - for (auto& client : clients) - client->FontsNeedUpdate(this); + for (auto& client : clients) { + if (client) { + client->FontsNeedUpdate(this); + } + } } void CSSFontSelector::FontFaceInvalidated() {
diff --git a/third_party/blink/renderer/core/css/css_global_rule_set.h b/third_party/blink/renderer/core/css/css_global_rule_set.h index 2e6bf7b..c45dc40 100644 --- a/third_party/blink/renderer/core/css/css_global_rule_set.h +++ b/third_party/blink/renderer/core/css/css_global_rule_set.h
@@ -22,8 +22,7 @@ // possible to the ScopedStyleResolver as possible to avoid full reconstruction // of these rulesets on shadow tree changes. See https://crbug.com/401359 -class CSSGlobalRuleSet final - : public GarbageCollectedFinalized<CSSGlobalRuleSet> { +class CSSGlobalRuleSet final : public GarbageCollected<CSSGlobalRuleSet> { public: CSSGlobalRuleSet() = default;
diff --git a/third_party/blink/renderer/core/css/css_paint_image_generator.h b/third_party/blink/renderer/core/css/css_paint_image_generator.h index 6dadca5..e3449d7b 100644 --- a/third_party/blink/renderer/core/css/css_paint_image_generator.h +++ b/third_party/blink/renderer/core/css/css_paint_image_generator.h
@@ -21,13 +21,13 @@ // Produces a PaintGeneratedImage from a CSS Paint API callback. // https://drafts.css-houdini.org/css-paint-api/ class CORE_EXPORT CSSPaintImageGenerator - : public GarbageCollectedFinalized<CSSPaintImageGenerator> { + : public GarbageCollected<CSSPaintImageGenerator> { public: // This observer is used if the paint worklet doesn't have a javascript // class registered with the correct name yet. // paintImageGeneratorReady is called when the javascript class is // registered and ready to use. - class Observer : public GarbageCollectedFinalized<Observer> { + class Observer : public GarbageCollected<Observer> { public: virtual ~Observer() = default;
diff --git a/third_party/blink/renderer/core/css/css_property_source_data.h b/third_party/blink/renderer/core/css/css_property_source_data.h index 1e087063..f7dac05 100644 --- a/third_party/blink/renderer/core/css/css_property_source_data.h +++ b/third_party/blink/renderer/core/css/css_property_source_data.h
@@ -83,8 +83,7 @@ namespace blink { -class CSSRuleSourceData final - : public GarbageCollectedFinalized<CSSRuleSourceData> { +class CSSRuleSourceData final : public GarbageCollected<CSSRuleSourceData> { public: explicit CSSRuleSourceData(StyleRule::RuleType type) : type(type) {} void Trace(blink::Visitor* visitor) { visitor->Trace(child_rules); }
diff --git a/third_party/blink/renderer/core/css/css_property_value_set.cc b/third_party/blink/renderer/core/css/css_property_value_set.cc index 4cc574c..2b5940e 100644 --- a/third_party/blink/renderer/core/css/css_property_value_set.cc +++ b/third_party/blink/renderer/core/css/css_property_value_set.cc
@@ -653,7 +653,7 @@ // See the function above if you need to update this. struct SameSizeAsCSSPropertyValueSet final - : public GarbageCollectedFinalized<SameSizeAsCSSPropertyValueSet> { + : public GarbageCollected<SameSizeAsCSSPropertyValueSet> { unsigned bitfield; }; static_assert(sizeof(CSSPropertyValueSet) ==
diff --git a/third_party/blink/renderer/core/css/css_property_value_set.h b/third_party/blink/renderer/core/css/css_property_value_set.h index 7ac228e89e..a16b05b 100644 --- a/third_party/blink/renderer/core/css/css_property_value_set.h +++ b/third_party/blink/renderer/core/css/css_property_value_set.h
@@ -44,7 +44,7 @@ enum class SecureContextMode; class CORE_EXPORT CSSPropertyValueSet - : public GarbageCollectedFinalized<CSSPropertyValueSet> { + : public GarbageCollected<CSSPropertyValueSet> { friend class PropertyReference; public: @@ -166,8 +166,7 @@ }; // Used for lazily parsing properties. -class CSSLazyPropertyParser - : public GarbageCollectedFinalized<CSSLazyPropertyParser> { +class CSSLazyPropertyParser : public GarbageCollected<CSSLazyPropertyParser> { public: CSSLazyPropertyParser() = default; virtual ~CSSLazyPropertyParser() = default;
diff --git a/third_party/blink/renderer/core/css/css_rule.cc b/third_party/blink/renderer/core/css/css_rule.cc index ccbe58b..15d3d4da 100644 --- a/third_party/blink/renderer/core/css/css_rule.cc +++ b/third_party/blink/renderer/core/css/css_rule.cc
@@ -27,7 +27,7 @@ namespace blink { -struct SameSizeAsCSSRule : public GarbageCollectedFinalized<SameSizeAsCSSRule>, +struct SameSizeAsCSSRule : public GarbageCollected<SameSizeAsCSSRule>, public ScriptWrappable { ~SameSizeAsCSSRule() override; unsigned char bitfields;
diff --git a/third_party/blink/renderer/core/css/css_segmented_font_face.h b/third_party/blink/renderer/core/css/css_segmented_font_face.h index 4326210..fad468a9 100644 --- a/third_party/blink/renderer/core/css/css_segmented_font_face.h +++ b/third_party/blink/renderer/core/css/css_segmented_font_face.h
@@ -43,7 +43,7 @@ class SegmentedFontData; class CSSSegmentedFontFace final - : public GarbageCollectedFinalized<CSSSegmentedFontFace> { + : public GarbageCollected<CSSSegmentedFontFace> { public: CSSSegmentedFontFace(FontSelectionCapabilities); ~CSSSegmentedFontFace();
diff --git a/third_party/blink/renderer/core/css/css_selector_watch.h b/third_party/blink/renderer/core/css/css_selector_watch.h index 7791ba78f..16df789b 100644 --- a/third_party/blink/renderer/core/css/css_selector_watch.h +++ b/third_party/blink/renderer/core/css/css_selector_watch.h
@@ -43,7 +43,7 @@ namespace blink { class CORE_EXPORT CSSSelectorWatch final - : public GarbageCollectedFinalized<CSSSelectorWatch>, + : public GarbageCollected<CSSSelectorWatch>, public Supplement<Document> { USING_GARBAGE_COLLECTED_MIXIN(CSSSelectorWatch);
diff --git a/third_party/blink/renderer/core/css/css_value.cc b/third_party/blink/renderer/core/css/css_value.cc index 5b546d21..604562a5 100644 --- a/third_party/blink/renderer/core/css/css_value.cc +++ b/third_party/blink/renderer/core/css/css_value.cc
@@ -82,8 +82,7 @@ using namespace cssvalue; -struct SameSizeAsCSSValue final - : public GarbageCollectedFinalized<SameSizeAsCSSValue> { +struct SameSizeAsCSSValue final : public GarbageCollected<SameSizeAsCSSValue> { uint32_t bitfields; }; ASSERT_SIZE(CSSValue, SameSizeAsCSSValue);
diff --git a/third_party/blink/renderer/core/css/css_value.h b/third_party/blink/renderer/core/css/css_value.h index debf1fba..8b24591 100644 --- a/third_party/blink/renderer/core/css/css_value.h +++ b/third_party/blink/renderer/core/css/css_value.h
@@ -31,7 +31,7 @@ class Document; class Length; -class CORE_EXPORT CSSValue : public GarbageCollectedFinalized<CSSValue> { +class CORE_EXPORT CSSValue : public GarbageCollected<CSSValue> { public: static void* AllocateObject(size_t size) { ThreadState* state =
diff --git a/third_party/blink/renderer/core/css/css_value_pool.h b/third_party/blink/renderer/core/css/css_value_pool.h index b24ea1c..10d55b77 100644 --- a/third_party/blink/renderer/core/css/css_value_pool.h +++ b/third_party/blink/renderer/core/css/css_value_pool.h
@@ -48,8 +48,7 @@ namespace blink { -class CORE_EXPORT CSSValuePool final - : public GarbageCollectedFinalized<CSSValuePool> { +class CORE_EXPORT CSSValuePool final : public GarbageCollected<CSSValuePool> { public: using PassKey = util::PassKey<CSSValuePool>;
diff --git a/third_party/blink/renderer/core/css/font_face_set.h b/third_party/blink/renderer/core/css/font_face_set.h index 6235034..f71d240 100644 --- a/third_party/blink/renderer/core/css/font_face_set.h +++ b/third_party/blink/renderer/core/css/font_face_set.h
@@ -126,7 +126,7 @@ }; class LoadFontPromiseResolver final - : public GarbageCollectedFinalized<LoadFontPromiseResolver>, + : public GarbageCollected<LoadFontPromiseResolver>, public FontFace::LoadFontCallback { USING_GARBAGE_COLLECTED_MIXIN(LoadFontPromiseResolver);
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.h b/third_party/blink/renderer/core/css/media_query_evaluator.h index d9888d97..570e0ff0 100644 --- a/third_party/blink/renderer/core/css/media_query_evaluator.h +++ b/third_party/blink/renderer/core/css/media_query_evaluator.h
@@ -56,8 +56,7 @@ // loading of stylesheets to only those which are probable to match. class CORE_EXPORT MediaQueryEvaluator final - : public GarbageCollectedFinalized<MediaQueryEvaluator> { - + : public GarbageCollected<MediaQueryEvaluator> { public: static void Init();
diff --git a/third_party/blink/renderer/core/css/media_query_matcher.h b/third_party/blink/renderer/core/css/media_query_matcher.h index 6a2b90f..8181197 100644 --- a/third_party/blink/renderer/core/css/media_query_matcher.h +++ b/third_party/blink/renderer/core/css/media_query_matcher.h
@@ -40,8 +40,7 @@ // which they have been added. class CORE_EXPORT MediaQueryMatcher final - : public GarbageCollectedFinalized<MediaQueryMatcher> { - + : public GarbageCollected<MediaQueryMatcher> { public: static MediaQueryMatcher* Create(Document&);
diff --git a/third_party/blink/renderer/core/css/media_values.h b/third_party/blink/renderer/core/css/media_values.h index 445c19b..9ec41d4 100644 --- a/third_party/blink/renderer/core/css/media_values.h +++ b/third_party/blink/renderer/core/css/media_values.h
@@ -21,7 +21,7 @@ enum class PreferredColorScheme; enum class ForcedColors; -class CORE_EXPORT MediaValues : public GarbageCollectedFinalized<MediaValues> { +class CORE_EXPORT MediaValues : public GarbageCollected<MediaValues> { public: virtual ~MediaValues() = default; virtual void Trace(blink::Visitor* visitor) {}
diff --git a/third_party/blink/renderer/core/css/parser/css_lazy_parsing_state.h b/third_party/blink/renderer/core/css/parser/css_lazy_parsing_state.h index 77ecf76..19f486b 100644 --- a/third_party/blink/renderer/core/css/parser/css_lazy_parsing_state.h +++ b/third_party/blink/renderer/core/css/parser/css_lazy_parsing_state.h
@@ -21,8 +21,7 @@ // Currently, the only strong references to this class are from individual lazy // properties, so after an entire lazy sheet is parsed, the extra memory should // be released. -class CSSLazyParsingState final - : public GarbageCollectedFinalized<CSSLazyParsingState> { +class CSSLazyParsingState final : public GarbageCollected<CSSLazyParsingState> { public: CSSLazyParsingState(const CSSParserContext*, const String& sheet_text,
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_context.h b/third_party/blink/renderer/core/css/parser/css_parser_context.h index 82ccd8f7..824421e6 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_context.h +++ b/third_party/blink/renderer/core/css/parser/css_parser_context.h
@@ -24,7 +24,7 @@ class StyleSheetContents; class CORE_EXPORT CSSParserContext final - : public GarbageCollectedFinalized<CSSParserContext> { + : public GarbageCollected<CSSParserContext> { public: // https://drafts.csswg.org/selectors/#profiles enum SelectorProfile : uint8_t { kLiveProfile, kSnapshotProfile };
diff --git a/third_party/blink/renderer/core/css/property_registration.h b/third_party/blink/renderer/core/css/property_registration.h index 55f4504..4562c64 100644 --- a/third_party/blink/renderer/core/css/property_registration.h +++ b/third_party/blink/renderer/core/css/property_registration.h
@@ -24,7 +24,7 @@ using CSSInterpolationTypes = Vector<std::unique_ptr<CSSInterpolationType>>; class CORE_EXPORT PropertyRegistration final - : public GarbageCollectedFinalized<PropertyRegistration> { + : public GarbageCollected<PropertyRegistration> { public: static PropertyRegistration* MaybeCreate(Document&, const AtomicString& name,
diff --git a/third_party/blink/renderer/core/css/resolver/matched_properties_cache.h b/third_party/blink/renderer/core/css/resolver/matched_properties_cache.h index 2ee3699..a4bff51 100644 --- a/third_party/blink/renderer/core/css/resolver/matched_properties_cache.h +++ b/third_party/blink/renderer/core/css/resolver/matched_properties_cache.h
@@ -37,7 +37,7 @@ class StyleResolverState; class CachedMatchedProperties final - : public GarbageCollectedFinalized<CachedMatchedProperties> { + : public GarbageCollected<CachedMatchedProperties> { public: HeapVector<MatchedProperties> matched_properties; scoped_refptr<ComputedStyle> computed_style;
diff --git a/third_party/blink/renderer/core/css/resolver/scoped_style_resolver.h b/third_party/blink/renderer/core/css/resolver/scoped_style_resolver.h index 2171a41..51ed87c 100644 --- a/third_party/blink/renderer/core/css/resolver/scoped_style_resolver.h +++ b/third_party/blink/renderer/core/css/resolver/scoped_style_resolver.h
@@ -48,7 +48,7 @@ // broken down by what kind of scope they apply to (e.g. shadow host, // tree-boundary-crossing, etc). class CORE_EXPORT ScopedStyleResolver final - : public GarbageCollectedFinalized<ScopedStyleResolver> { + : public GarbageCollected<ScopedStyleResolver> { public: explicit ScopedStyleResolver(TreeScope& scope) : scope_(scope) {}
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.h b/third_party/blink/renderer/core/css/resolver/style_resolver.h index b0bde90..452b8a7 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.h +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.h
@@ -60,9 +60,7 @@ // This class selects a ComputedStyle for a given element in a document based on // the document's collection of stylesheets (user styles, author styles, UA // style). There is a 1-1 relationship of StyleResolver and Document. -class CORE_EXPORT StyleResolver final - : public GarbageCollectedFinalized<StyleResolver> { - +class CORE_EXPORT StyleResolver final : public GarbageCollected<StyleResolver> { public: explicit StyleResolver(Document&); ~StyleResolver();
diff --git a/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.h b/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.h index 3f976db..f4c771b1 100644 --- a/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.h +++ b/third_party/blink/renderer/core/css/resolver/viewport_style_resolver.h
@@ -45,7 +45,7 @@ class StyleRuleViewport; class CORE_EXPORT ViewportStyleResolver final - : public GarbageCollectedFinalized<ViewportStyleResolver> { + : public GarbageCollected<ViewportStyleResolver> { public: explicit ViewportStyleResolver(Document&);
diff --git a/third_party/blink/renderer/core/css/rule_set.h b/third_party/blink/renderer/core/css/rule_set.h index 0ea9ef2..946a5f8 100644 --- a/third_party/blink/renderer/core/css/rule_set.h +++ b/third_party/blink/renderer/core/css/rule_set.h
@@ -175,7 +175,7 @@ // specific group are appended to the "universal" rules. The grouping is done to // optimize finding what rules apply to an element under consideration by // ElementRuleCollector::CollectMatchingRules. -class CORE_EXPORT RuleSet final : public GarbageCollectedFinalized<RuleSet> { +class CORE_EXPORT RuleSet final : public GarbageCollected<RuleSet> { public: RuleSet() : rule_count_(0) {}
diff --git a/third_party/blink/renderer/core/css/style_engine.h b/third_party/blink/renderer/core/css/style_engine.h index ba452844..4847b73 100644 --- a/third_party/blink/renderer/core/css/style_engine.h +++ b/third_party/blink/renderer/core/css/style_engine.h
@@ -81,10 +81,9 @@ // The StyleEngine class manages style-related state for the document. There is // a 1-1 relationship of Document to StyleEngine. The document calls the // StyleEngine when the the document is updated in a way that impacts styles. -class CORE_EXPORT StyleEngine final - : public GarbageCollectedFinalized<StyleEngine>, - public FontSelectorClient, - public NameClient { +class CORE_EXPORT StyleEngine final : public GarbageCollected<StyleEngine>, + public FontSelectorClient, + public NameClient { USING_GARBAGE_COLLECTED_MIXIN(StyleEngine); public:
diff --git a/third_party/blink/renderer/core/css/style_rule.cc b/third_party/blink/renderer/core/css/style_rule.cc index e5f576a..5a33d11 100644 --- a/third_party/blink/renderer/core/css/style_rule.cc +++ b/third_party/blink/renderer/core/css/style_rule.cc
@@ -41,7 +41,7 @@ namespace blink { struct SameSizeAsStyleRuleBase final - : public GarbageCollectedFinalized<SameSizeAsStyleRuleBase> { + : public GarbageCollected<SameSizeAsStyleRuleBase> { unsigned bitfields; };
diff --git a/third_party/blink/renderer/core/css/style_rule.h b/third_party/blink/renderer/core/css/style_rule.h index d465b10..53ef0a15 100644 --- a/third_party/blink/renderer/core/css/style_rule.h +++ b/third_party/blink/renderer/core/css/style_rule.h
@@ -37,8 +37,7 @@ class CSSStyleSheet; class CSSValueList; -class CORE_EXPORT StyleRuleBase - : public GarbageCollectedFinalized<StyleRuleBase> { +class CORE_EXPORT StyleRuleBase : public GarbageCollected<StyleRuleBase> { public: enum RuleType { kCharset,
diff --git a/third_party/blink/renderer/core/css/style_rule_import.h b/third_party/blink/renderer/core/css/style_rule_import.h index cdfd0ef7..3d9d022 100644 --- a/third_party/blink/renderer/core/css/style_rule_import.h +++ b/third_party/blink/renderer/core/css/style_rule_import.h
@@ -65,7 +65,7 @@ // NOTE: We put the ResourceClient in a member instead of inheriting // from it to avoid adding a vptr to StyleRuleImport. class ImportedStyleSheetClient final - : public GarbageCollectedFinalized<ImportedStyleSheetClient>, + : public GarbageCollected<ImportedStyleSheetClient>, public ResourceClient { USING_GARBAGE_COLLECTED_MIXIN(ImportedStyleSheetClient);
diff --git a/third_party/blink/renderer/core/css/style_sheet_collection.h b/third_party/blink/renderer/core/css/style_sheet_collection.h index efdf51c..57951be3 100644 --- a/third_party/blink/renderer/core/css/style_sheet_collection.h +++ b/third_party/blink/renderer/core/css/style_sheet_collection.h
@@ -43,7 +43,7 @@ class StyleSheet; class CORE_EXPORT StyleSheetCollection - : public GarbageCollectedFinalized<StyleSheetCollection>, + : public GarbageCollected<StyleSheetCollection>, public NameClient { public: friend class ActiveDocumentStyleSheetCollector;
diff --git a/third_party/blink/renderer/core/css/style_sheet_contents.h b/third_party/blink/renderer/core/css/style_sheet_contents.h index bad98c2c..c92b55bd 100644 --- a/third_party/blink/renderer/core/css/style_sheet_contents.h +++ b/third_party/blink/renderer/core/css/style_sheet_contents.h
@@ -48,7 +48,7 @@ enum class ParseSheetResult; class CORE_EXPORT StyleSheetContents final - : public GarbageCollectedFinalized<StyleSheetContents> { + : public GarbageCollected<StyleSheetContents> { public: static const Document* SingleOwnerDocument(const StyleSheetContents*);
diff --git a/third_party/blink/renderer/core/dom/context_features.h b/third_party/blink/renderer/core/dom/context_features.h index 788c789..b7312f6 100644 --- a/third_party/blink/renderer/core/dom/context_features.h +++ b/third_party/blink/renderer/core/dom/context_features.h
@@ -38,7 +38,7 @@ class Document; class Page; -class ContextFeatures final : public GarbageCollectedFinalized<ContextFeatures>, +class ContextFeatures final : public GarbageCollected<ContextFeatures>, public Supplement<Page> { USING_GARBAGE_COLLECTED_MIXIN(ContextFeatures);
diff --git a/third_party/blink/renderer/core/dom/context_features_client_impl.cc b/third_party/blink/renderer/core/dom/context_features_client_impl.cc index a4d9bb3c..390c594 100644 --- a/third_party/blink/renderer/core/dom/context_features_client_impl.cc +++ b/third_party/blink/renderer/core/dom/context_features_client_impl.cc
@@ -39,7 +39,7 @@ namespace blink { class ContextFeaturesCache final - : public GarbageCollectedFinalized<ContextFeaturesCache>, + : public GarbageCollected<ContextFeaturesCache>, public Supplement<Document> { USING_GARBAGE_COLLECTED_MIXIN(ContextFeaturesCache);
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 80b4ef4..170a0ec3 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -572,7 +572,7 @@ static bool g_threaded_parsing_enabled_for_testing = true; class Document::NetworkStateObserver final - : public GarbageCollectedFinalized<Document::NetworkStateObserver>, + : public GarbageCollected<Document::NetworkStateObserver>, public NetworkStateNotifier::NetworkStateObserver, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(Document::NetworkStateObserver);
diff --git a/third_party/blink/renderer/core/dom/document_parser.h b/third_party/blink/renderer/core/dom/document_parser.h index 16860fd..fffbc14c 100644 --- a/third_party/blink/renderer/core/dom/document_parser.h +++ b/third_party/blink/renderer/core/dom/document_parser.h
@@ -37,9 +37,8 @@ class ScriptableDocumentParser; class TextResourceDecoder; -class CORE_EXPORT DocumentParser - : public GarbageCollectedFinalized<DocumentParser>, - public NameClient { +class CORE_EXPORT DocumentParser : public GarbageCollected<DocumentParser>, + public NameClient { public: virtual ~DocumentParser(); virtual void Trace(Visitor*);
diff --git a/third_party/blink/renderer/core/dom/document_parser_timing.h b/third_party/blink/renderer/core/dom/document_parser_timing.h index 323029be..96484ae 100644 --- a/third_party/blink/renderer/core/dom/document_parser_timing.h +++ b/third_party/blink/renderer/core/dom/document_parser_timing.h
@@ -15,7 +15,7 @@ // DocumentParserTiming is responsible for tracking parser-related timings for a // given document. class DocumentParserTiming final - : public GarbageCollectedFinalized<DocumentParserTiming>, + : public GarbageCollected<DocumentParserTiming>, public Supplement<Document> { USING_GARBAGE_COLLECTED_MIXIN(DocumentParserTiming);
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc index d71b363..e89130f 100644 --- a/third_party/blink/renderer/core/dom/document_test.cc +++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -92,7 +92,7 @@ namespace { class TestSynchronousMutationObserver - : public GarbageCollectedFinalized<TestSynchronousMutationObserver>, + : public GarbageCollected<TestSynchronousMutationObserver>, public SynchronousMutationObserver { USING_GARBAGE_COLLECTED_MIXIN(TestSynchronousMutationObserver); @@ -262,7 +262,7 @@ } class TestDocumentShutdownObserver - : public GarbageCollectedFinalized<TestDocumentShutdownObserver>, + : public GarbageCollected<TestDocumentShutdownObserver>, public DocumentShutdownObserver { USING_GARBAGE_COLLECTED_MIXIN(TestDocumentShutdownObserver); @@ -298,7 +298,7 @@ } class MockDocumentValidationMessageClient - : public GarbageCollectedFinalized<MockDocumentValidationMessageClient>, + : public GarbageCollected<MockDocumentValidationMessageClient>, public ValidationMessageClient { USING_GARBAGE_COLLECTED_MIXIN(MockDocumentValidationMessageClient);
diff --git a/third_party/blink/renderer/core/dom/element_data.cc b/third_party/blink/renderer/core/dom/element_data.cc index 4317ce0..890989e 100644 --- a/third_party/blink/renderer/core/dom/element_data.cc +++ b/third_party/blink/renderer/core/dom/element_data.cc
@@ -37,7 +37,7 @@ namespace blink { struct SameSizeAsElementData final - : public GarbageCollectedFinalized<SameSizeAsElementData> { + : public GarbageCollected<SameSizeAsElementData> { unsigned bitfield; Member<void*> willbe_member; void* pointers[2];
diff --git a/third_party/blink/renderer/core/dom/element_data.h b/third_party/blink/renderer/core/dom/element_data.h index 72aacbc..a3b8779 100644 --- a/third_party/blink/renderer/core/dom/element_data.h +++ b/third_party/blink/renderer/core/dom/element_data.h
@@ -48,9 +48,9 @@ // ElementData represents very common, but not necessarily unique to an element, // data such as attributes, inline style, and parsed class names and ids. -class ElementData : public GarbageCollectedFinalized<ElementData> { +class ElementData : public GarbageCollected<ElementData> { public: - // Override GarbageCollectedFinalized's finalizeGarbageCollectedObject to + // Override GarbageCollected's finalizeGarbageCollectedObject to // dispatch to the correct subclass destructor. void FinalizeGarbageCollectedObject();
diff --git a/third_party/blink/renderer/core/dom/events/event_listener.h b/third_party/blink/renderer/core/dom/events/event_listener.h index 0787c6f..9faaae7 100644 --- a/third_party/blink/renderer/core/dom/events/event_listener.h +++ b/third_party/blink/renderer/core/dom/events/event_listener.h
@@ -44,9 +44,8 @@ // - once // - removed // EventListener represents 'callback' part. -class CORE_EXPORT EventListener - : public GarbageCollectedFinalized<EventListener>, - public NameClient { +class CORE_EXPORT EventListener : public GarbageCollected<EventListener>, + public NameClient { public: virtual ~EventListener() = default;
diff --git a/third_party/blink/renderer/core/dom/events/event_path.h b/third_party/blink/renderer/core/dom/events/event_path.h index 07102f25..b2e6efc 100644 --- a/third_party/blink/renderer/core/dom/events/event_path.h +++ b/third_party/blink/renderer/core/dom/events/event_path.h
@@ -43,8 +43,7 @@ class TreeScope; class WindowEventContext; -class CORE_EXPORT EventPath final - : public GarbageCollectedFinalized<EventPath> { +class CORE_EXPORT EventPath final : public GarbageCollected<EventPath> { public: explicit EventPath(Node&, Event* = nullptr);
diff --git a/third_party/blink/renderer/core/dom/events/event_queue.h b/third_party/blink/renderer/core/dom/events/event_queue.h index 7d9e69a..c0d1267 100644 --- a/third_party/blink/renderer/core/dom/events/event_queue.h +++ b/third_party/blink/renderer/core/dom/events/event_queue.h
@@ -36,9 +36,8 @@ class Event; class ExecutionContext; -class CORE_EXPORT EventQueue final - : public GarbageCollectedFinalized<EventQueue>, - public ContextLifecycleObserver { +class CORE_EXPORT EventQueue final : public GarbageCollected<EventQueue>, + public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(EventQueue); public:
diff --git a/third_party/blink/renderer/core/dom/events/event_target.h b/third_party/blink/renderer/core/dom/events/event_target.h index ca8bd99..d60e5ddd 100644 --- a/third_party/blink/renderer/core/dom/events/event_target.h +++ b/third_party/blink/renderer/core/dom/events/event_target.h
@@ -77,7 +77,7 @@ using FiringEventIteratorVector = Vector<FiringEventIterator, 1>; class CORE_EXPORT EventTargetData final - : public GarbageCollectedFinalized<EventTargetData> { + : public GarbageCollected<EventTargetData> { public: EventTargetData(); ~EventTargetData();
diff --git a/third_party/blink/renderer/core/dom/frame_request_callback_collection.h b/third_party/blink/renderer/core/dom/frame_request_callback_collection.h index daf9d35..74a2fc3 100644 --- a/third_party/blink/renderer/core/dom/frame_request_callback_collection.h +++ b/third_party/blink/renderer/core/dom/frame_request_callback_collection.h
@@ -27,9 +27,8 @@ // |FrameCallback| is an interface type which generalizes callbacks which are // invoked when a script-based animation needs to be resampled. - class CORE_EXPORT FrameCallback - : public GarbageCollectedFinalized<FrameCallback>, - public NameClient { + class CORE_EXPORT FrameCallback : public GarbageCollected<FrameCallback>, + public NameClient { public: virtual void Trace(Visitor* visitor) {} const char* NameInHeapSnapshot() const override { return "FrameCallback"; }
diff --git a/third_party/blink/renderer/core/dom/id_target_observer.h b/third_party/blink/renderer/core/dom/id_target_observer.h index 13bce1c..e240e1ad6 100644 --- a/third_party/blink/renderer/core/dom/id_target_observer.h +++ b/third_party/blink/renderer/core/dom/id_target_observer.h
@@ -33,7 +33,7 @@ class IdTargetObserverRegistry; -class IdTargetObserver : public GarbageCollectedFinalized<IdTargetObserver> { +class IdTargetObserver : public GarbageCollected<IdTargetObserver> { public: virtual ~IdTargetObserver(); virtual void Trace(Visitor*);
diff --git a/third_party/blink/renderer/core/dom/live_node_list_registry_test.cc b/third_party/blink/renderer/core/dom/live_node_list_registry_test.cc index 9e79ebc..70a22ee 100644 --- a/third_party/blink/renderer/core/dom/live_node_list_registry_test.cc +++ b/third_party/blink/renderer/core/dom/live_node_list_registry_test.cc
@@ -101,7 +101,7 @@ // claims that there are no GC pointers on the stack. For this to be valid, the // tracker itself must live on the heap, not on the stack. struct LiveNodeListRegistryWrapper final - : public GarbageCollectedFinalized<LiveNodeListRegistryWrapper> { + : public GarbageCollected<LiveNodeListRegistryWrapper> { LiveNodeListRegistry registry; void Trace(Visitor* visitor) { visitor->Trace(registry); } };
diff --git a/third_party/blink/renderer/core/dom/mutation_observer.h b/third_party/blink/renderer/core/dom/mutation_observer.h index 48a0ac5..02dc9dd 100644 --- a/third_party/blink/renderer/core/dom/mutation_observer.h +++ b/third_party/blink/renderer/core/dom/mutation_observer.h
@@ -77,7 +77,7 @@ kCharacterDataOldValue = 1 << 6, }; - class CORE_EXPORT Delegate : public GarbageCollectedFinalized<Delegate>, + class CORE_EXPORT Delegate : public GarbageCollected<Delegate>, public NameClient { public: virtual ~Delegate() = default;
diff --git a/third_party/blink/renderer/core/dom/mutation_observer_notifier.h b/third_party/blink/renderer/core/dom/mutation_observer_notifier.h index 8591175..497245e 100644 --- a/third_party/blink/renderer/core/dom/mutation_observer_notifier.h +++ b/third_party/blink/renderer/core/dom/mutation_observer_notifier.h
@@ -16,7 +16,7 @@ // In charge of mutation observer related state that should be managed per // WindowAgent. class MutationObserverNotifier final - : public GarbageCollectedFinalized<MutationObserverNotifier> { + : public GarbageCollected<MutationObserverNotifier> { public: MutationObserverNotifier();
diff --git a/third_party/blink/renderer/core/dom/mutation_observer_registration.h b/third_party/blink/renderer/core/dom/mutation_observer_registration.h index a535ac48..baec26ba 100644 --- a/third_party/blink/renderer/core/dom/mutation_observer_registration.h +++ b/third_party/blink/renderer/core/dom/mutation_observer_registration.h
@@ -44,7 +44,7 @@ class QualifiedName; class CORE_EXPORT MutationObserverRegistration final - : public GarbageCollectedFinalized<MutationObserverRegistration>, + : public GarbageCollected<MutationObserverRegistration>, public NameClient { public: static MutationObserverRegistration* Create(
diff --git a/third_party/blink/renderer/core/dom/node_rare_data.h b/third_party/blink/renderer/core/dom/node_rare_data.h index 2d22fa4a..6daa78a 100644 --- a/third_party/blink/renderer/core/dom/node_rare_data.h +++ b/third_party/blink/renderer/core/dom/node_rare_data.h
@@ -111,7 +111,7 @@ NodeRenderingData* node_layout_data_; }; -class NodeRareData : public GarbageCollectedFinalized<NodeRareData>, +class NodeRareData : public GarbageCollected<NodeRareData>, public NodeRareDataBase { public: explicit NodeRareData(NodeRenderingData* node_layout_data)
diff --git a/third_party/blink/renderer/core/dom/presentation_attribute_style.cc b/third_party/blink/renderer/core/dom/presentation_attribute_style.cc index 0d77d76..8a8ea30 100644 --- a/third_party/blink/renderer/core/dom/presentation_attribute_style.cc +++ b/third_party/blink/renderer/core/dom/presentation_attribute_style.cc
@@ -62,7 +62,7 @@ } struct PresentationAttributeCacheEntry final - : public GarbageCollectedFinalized<PresentationAttributeCacheEntry> { + : public GarbageCollected<PresentationAttributeCacheEntry> { public: void Trace(Visitor* visitor) { visitor->Trace(value); }
diff --git a/third_party/blink/renderer/core/dom/scripted_animation_controller.h b/third_party/blink/renderer/core/dom/scripted_animation_controller.h index 073226a..430fe01 100644 --- a/third_party/blink/renderer/core/dom/scripted_animation_controller.h +++ b/third_party/blink/renderer/core/dom/scripted_animation_controller.h
@@ -42,7 +42,7 @@ class MediaQueryListListener; class CORE_EXPORT ScriptedAnimationController - : public GarbageCollectedFinalized<ScriptedAnimationController>, + : public GarbageCollected<ScriptedAnimationController>, public NameClient { public: explicit ScriptedAnimationController(Document*);
diff --git a/third_party/blink/renderer/core/dom/scripted_idle_task_controller.h b/third_party/blink/renderer/core/dom/scripted_idle_task_controller.h index 65edd75..6bcc6b1 100644 --- a/third_party/blink/renderer/core/dom/scripted_idle_task_controller.h +++ b/third_party/blink/renderer/core/dom/scripted_idle_task_controller.h
@@ -24,7 +24,7 @@ class ThreadScheduler; class CORE_EXPORT ScriptedIdleTaskController - : public GarbageCollectedFinalized<ScriptedIdleTaskController>, + : public GarbageCollected<ScriptedIdleTaskController>, public ContextLifecycleStateObserver, public NameClient { USING_GARBAGE_COLLECTED_MIXIN(ScriptedIdleTaskController); @@ -49,8 +49,7 @@ // |IdleTask| is an interface type which generalizes tasks which are invoked // on idle. The tasks need to define what to do on idle in |invoke|. - class IdleTask : public GarbageCollectedFinalized<IdleTask>, - public NameClient { + class IdleTask : public GarbageCollected<IdleTask>, public NameClient { public: virtual void Trace(Visitor* visitor) {} const char* NameInHeapSnapshot() const override { return "IdleTask"; } @@ -92,7 +91,7 @@ IdleDeadline::CallbackType); private: - class QueuedIdleTask : public GarbageCollectedFinalized<QueuedIdleTask> { + class QueuedIdleTask : public GarbageCollected<QueuedIdleTask> { public: QueuedIdleTask(IdleTask*, base::TimeTicks queue_timestamp,
diff --git a/third_party/blink/renderer/core/dom/shadow_root_v0.h b/third_party/blink/renderer/core/dom/shadow_root_v0.h index 47df34f..a8d93d3 100644 --- a/third_party/blink/renderer/core/dom/shadow_root_v0.h +++ b/third_party/blink/renderer/core/dom/shadow_root_v0.h
@@ -37,8 +37,7 @@ namespace blink { -class CORE_EXPORT ShadowRootV0 final - : public GarbageCollectedFinalized<ShadowRootV0> { +class CORE_EXPORT ShadowRootV0 final : public GarbageCollected<ShadowRootV0> { public: using NodeToDestinationInsertionPoints = HeapHashMap<Member<const Node>, Member<DestinationInsertionPoints>>;
diff --git a/third_party/blink/renderer/core/dom/visited_link_state.h b/third_party/blink/renderer/core/dom/visited_link_state.h index 27a3d7d..1f5f3310 100644 --- a/third_party/blink/renderer/core/dom/visited_link_state.h +++ b/third_party/blink/renderer/core/dom/visited_link_state.h
@@ -40,8 +40,7 @@ class Document; -class VisitedLinkState final - : public GarbageCollectedFinalized<VisitedLinkState> { +class VisitedLinkState final : public GarbageCollected<VisitedLinkState> { public: explicit VisitedLinkState(const Document&);
diff --git a/third_party/blink/renderer/core/dom/weak_identifier_map_test.cc b/third_party/blink/renderer/core/dom/weak_identifier_map_test.cc index 6d712d0..46c8725a 100644 --- a/third_party/blink/renderer/core/dom/weak_identifier_map_test.cc +++ b/third_party/blink/renderer/core/dom/weak_identifier_map_test.cc
@@ -11,7 +11,7 @@ class WeakIdentifierMapTest : public ::testing::Test { public: - class TestClass final : public GarbageCollectedFinalized<TestClass> { + class TestClass final : public GarbageCollected<TestClass> { public: virtual void Trace(Visitor*) {} };
diff --git a/third_party/blink/renderer/core/editing/commands/edit_command.h b/third_party/blink/renderer/core/editing/commands/edit_command.h index aec819e..be659a9 100644 --- a/third_party/blink/renderer/core/editing/commands/edit_command.h +++ b/third_party/blink/renderer/core/editing/commands/edit_command.h
@@ -37,7 +37,7 @@ class Document; class EditingState; -class CORE_EXPORT EditCommand : public GarbageCollectedFinalized<EditCommand> { +class CORE_EXPORT EditCommand : public GarbageCollected<EditCommand> { public: virtual ~EditCommand();
diff --git a/third_party/blink/renderer/core/editing/commands/undo_step.h b/third_party/blink/renderer/core/editing/commands/undo_step.h index a1b7577..e609a4b 100644 --- a/third_party/blink/renderer/core/editing/commands/undo_step.h +++ b/third_party/blink/renderer/core/editing/commands/undo_step.h
@@ -39,7 +39,7 @@ class SimpleEditCommand; -class UndoStep final : public GarbageCollectedFinalized<UndoStep> { +class UndoStep final : public GarbageCollected<UndoStep> { public: UndoStep(Document*, const SelectionForUndoStep& starting_selection,
diff --git a/third_party/blink/renderer/core/editing/drag_caret.h b/third_party/blink/renderer/core/editing/drag_caret.h index f49b242..ca85fa1 100644 --- a/third_party/blink/renderer/core/editing/drag_caret.h +++ b/third_party/blink/renderer/core/editing/drag_caret.h
@@ -40,7 +40,7 @@ class LayoutBlock; struct PaintInvalidatorContext; -class DragCaret final : public GarbageCollectedFinalized<DragCaret>, +class DragCaret final : public GarbageCollected<DragCaret>, public SynchronousMutationObserver { USING_GARBAGE_COLLECTED_MIXIN(DragCaret);
diff --git a/third_party/blink/renderer/core/editing/editor.h b/third_party/blink/renderer/core/editing/editor.h index 6289ad8..eebbd98 100644 --- a/third_party/blink/renderer/core/editing/editor.h +++ b/third_party/blink/renderer/core/editing/editor.h
@@ -61,7 +61,7 @@ enum class EditorCommandSource { kMenuOrKeyBinding, kDOM }; enum class WritingDirection; -class CORE_EXPORT Editor final : public GarbageCollectedFinalized<Editor> { +class CORE_EXPORT Editor final : public GarbageCollected<Editor> { public: explicit Editor(LocalFrame&); ~Editor();
diff --git a/third_party/blink/renderer/core/editing/finder/find_task_controller.h b/third_party/blink/renderer/core/editing/finder/find_task_controller.h index 3f9b4844..f38c2662 100644 --- a/third_party/blink/renderer/core/editing/finder/find_task_controller.h +++ b/third_party/blink/renderer/core/editing/finder/find_task_controller.h
@@ -20,7 +20,7 @@ class WebLocalFrameImpl; class CORE_EXPORT FindTaskController final - : public GarbageCollectedFinalized<FindTaskController> { + : public GarbageCollected<FindTaskController> { public: FindTaskController(WebLocalFrameImpl& owner_frame, TextFinder& text_finder);
diff --git a/third_party/blink/renderer/core/editing/finder/text_finder.h b/third_party/blink/renderer/core/editing/finder/text_finder.h index 63b260b..cf2233af 100644 --- a/third_party/blink/renderer/core/editing/finder/text_finder.h +++ b/third_party/blink/renderer/core/editing/finder/text_finder.h
@@ -51,8 +51,7 @@ struct WebFloatRect; struct WebRect; -class CORE_EXPORT TextFinder final - : public GarbageCollectedFinalized<TextFinder> { +class CORE_EXPORT TextFinder final : public GarbageCollected<TextFinder> { public: bool Find(int identifier, const WebString& search_text,
diff --git a/third_party/blink/renderer/core/editing/frame_caret.h b/third_party/blink/renderer/core/editing/frame_caret.h index c7ee700..2f65e69 100644 --- a/third_party/blink/renderer/core/editing/frame_caret.h +++ b/third_party/blink/renderer/core/editing/frame_caret.h
@@ -50,8 +50,7 @@ enum class CaretVisibility { kVisible, kHidden }; -class CORE_EXPORT FrameCaret final - : public GarbageCollectedFinalized<FrameCaret> { +class CORE_EXPORT FrameCaret final : public GarbageCollected<FrameCaret> { public: FrameCaret(LocalFrame&, const SelectionEditor&); ~FrameCaret();
diff --git a/third_party/blink/renderer/core/editing/frame_selection.h b/third_party/blink/renderer/core/editing/frame_selection.h index 2478f729..97ce34c 100644 --- a/third_party/blink/renderer/core/editing/frame_selection.h +++ b/third_party/blink/renderer/core/editing/frame_selection.h
@@ -121,7 +121,7 @@ }; class CORE_EXPORT FrameSelection final - : public GarbageCollectedFinalized<FrameSelection>, + : public GarbageCollected<FrameSelection>, public SynchronousMutationObserver { USING_GARBAGE_COLLECTED_MIXIN(FrameSelection);
diff --git a/third_party/blink/renderer/core/editing/ime/input_method_controller.h b/third_party/blink/renderer/core/editing/ime/input_method_controller.h index 37cde8df..3b74437 100644 --- a/third_party/blink/renderer/core/editing/ime/input_method_controller.h +++ b/third_party/blink/renderer/core/editing/ime/input_method_controller.h
@@ -47,7 +47,7 @@ enum class TypingContinuation; class CORE_EXPORT InputMethodController final - : public GarbageCollectedFinalized<InputMethodController>, + : public GarbageCollected<InputMethodController>, public DocumentShutdownObserver { USING_GARBAGE_COLLECTED_MIXIN(InputMethodController);
diff --git a/third_party/blink/renderer/core/editing/markers/document_marker.h b/third_party/blink/renderer/core/editing/markers/document_marker.h index 7124abe6..2bac18f 100644 --- a/third_party/blink/renderer/core/editing/markers/document_marker.h +++ b/third_party/blink/renderer/core/editing/markers/document_marker.h
@@ -36,8 +36,7 @@ // A range of a node within a document that is "marked", such as the range of a // misspelled word. It optionally includes a description that could be displayed // in the user interface. -class CORE_EXPORT DocumentMarker - : public GarbageCollectedFinalized<DocumentMarker> { +class CORE_EXPORT DocumentMarker : public GarbageCollected<DocumentMarker> { public: enum MarkerTypeIndex { kSpellingMarkerIndex = 0,
diff --git a/third_party/blink/renderer/core/editing/markers/document_marker_list.h b/third_party/blink/renderer/core/editing/markers/document_marker_list.h index 1d93cac5..bc9852f 100644 --- a/third_party/blink/renderer/core/editing/markers/document_marker_list.h +++ b/third_party/blink/renderer/core/editing/markers/document_marker_list.h
@@ -19,7 +19,7 @@ // MarkerTypes with different insertion/retrieval patterns, or to provide // different behavior for certain MarkerTypes). class CORE_EXPORT DocumentMarkerList - : public GarbageCollectedFinalized<DocumentMarkerList> { + : public GarbageCollected<DocumentMarkerList> { public: virtual ~DocumentMarkerList();
diff --git a/third_party/blink/renderer/core/editing/selection_controller.h b/third_party/blink/renderer/core/editing/selection_controller.h index a92a5b1..20fb1033 100644 --- a/third_party/blink/renderer/core/editing/selection_controller.h +++ b/third_party/blink/renderer/core/editing/selection_controller.h
@@ -43,7 +43,7 @@ class LocalFrame; class CORE_EXPORT SelectionController final - : public GarbageCollectedFinalized<SelectionController>, + : public GarbageCollected<SelectionController>, public DocumentShutdownObserver { USING_GARBAGE_COLLECTED_MIXIN(SelectionController);
diff --git a/third_party/blink/renderer/core/editing/selection_editor.h b/third_party/blink/renderer/core/editing/selection_editor.h index ea58ab0c..9b17e52b 100644 --- a/third_party/blink/renderer/core/editing/selection_editor.h +++ b/third_party/blink/renderer/core/editing/selection_editor.h
@@ -39,7 +39,7 @@ // TODO(yosin): We will rename |SelectionEditor| to appropriate name since // it is no longer have a changing selection functionality, it was moved to // |SelectionModifier| class. -class SelectionEditor final : public GarbageCollectedFinalized<SelectionEditor>, +class SelectionEditor final : public GarbageCollected<SelectionEditor>, public SynchronousMutationObserver { USING_GARBAGE_COLLECTED_MIXIN(SelectionEditor);
diff --git a/third_party/blink/renderer/core/editing/spellcheck/idle_spell_check_controller.h b/third_party/blink/renderer/core/editing/spellcheck/idle_spell_check_controller.h index 0ff17a2..8613123 100644 --- a/third_party/blink/renderer/core/editing/spellcheck/idle_spell_check_controller.h +++ b/third_party/blink/renderer/core/editing/spellcheck/idle_spell_check_controller.h
@@ -28,7 +28,7 @@ // Main class for the implementation of idle time spell checker. // See design doc for details: https://goo.gl/zONC3v class CORE_EXPORT IdleSpellCheckController final - : public GarbageCollectedFinalized<IdleSpellCheckController>, + : public GarbageCollected<IdleSpellCheckController>, public DocumentShutdownObserver { DISALLOW_COPY_AND_ASSIGN(IdleSpellCheckController); USING_GARBAGE_COLLECTED_MIXIN(IdleSpellCheckController);
diff --git a/third_party/blink/renderer/core/editing/spellcheck/spell_check_requester.h b/third_party/blink/renderer/core/editing/spellcheck/spell_check_requester.h index d89db9e..02c197d2 100644 --- a/third_party/blink/renderer/core/editing/spellcheck/spell_check_requester.h +++ b/third_party/blink/renderer/core/editing/spellcheck/spell_check_requester.h
@@ -44,7 +44,7 @@ class WebTextCheckClient; class CORE_EXPORT SpellCheckRequest final - : public GarbageCollectedFinalized<SpellCheckRequest> { + : public GarbageCollected<SpellCheckRequest> { public: static const int kUnrequestedTextCheckingSequence = -1; @@ -80,7 +80,7 @@ }; class CORE_EXPORT SpellCheckRequester final - : public GarbageCollectedFinalized<SpellCheckRequester> { + : public GarbageCollected<SpellCheckRequester> { public: explicit SpellCheckRequester(LocalFrame&); ~SpellCheckRequester();
diff --git a/third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.h b/third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.h index e3d249f..61702af 100644 --- a/third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.h +++ b/third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.h
@@ -26,7 +26,7 @@ // suggestions (e.g. from spellcheck), and performing actions relating to those // suggestions. Android is currently the only platform that has such a menu. class CORE_EXPORT TextSuggestionController final - : public GarbageCollectedFinalized<TextSuggestionController>, + : public GarbageCollected<TextSuggestionController>, public DocumentShutdownObserver { USING_GARBAGE_COLLECTED_MIXIN(TextSuggestionController);
diff --git a/third_party/blink/renderer/core/execution_context/agent.h b/third_party/blink/renderer/core/execution_context/agent.h index 360f841a..5874d969 100644 --- a/third_party/blink/renderer/core/execution_context/agent.h +++ b/third_party/blink/renderer/core/execution_context/agent.h
@@ -29,7 +29,7 @@ // Worklets have their own agent. // While an WindowAgentFactory is shared across a group of reachable frames, // Agent is shared across a group of reachable and same-site frames. -class CORE_EXPORT Agent : public GarbageCollectedFinalized<Agent> { +class CORE_EXPORT Agent : public GarbageCollected<Agent> { public: static Agent* CreateForWorkerOrWorklet( v8::Isolate* isolate,
diff --git a/third_party/blink/renderer/core/execution_context/context_lifecycle_state_observer_test.cc b/third_party/blink/renderer/core/execution_context/context_lifecycle_state_observer_test.cc index 371360e..03e217d 100644 --- a/third_party/blink/renderer/core/execution_context/context_lifecycle_state_observer_test.cc +++ b/third_party/blink/renderer/core/execution_context/context_lifecycle_state_observer_test.cc
@@ -39,7 +39,7 @@ namespace blink { class MockContextLifecycleStateObserver final - : public GarbageCollectedFinalized<MockContextLifecycleStateObserver>, + : public GarbageCollected<MockContextLifecycleStateObserver>, public ContextLifecycleStateObserver { USING_GARBAGE_COLLECTED_MIXIN(MockContextLifecycleStateObserver);
diff --git a/third_party/blink/renderer/core/execution_context/remote_security_context.h b/third_party/blink/renderer/core/execution_context/remote_security_context.h index c706510..854b508 100644 --- a/third_party/blink/renderer/core/execution_context/remote_security_context.h +++ b/third_party/blink/renderer/core/execution_context/remote_security_context.h
@@ -13,7 +13,7 @@ namespace blink { class CORE_EXPORT RemoteSecurityContext - : public GarbageCollectedFinalized<RemoteSecurityContext>, + : public GarbageCollected<RemoteSecurityContext>, public SecurityContext { USING_GARBAGE_COLLECTED_MIXIN(RemoteSecurityContext);
diff --git a/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h b/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h index 947811c8..eded98f 100644 --- a/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h +++ b/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h
@@ -56,7 +56,7 @@ class WebLocalFrameImpl; class CORE_EXPORT WebDevToolsAgentImpl final - : public GarbageCollectedFinalized<WebDevToolsAgentImpl>, + : public GarbageCollected<WebDevToolsAgentImpl>, public DevToolsAgent::Client, public InspectorPageAgent::Client, public InspectorLayerTreeAgent::Client,
diff --git a/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h b/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h index 034a9e49..50f348a 100644 --- a/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h +++ b/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h
@@ -17,7 +17,7 @@ class HTMLElement; class CORE_EXPORT WebFormElementObserverImpl final - : public GarbageCollectedFinalized<WebFormElementObserverImpl>, + : public GarbageCollected<WebFormElementObserverImpl>, public WebFormElementObserver { public: WebFormElementObserverImpl(HTMLElement&, base::OnceClosure);
diff --git a/third_party/blink/renderer/core/exported/web_hit_test_result.cc b/third_party/blink/renderer/core/exported/web_hit_test_result.cc index 3a4398d..6a61243 100644 --- a/third_party/blink/renderer/core/exported/web_hit_test_result.cc +++ b/third_party/blink/renderer/core/exported/web_hit_test_result.cc
@@ -38,7 +38,7 @@ namespace blink { class WebHitTestResultPrivate final - : public GarbageCollectedFinalized<WebHitTestResultPrivate> { + : public GarbageCollected<WebHitTestResultPrivate> { public: WebHitTestResultPrivate(const HitTestResult&); WebHitTestResultPrivate(const WebHitTestResultPrivate&);
diff --git a/third_party/blink/renderer/core/exported/web_plugin_container_impl.h b/third_party/blink/renderer/core/exported/web_plugin_container_impl.h index d90c2088..242fd3e 100644 --- a/third_party/blink/renderer/core/exported/web_plugin_container_impl.h +++ b/third_party/blink/renderer/core/exported/web_plugin_container_impl.h
@@ -67,7 +67,7 @@ struct WebPrintPresetOptions; class CORE_EXPORT WebPluginContainerImpl final - : public GarbageCollectedFinalized<WebPluginContainerImpl>, + : public GarbageCollected<WebPluginContainerImpl>, public EmbeddedContentView, public WebPluginContainer, public ContextClient {
diff --git a/third_party/blink/renderer/core/exported/web_remote_frame_impl.h b/third_party/blink/renderer/core/exported/web_remote_frame_impl.h index 9b2bafdd..843a8fe 100644 --- a/third_party/blink/renderer/core/exported/web_remote_frame_impl.h +++ b/third_party/blink/renderer/core/exported/web_remote_frame_impl.h
@@ -28,7 +28,7 @@ class WindowAgentFactory; class CORE_EXPORT WebRemoteFrameImpl final - : public GarbageCollectedFinalized<WebRemoteFrameImpl>, + : public GarbageCollected<WebRemoteFrameImpl>, public WebRemoteFrame { public: static WebRemoteFrameImpl* Create(WebTreeScopeType, WebRemoteFrameClient*);
diff --git a/third_party/blink/renderer/core/fetch/blob_bytes_consumer_test.cc b/third_party/blink/renderer/core/fetch/blob_bytes_consumer_test.cc index 308fe7de..f1b1b1f 100644 --- a/third_party/blink/renderer/core/fetch/blob_bytes_consumer_test.cc +++ b/third_party/blink/renderer/core/fetch/blob_bytes_consumer_test.cc
@@ -27,7 +27,7 @@ using Result = BytesConsumer::Result; class BlobBytesConsumerTestClient final - : public GarbageCollectedFinalized<BlobBytesConsumerTestClient>, + : public GarbageCollected<BlobBytesConsumerTestClient>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(BlobBytesConsumerTestClient);
diff --git a/third_party/blink/renderer/core/fetch/body.cc b/third_party/blink/renderer/core/fetch/body.cc index fe14d5ac..e6031d03 100644 --- a/third_party/blink/renderer/core/fetch/body.cc +++ b/third_party/blink/renderer/core/fetch/body.cc
@@ -30,7 +30,7 @@ namespace { -class BodyConsumerBase : public GarbageCollectedFinalized<BodyConsumerBase>, +class BodyConsumerBase : public GarbageCollected<BodyConsumerBase>, public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(BodyConsumerBase);
diff --git a/third_party/blink/renderer/core/fetch/body_stream_buffer.cc b/third_party/blink/renderer/core/fetch/body_stream_buffer.cc index d4ae6f19..4b6b94cf4 100644 --- a/third_party/blink/renderer/core/fetch/body_stream_buffer.cc +++ b/third_party/blink/renderer/core/fetch/body_stream_buffer.cc
@@ -28,7 +28,7 @@ namespace blink { class BodyStreamBuffer::LoaderClient final - : public GarbageCollectedFinalized<LoaderClient>, + : public GarbageCollected<LoaderClient>, public ContextLifecycleObserver, public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(LoaderClient);
diff --git a/third_party/blink/renderer/core/fetch/bytes_consumer_tee.cc b/third_party/blink/renderer/core/fetch/bytes_consumer_tee.cc index 74a77e9..7250ffd 100644 --- a/third_party/blink/renderer/core/fetch/bytes_consumer_tee.cc +++ b/third_party/blink/renderer/core/fetch/bytes_consumer_tee.cc
@@ -22,7 +22,7 @@ namespace { -class NoopClient final : public GarbageCollectedFinalized<NoopClient>, +class NoopClient final : public GarbageCollected<NoopClient>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(NoopClient); @@ -31,7 +31,7 @@ String DebugName() const override { return "NoopClient"; } }; -class TeeHelper final : public GarbageCollectedFinalized<TeeHelper>, +class TeeHelper final : public GarbageCollected<TeeHelper>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(TeeHelper); @@ -122,7 +122,7 @@ private: using Result = BytesConsumer::Result; - class Chunk final : public GarbageCollectedFinalized<Chunk> { + class Chunk final : public GarbageCollected<Chunk> { public: Chunk(const char* data, wtf_size_t size) { buffer_.ReserveInitialCapacity(size);
diff --git a/third_party/blink/renderer/core/fetch/bytes_consumer_tee_test.cc b/third_party/blink/renderer/core/fetch/bytes_consumer_tee_test.cc index eee1df3e..c62fa37d 100644 --- a/third_party/blink/renderer/core/fetch/bytes_consumer_tee_test.cc +++ b/third_party/blink/renderer/core/fetch/bytes_consumer_tee_test.cc
@@ -21,7 +21,7 @@ using Result = BytesConsumer::Result; class BytesConsumerTestClient final - : public GarbageCollectedFinalized<BytesConsumerTestClient>, + : public GarbageCollected<BytesConsumerTestClient>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(BytesConsumerTestClient);
diff --git a/third_party/blink/renderer/core/fetch/bytes_consumer_test_util.h b/third_party/blink/renderer/core/fetch/bytes_consumer_test_util.h index 38d7ce1..f7a206d6 100644 --- a/third_party/blink/renderer/core/fetch/bytes_consumer_test_util.h +++ b/third_party/blink/renderer/core/fetch/bytes_consumer_test_util.h
@@ -37,7 +37,7 @@ }; class MockFetchDataLoaderClient - : public GarbageCollectedFinalized<MockFetchDataLoaderClient>, + : public GarbageCollected<MockFetchDataLoaderClient>, public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(MockFetchDataLoaderClient);
diff --git a/third_party/blink/renderer/core/fetch/fetch_data_loader.h b/third_party/blink/renderer/core/fetch/fetch_data_loader.h index 220ab82..9ce57b2a 100644 --- a/third_party/blink/renderer/core/fetch/fetch_data_loader.h +++ b/third_party/blink/renderer/core/fetch/fetch_data_loader.h
@@ -28,8 +28,7 @@ // - Client's methods can be called synchronously in Start(). // - If FetchDataLoader::Cancel() is called, Client's methods will not be // called anymore. -class CORE_EXPORT FetchDataLoader - : public GarbageCollectedFinalized<FetchDataLoader> { +class CORE_EXPORT FetchDataLoader : public GarbageCollected<FetchDataLoader> { public: class CORE_EXPORT Client : public GarbageCollectedMixin { public:
diff --git a/third_party/blink/renderer/core/fetch/fetch_data_loader_test.cc b/third_party/blink/renderer/core/fetch/fetch_data_loader_test.cc index 620d420d..df40205c 100644 --- a/third_party/blink/renderer/core/fetch/fetch_data_loader_test.cc +++ b/third_party/blink/renderer/core/fetch/fetch_data_loader_test.cc
@@ -65,7 +65,7 @@ class FetchDataLoaderTest : public testing::Test { protected: - struct PipingClient : public GarbageCollectedFinalized<PipingClient>, + struct PipingClient : public GarbageCollected<PipingClient>, public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(PipingClient);
diff --git a/third_party/blink/renderer/core/fetch/fetch_header_list.h b/third_party/blink/renderer/core/fetch/fetch_header_list.h index 123a276..9be81706 100644 --- a/third_party/blink/renderer/core/fetch/fetch_header_list.h +++ b/third_party/blink/renderer/core/fetch/fetch_header_list.h
@@ -15,7 +15,7 @@ // http://fetch.spec.whatwg.org/#terminology-headers class CORE_EXPORT FetchHeaderList final - : public GarbageCollectedFinalized<FetchHeaderList> { + : public GarbageCollected<FetchHeaderList> { public: struct ByteCaseInsensitiveCompare { bool operator()(const String& lhs, const String& rhs) const {
diff --git a/third_party/blink/renderer/core/fetch/fetch_manager.cc b/third_party/blink/renderer/core/fetch/fetch_manager.cc index 3a7be73..9fe95cf 100644 --- a/third_party/blink/renderer/core/fetch/fetch_manager.cc +++ b/third_party/blink/renderer/core/fetch/fetch_manager.cc
@@ -82,7 +82,7 @@ } // namespace class FetchManager::Loader final - : public GarbageCollectedFinalized<FetchManager::Loader>, + : public GarbageCollected<FetchManager::Loader>, public ThreadableLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(Loader); @@ -108,7 +108,7 @@ void Dispose(); void Abort(); - class SRIVerifier final : public GarbageCollectedFinalized<SRIVerifier>, + class SRIVerifier final : public GarbageCollected<SRIVerifier>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(SRIVerifier);
diff --git a/third_party/blink/renderer/core/fetch/fetch_request_data.h b/third_party/blink/renderer/core/fetch/fetch_request_data.h index 85cb308..f42e471 100644 --- a/third_party/blink/renderer/core/fetch/fetch_request_data.h +++ b/third_party/blink/renderer/core/fetch/fetch_request_data.h
@@ -30,7 +30,7 @@ class ScriptState; class CORE_EXPORT FetchRequestData final - : public GarbageCollectedFinalized<FetchRequestData> { + : public GarbageCollected<FetchRequestData> { public: enum Tainting { kBasicTainting, kCorsTainting, kOpaqueTainting }; enum class ForServiceWorkerFetchEvent { kFalse, kTrue };
diff --git a/third_party/blink/renderer/core/fetch/fetch_response_data.h b/third_party/blink/renderer/core/fetch/fetch_response_data.h index 09064037..3e030b4b 100644 --- a/third_party/blink/renderer/core/fetch/fetch_response_data.h +++ b/third_party/blink/renderer/core/fetch/fetch_response_data.h
@@ -28,7 +28,7 @@ class ScriptState; class CORE_EXPORT FetchResponseData final - : public GarbageCollectedFinalized<FetchResponseData> { + : public GarbageCollected<FetchResponseData> { public: // "A response can have an associated termination reason which is one of // end-user abort, fatal, and timeout."
diff --git a/third_party/blink/renderer/core/fetch/form_data_bytes_consumer_test.cc b/third_party/blink/renderer/core/fetch/form_data_bytes_consumer_test.cc index 1e7e9d97..a6bd75d 100644 --- a/third_party/blink/renderer/core/fetch/form_data_bytes_consumer_test.cc +++ b/third_party/blink/renderer/core/fetch/form_data_bytes_consumer_test.cc
@@ -120,7 +120,7 @@ return body; } -class NoopClient final : public GarbageCollectedFinalized<NoopClient>, +class NoopClient final : public GarbageCollected<NoopClient>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(NoopClient);
diff --git a/third_party/blink/renderer/core/fetch/global_fetch.cc b/third_party/blink/renderer/core/fetch/global_fetch.cc index 3e446ed3..b016b5f 100644 --- a/third_party/blink/renderer/core/fetch/global_fetch.cc +++ b/third_party/blink/renderer/core/fetch/global_fetch.cc
@@ -33,10 +33,9 @@ } template <typename T> -class GlobalFetchImpl final - : public GarbageCollectedFinalized<GlobalFetchImpl<T>>, - public GlobalFetch::ScopedFetcher, - public Supplement<T> { +class GlobalFetchImpl final : public GarbageCollected<GlobalFetchImpl<T>>, + public GlobalFetch::ScopedFetcher, + public Supplement<T> { USING_GARBAGE_COLLECTED_MIXIN(GlobalFetchImpl); public:
diff --git a/third_party/blink/renderer/core/fetch/multipart_parser.h b/third_party/blink/renderer/core/fetch/multipart_parser.h index cedf5e53..009d060e 100644 --- a/third_party/blink/renderer/core/fetch/multipart_parser.h +++ b/third_party/blink/renderer/core/fetch/multipart_parser.h
@@ -25,7 +25,7 @@ // - If MultipartParser::cancel() is called, Client's methods will not be // called anymore. class CORE_EXPORT MultipartParser final - : public GarbageCollectedFinalized<MultipartParser> { + : public GarbageCollected<MultipartParser> { public: // Client recieves parsed part header fields and data. class CORE_EXPORT Client : public GarbageCollectedMixin {
diff --git a/third_party/blink/renderer/core/fetch/multipart_parser_test.cc b/third_party/blink/renderer/core/fetch/multipart_parser_test.cc index ec7d5e73..7d23256f 100644 --- a/third_party/blink/renderer/core/fetch/multipart_parser_test.cc +++ b/third_party/blink/renderer/core/fetch/multipart_parser_test.cc
@@ -22,7 +22,7 @@ } class MockMultipartParserClient final - : public GarbageCollectedFinalized<MockMultipartParserClient>, + : public GarbageCollected<MockMultipartParserClient>, public MultipartParser::Client { USING_GARBAGE_COLLECTED_MIXIN(MockMultipartParserClient);
diff --git a/third_party/blink/renderer/core/fetch/readable_stream_bytes_consumer_test.cc b/third_party/blink/renderer/core/fetch/readable_stream_bytes_consumer_test.cc index e25410fc..0b75bfb 100644 --- a/third_party/blink/renderer/core/fetch/readable_stream_bytes_consumer_test.cc +++ b/third_party/blink/renderer/core/fetch/readable_stream_bytes_consumer_test.cc
@@ -29,7 +29,7 @@ using Result = BytesConsumer::Result; using PublicState = BytesConsumer::PublicState; -class MockClient : public GarbageCollectedFinalized<MockClient>, +class MockClient : public GarbageCollected<MockClient>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(MockClient);
diff --git a/third_party/blink/renderer/core/fileapi/public_url_manager.h b/third_party/blink/renderer/core/fileapi/public_url_manager.h index c70d2aaf..e98d32d 100644 --- a/third_party/blink/renderer/core/fileapi/public_url_manager.h +++ b/third_party/blink/renderer/core/fileapi/public_url_manager.h
@@ -44,7 +44,7 @@ class URLRegistrable; class CORE_EXPORT PublicURLManager final - : public GarbageCollectedFinalized<PublicURLManager>, + : public GarbageCollected<PublicURLManager>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(PublicURLManager);
diff --git a/third_party/blink/renderer/core/frame/ad_tracker.h b/third_party/blink/renderer/core/frame/ad_tracker.h index 2543296..72c79e7 100644 --- a/third_party/blink/renderer/core/frame/ad_tracker.h +++ b/third_party/blink/renderer/core/frame/ad_tracker.h
@@ -32,7 +32,7 @@ // Tracker for tagging resources as ads based on the call stack scripts. // The tracker is maintained per local root. -class CORE_EXPORT AdTracker : public GarbageCollectedFinalized<AdTracker> { +class CORE_EXPORT AdTracker : public GarbageCollected<AdTracker> { public: // Finds an AdTracker for a given ExecutionContext. static AdTracker* FromExecutionContext(ExecutionContext*);
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.h b/third_party/blink/renderer/core/frame/csp/content_security_policy.h index a7d32a5b..9c99038 100644 --- a/third_party/blink/renderer/core/frame/csp/content_security_policy.h +++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.h
@@ -129,7 +129,7 @@ }; class CORE_EXPORT ContentSecurityPolicy final - : public GarbageCollectedFinalized<ContentSecurityPolicy> { + : public GarbageCollected<ContentSecurityPolicy> { public: enum ExceptionStatus { kWillThrowException, kWillNotThrowException };
diff --git a/third_party/blink/renderer/core/frame/csp/csp_directive.h b/third_party/blink/renderer/core/frame/csp/csp_directive.h index 4a32cdc..3bdaebf 100644 --- a/third_party/blink/renderer/core/frame/csp/csp_directive.h +++ b/third_party/blink/renderer/core/frame/csp/csp_directive.h
@@ -14,8 +14,7 @@ class ContentSecurityPolicy; -class CORE_EXPORT CSPDirective - : public GarbageCollectedFinalized<CSPDirective> { +class CORE_EXPORT CSPDirective : public GarbageCollected<CSPDirective> { public: CSPDirective(const String& name, const String& value,
diff --git a/third_party/blink/renderer/core/frame/csp/csp_directive_list.h b/third_party/blink/renderer/core/frame/csp/csp_directive_list.h index ead1777..336a5cb 100644 --- a/third_party/blink/renderer/core/frame/csp/csp_directive_list.h +++ b/third_party/blink/renderer/core/frame/csp/csp_directive_list.h
@@ -29,7 +29,7 @@ typedef HeapVector<Member<SourceListDirective>> SourceListDirectiveVector; class CORE_EXPORT CSPDirectiveList final - : public GarbageCollectedFinalized<CSPDirectiveList> { + : public GarbageCollected<CSPDirectiveList> { public: static CSPDirectiveList* Create(ContentSecurityPolicy*, const UChar* begin,
diff --git a/third_party/blink/renderer/core/frame/csp/csp_source.h b/third_party/blink/renderer/core/frame/csp/csp_source.h index 331d20a..5c3bd9e9 100644 --- a/third_party/blink/renderer/core/frame/csp/csp_source.h +++ b/third_party/blink/renderer/core/frame/csp/csp_source.h
@@ -18,8 +18,7 @@ class ContentSecurityPolicy; class KURL; -class CORE_EXPORT CSPSource final - : public GarbageCollectedFinalized<CSPSource> { +class CORE_EXPORT CSPSource final : public GarbageCollected<CSPSource> { public: enum WildcardDisposition { kNoWildcard, kHasWildcard };
diff --git a/third_party/blink/renderer/core/frame/csp/navigation_initiator_impl.h b/third_party/blink/renderer/core/frame/csp/navigation_initiator_impl.h index 621b0a5..836878e 100644 --- a/third_party/blink/renderer/core/frame/csp/navigation_initiator_impl.h +++ b/third_party/blink/renderer/core/frame/csp/navigation_initiator_impl.h
@@ -14,7 +14,7 @@ class Document; class NavigationInitiatorImpl - : public GarbageCollectedFinalized<NavigationInitiatorImpl>, + : public GarbageCollected<NavigationInitiatorImpl>, public mojom::blink::NavigationInitiator { USING_PRE_FINALIZER(NavigationInitiatorImpl, Dispose);
diff --git a/third_party/blink/renderer/core/frame/device_single_window_event_controller.h b/third_party/blink/renderer/core/frame/device_single_window_event_controller.h index 2c5b386..e66045ab 100644 --- a/third_party/blink/renderer/core/frame/device_single_window_event_controller.h +++ b/third_party/blink/renderer/core/frame/device_single_window_event_controller.h
@@ -16,7 +16,7 @@ class Event; class CORE_EXPORT DeviceSingleWindowEventController - : public GarbageCollectedFinalized<DeviceSingleWindowEventController>, + : public GarbageCollected<DeviceSingleWindowEventController>, public PlatformEventController, public LocalDOMWindow::EventListenerObserver { public:
diff --git a/third_party/blink/renderer/core/frame/display_cutout_client_impl.h b/third_party/blink/renderer/core/frame/display_cutout_client_impl.h index b547e26..6000271 100644 --- a/third_party/blink/renderer/core/frame/display_cutout_client_impl.h +++ b/third_party/blink/renderer/core/frame/display_cutout_client_impl.h
@@ -17,7 +17,7 @@ // Mojo interface to set CSS environment variables for display cutout. class CORE_EXPORT DisplayCutoutClientImpl final - : public GarbageCollectedFinalized<DisplayCutoutClientImpl>, + : public GarbageCollected<DisplayCutoutClientImpl>, public mojom::blink::DisplayCutoutClient { public: static void BindMojoRequest(
diff --git a/third_party/blink/renderer/core/frame/dom_timer.h b/third_party/blink/renderer/core/frame/dom_timer.h index 6907a4c..dbd4d64 100644 --- a/third_party/blink/renderer/core/frame/dom_timer.h +++ b/third_party/blink/renderer/core/frame/dom_timer.h
@@ -41,7 +41,7 @@ class ExecutionContext; class ScheduledAction; -class CORE_EXPORT DOMTimer final : public GarbageCollectedFinalized<DOMTimer>, +class CORE_EXPORT DOMTimer final : public GarbageCollected<DOMTimer>, public ContextLifecycleObserver, public TimerBase, public NameClient {
diff --git a/third_party/blink/renderer/core/frame/dom_window.h b/third_party/blink/renderer/core/frame/dom_window.h index 76237d7..83481afd 100644 --- a/third_party/blink/renderer/core/frame/dom_window.h +++ b/third_party/blink/renderer/core/frame/dom_window.h
@@ -57,7 +57,7 @@ return frame_; } - // GarbageCollectedFinalized overrides: + // GarbageCollected overrides: void Trace(blink::Visitor*) override; virtual bool IsLocalDOMWindow() const = 0;
diff --git a/third_party/blink/renderer/core/frame/event_handler_registry.h b/third_party/blink/renderer/core/frame/event_handler_registry.h index 91890f0..3c119318 100644 --- a/third_party/blink/renderer/core/frame/event_handler_registry.h +++ b/third_party/blink/renderer/core/frame/event_handler_registry.h
@@ -24,7 +24,7 @@ // event targets for a frame may only be registered with the // EventHandlerRegistry of its corresponding local root. class CORE_EXPORT EventHandlerRegistry final - : public GarbageCollectedFinalized<EventHandlerRegistry> { + : public GarbageCollected<EventHandlerRegistry> { public: explicit EventHandlerRegistry(LocalFrame&); virtual ~EventHandlerRegistry();
diff --git a/third_party/blink/renderer/core/frame/find_in_page.h b/third_party/blink/renderer/core/frame/find_in_page.h index d1cac5d9..1f835bfd 100644 --- a/third_party/blink/renderer/core/frame/find_in_page.h +++ b/third_party/blink/renderer/core/frame/find_in_page.h
@@ -26,10 +26,8 @@ class WebString; struct WebFloatRect; -class CORE_EXPORT FindInPage final - : public GarbageCollectedFinalized<FindInPage>, - public mojom::blink::FindInPage { - +class CORE_EXPORT FindInPage final : public GarbageCollected<FindInPage>, + public mojom::blink::FindInPage { public: FindInPage(WebLocalFrameImpl& frame, InterfaceRegistry* interface_registry);
diff --git a/third_party/blink/renderer/core/frame/frame.h b/third_party/blink/renderer/core/frame/frame.h index 1e51666..161fff2 100644 --- a/third_party/blink/renderer/core/frame/frame.h +++ b/third_party/blink/renderer/core/frame/frame.h
@@ -74,7 +74,7 @@ // Frame is the base class of LocalFrame and RemoteFrame and should only contain // functionality shared between both. In particular, any method related to // input, layout, or painting probably belongs on LocalFrame. -class CORE_EXPORT Frame : public GarbageCollectedFinalized<Frame> { +class CORE_EXPORT Frame : public GarbageCollected<Frame> { public: virtual ~Frame();
diff --git a/third_party/blink/renderer/core/frame/frame_client.h b/third_party/blink/renderer/core/frame/frame_client.h index 92973e9e6..f923033 100644 --- a/third_party/blink/renderer/core/frame/frame_client.h +++ b/third_party/blink/renderer/core/frame/frame_client.h
@@ -17,7 +17,7 @@ class Frame; enum class FrameDetachType; -class CORE_EXPORT FrameClient : public GarbageCollectedFinalized<FrameClient> { +class CORE_EXPORT FrameClient : public GarbageCollected<FrameClient> { public: virtual bool InShadowTree() const = 0;
diff --git a/third_party/blink/renderer/core/frame/frame_console.h b/third_party/blink/renderer/core/frame/frame_console.h index 720cd843..179590ac 100644 --- a/third_party/blink/renderer/core/frame/frame_console.h +++ b/third_party/blink/renderer/core/frame/frame_console.h
@@ -48,8 +48,7 @@ // Page to the ChromeClient and Inspector. It's meant as an abstraction // around ChromeClient calls and the way that Blink core/ can add messages to // the console. -class CORE_EXPORT FrameConsole final - : public GarbageCollectedFinalized<FrameConsole> { +class CORE_EXPORT FrameConsole final : public GarbageCollected<FrameConsole> { public: explicit FrameConsole(LocalFrame&);
diff --git a/third_party/blink/renderer/core/frame/frame_impl.h b/third_party/blink/renderer/core/frame/frame_impl.h index 7abb3b8d1..47e0b18 100644 --- a/third_party/blink/renderer/core/frame/frame_impl.h +++ b/third_party/blink/renderer/core/frame/frame_impl.h
@@ -18,7 +18,7 @@ class LocalFrame; // Implementation of mojom::blink::Frame -class CORE_EXPORT FrameImpl final : public GarbageCollectedFinalized<FrameImpl>, +class CORE_EXPORT FrameImpl final : public GarbageCollected<FrameImpl>, public Supplement<LocalFrame>, public mojom::blink::Frame { USING_GARBAGE_COLLECTED_MIXIN(FrameImpl);
diff --git a/third_party/blink/renderer/core/frame/frame_owner.h b/third_party/blink/renderer/core/frame/frame_owner.h index a1a2a5d..ba29a7b 100644 --- a/third_party/blink/renderer/core/frame/frame_owner.h +++ b/third_party/blink/renderer/core/frame/frame_owner.h
@@ -79,7 +79,7 @@ // frames. Move this into WebLocalFrameImpl.cpp and remove existing dependencies // on it. class CORE_EXPORT DummyFrameOwner final - : public GarbageCollectedFinalized<DummyFrameOwner>, + : public GarbageCollected<DummyFrameOwner>, public FrameOwner { USING_GARBAGE_COLLECTED_MIXIN(DummyFrameOwner);
diff --git a/third_party/blink/renderer/core/frame/link_highlights.h b/third_party/blink/renderer/core/frame/link_highlights.h index e613f1e..925e80ac7 100644 --- a/third_party/blink/renderer/core/frame/link_highlights.h +++ b/third_party/blink/renderer/core/frame/link_highlights.h
@@ -30,7 +30,7 @@ // LinkHighlightPainter. This will be convenient to do when we remove // GraphicsLayer for CompositeAfterPaint. class CORE_EXPORT LinkHighlights final - : public GarbageCollectedFinalized<LinkHighlights> { + : public GarbageCollected<LinkHighlights> { public: explicit LinkHighlights(Page&); virtual ~LinkHighlights();
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 8e11d81b..3c2beec 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -545,6 +545,11 @@ } } +void LocalFrameView::UpdateAcceleratedCompositingSettings() { + if (auto* layout_view = GetLayoutView()) + layout_view->Compositor()->UpdateAcceleratedCompositingSettings(); +} + void LocalFrameView::UpdateCountersAfterStyleChange() { auto* layout_view = GetLayoutView(); DCHECK(layout_view); @@ -2897,8 +2902,6 @@ frame_->GetDocument()->GetLayoutView()->AssertLaidOut(); #endif - UpdateGeometriesIfNeeded(); - if (Lifecycle().GetState() < DocumentLifecycle::kLayoutClean) Lifecycle().AdvanceTo(DocumentLifecycle::kLayoutClean);
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.h b/third_party/blink/renderer/core/frame/local_frame_view.h index 5a4238d..d1b9679 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.h +++ b/third_party/blink/renderer/core/frame/local_frame_view.h
@@ -114,7 +114,7 @@ }; class CORE_EXPORT LocalFrameView final - : public GarbageCollectedFinalized<LocalFrameView>, + : public GarbageCollected<LocalFrameView>, public FrameView { USING_GARBAGE_COLLECTED_MIXIN(LocalFrameView);
diff --git a/third_party/blink/renderer/core/frame/pausable_script_executor.h b/third_party/blink/renderer/core/frame/pausable_script_executor.h index fd4a7af..59374a6 100644 --- a/third_party/blink/renderer/core/frame/pausable_script_executor.h +++ b/third_party/blink/renderer/core/frame/pausable_script_executor.h
@@ -22,7 +22,7 @@ class WebScriptExecutionCallback; class CORE_EXPORT PausableScriptExecutor final - : public GarbageCollectedFinalized<PausableScriptExecutor>, + : public GarbageCollected<PausableScriptExecutor>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(PausableScriptExecutor); @@ -38,7 +38,7 @@ v8::Local<v8::Value> argv[], WebScriptExecutionCallback*); - class Executor : public GarbageCollectedFinalized<Executor> { + class Executor : public GarbageCollected<Executor> { public: virtual ~Executor() = default;
diff --git a/third_party/blink/renderer/core/frame/performance_monitor.h b/third_party/blink/renderer/core/frame/performance_monitor.h index 7f1e3a1..0fe1294c 100644 --- a/third_party/blink/renderer/core/frame/performance_monitor.h +++ b/third_party/blink/renderer/core/frame/performance_monitor.h
@@ -39,7 +39,7 @@ // Long task notifications are delivered to observing WindowPerformance* // instances (in the local frame tree) in m_webPerformanceObservers. class CORE_EXPORT PerformanceMonitor final - : public GarbageCollectedFinalized<PerformanceMonitor>, + : public GarbageCollected<PerformanceMonitor>, public base::sequence_manager::TaskTimeObserver { public: enum Violation : size_t {
diff --git a/third_party/blink/renderer/core/frame/picture_in_picture_controller.h b/third_party/blink/renderer/core/frame/picture_in_picture_controller.h index 0f08617..ff0e9a50 100644 --- a/third_party/blink/renderer/core/frame/picture_in_picture_controller.h +++ b/third_party/blink/renderer/core/frame/picture_in_picture_controller.h
@@ -20,7 +20,7 @@ // for a video element in Blink outside of modules/ module. It // is an interface that the module will implement and add a provider for. class CORE_EXPORT PictureInPictureController - : public GarbageCollectedFinalized<PictureInPictureController>, + : public GarbageCollected<PictureInPictureController>, public Supplement<Document> { USING_GARBAGE_COLLECTED_MIXIN(PictureInPictureController);
diff --git a/third_party/blink/renderer/core/frame/remote_frame_owner.h b/third_party/blink/renderer/core/frame/remote_frame_owner.h index 31afc440..5e5e7f3 100644 --- a/third_party/blink/renderer/core/frame/remote_frame_owner.h +++ b/third_party/blink/renderer/core/frame/remote_frame_owner.h
@@ -21,7 +21,7 @@ // its owner element in another process. // 2. Trigger a load event on its owner element once it finishes a load. class CORE_EXPORT RemoteFrameOwner final - : public GarbageCollectedFinalized<RemoteFrameOwner>, + : public GarbageCollected<RemoteFrameOwner>, public FrameOwner { USING_GARBAGE_COLLECTED_MIXIN(RemoteFrameOwner);
diff --git a/third_party/blink/renderer/core/frame/remote_frame_view.h b/third_party/blink/renderer/core/frame/remote_frame_view.h index 020896fe..910a7ef 100644 --- a/third_party/blink/renderer/core/frame/remote_frame_view.h +++ b/third_party/blink/renderer/core/frame/remote_frame_view.h
@@ -24,7 +24,7 @@ class LocalFrameView; class RemoteFrame; -class RemoteFrameView final : public GarbageCollectedFinalized<RemoteFrameView>, +class RemoteFrameView final : public GarbageCollected<RemoteFrameView>, public FrameView { USING_GARBAGE_COLLECTED_MIXIN(RemoteFrameView);
diff --git a/third_party/blink/renderer/core/frame/reporting_context.h b/third_party/blink/renderer/core/frame/reporting_context.h index c463cb5..ab5ca790 100644 --- a/third_party/blink/renderer/core/frame/reporting_context.h +++ b/third_party/blink/renderer/core/frame/reporting_context.h
@@ -21,7 +21,7 @@ // ReportingContext processes all reports for an ExecutionContext, and serves as // a container for all active ReportingObservers on that ExecutionContext. class CORE_EXPORT ReportingContext final - : public GarbageCollectedFinalized<ReportingContext>, + : public GarbageCollected<ReportingContext>, public Supplement<ExecutionContext> { USING_GARBAGE_COLLECTED_MIXIN(ReportingContext);
diff --git a/third_party/blink/renderer/core/frame/root_frame_viewport.h b/third_party/blink/renderer/core/frame/root_frame_viewport.h index 4b498850..2a24c76 100644 --- a/third_party/blink/renderer/core/frame/root_frame_viewport.h +++ b/third_party/blink/renderer/core/frame/root_frame_viewport.h
@@ -27,7 +27,7 @@ // the layout viewport. Thus, we could say this class is a decorator on the // LocalFrameView scrollable area that adds pinch-zoom semantics to scrolling. class CORE_EXPORT RootFrameViewport final - : public GarbageCollectedFinalized<RootFrameViewport>, + : public GarbageCollected<RootFrameViewport>, public ScrollableArea { USING_GARBAGE_COLLECTED_MIXIN(RootFrameViewport);
diff --git a/third_party/blink/renderer/core/frame/root_frame_viewport_test.cc b/third_party/blink/renderer/core/frame/root_frame_viewport_test.cc index 7b160673f..b54147f 100644 --- a/third_party/blink/renderer/core/frame/root_frame_viewport_test.cc +++ b/third_party/blink/renderer/core/frame/root_frame_viewport_test.cc
@@ -25,7 +25,7 @@ namespace blink { -class ScrollableAreaStub : public GarbageCollectedFinalized<ScrollableAreaStub>, +class ScrollableAreaStub : public GarbageCollected<ScrollableAreaStub>, public ScrollableArea { USING_GARBAGE_COLLECTED_MIXIN(ScrollableAreaStub);
diff --git a/third_party/blink/renderer/core/frame/screen_orientation_controller.h b/third_party/blink/renderer/core/frame/screen_orientation_controller.h index 72d4495..4fe5279e 100644 --- a/third_party/blink/renderer/core/frame/screen_orientation_controller.h +++ b/third_party/blink/renderer/core/frame/screen_orientation_controller.h
@@ -20,7 +20,7 @@ // Callers of ScreenOrientationController::from() should always assume the // returned pointer can be nullptr. class CORE_EXPORT ScreenOrientationController - : public GarbageCollectedFinalized<ScreenOrientationController>, + : public GarbageCollected<ScreenOrientationController>, public Supplement<LocalFrame> { USING_GARBAGE_COLLECTED_MIXIN(ScreenOrientationController);
diff --git a/third_party/blink/renderer/core/frame/viewport_data.h b/third_party/blink/renderer/core/frame/viewport_data.h index 93c2580b..89a221c 100644 --- a/third_party/blink/renderer/core/frame/viewport_data.h +++ b/third_party/blink/renderer/core/frame/viewport_data.h
@@ -15,7 +15,7 @@ class Document; -class ViewportData final : public GarbageCollectedFinalized<ViewportData> { +class ViewportData final : public GarbageCollected<ViewportData> { public: ViewportData(Document& document); void Trace(Visitor* visitor);
diff --git a/third_party/blink/renderer/core/frame/visual_viewport.h b/third_party/blink/renderer/core/frame/visual_viewport.h index 3c92f0d..840b0c2 100644 --- a/third_party/blink/renderer/core/frame/visual_viewport.h +++ b/third_party/blink/renderer/core/frame/visual_viewport.h
@@ -100,7 +100,7 @@ // +- vertical_scrollbar_effect_node_ // class CORE_EXPORT VisualViewport final - : public GarbageCollectedFinalized<VisualViewport>, + : public GarbageCollected<VisualViewport>, public GraphicsLayerClient, public ScrollableArea { USING_GARBAGE_COLLECTED_MIXIN(VisualViewport);
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_base.h b/third_party/blink/renderer/core/frame/web_frame_widget_base.h index ff862b8..456e789 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_base.h +++ b/third_party/blink/renderer/core/frame/web_frame_widget_base.h
@@ -40,7 +40,7 @@ struct WebFloatPoint; class CORE_EXPORT WebFrameWidgetBase - : public GarbageCollectedFinalized<WebFrameWidgetBase>, + : public GarbageCollected<WebFrameWidgetBase>, public WebFrameWidget { public: explicit WebFrameWidgetBase(WebWidgetClient&);
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h index 9fbb94ef..34dae0a 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
@@ -90,7 +90,7 @@ // Implementation of WebFrame, note that this is a reference counted object. class CORE_EXPORT WebLocalFrameImpl final - : public GarbageCollectedFinalized<WebLocalFrameImpl>, + : public GarbageCollected<WebLocalFrameImpl>, public WebNavigationControl { public: // WebFrame methods:
diff --git a/third_party/blink/renderer/core/fullscreen/fullscreen.h b/third_party/blink/renderer/core/fullscreen/fullscreen.h index 7060ad3..87f1dd66 100644 --- a/third_party/blink/renderer/core/fullscreen/fullscreen.h +++ b/third_party/blink/renderer/core/fullscreen/fullscreen.h
@@ -50,10 +50,9 @@ // https://fullscreen.spec.whatwg.org/, especially its algorithms. It is a // Document supplement as each document has some fullscreen state, and to // actually enter and exit fullscreen it (indirectly) uses FullscreenController. -class CORE_EXPORT Fullscreen final - : public GarbageCollectedFinalized<Fullscreen>, - public Supplement<Document>, - public ContextLifecycleObserver { +class CORE_EXPORT Fullscreen final : public GarbageCollected<Fullscreen>, + public Supplement<Document>, + public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(Fullscreen); public: @@ -127,7 +126,7 @@ // Stores the pending request, promise and the type for executing // the asynchronous portion of the request. - class PendingRequest : public GarbageCollectedFinalized<PendingRequest> { + class PendingRequest : public GarbageCollected<PendingRequest> { public: PendingRequest(Element* element, RequestType type,
diff --git a/third_party/blink/renderer/core/html/anchor_element_metrics_sender.h b/third_party/blink/renderer/core/html/anchor_element_metrics_sender.h index 27e43ccc..0e5b247 100644 --- a/third_party/blink/renderer/core/html/anchor_element_metrics_sender.h +++ b/third_party/blink/renderer/core/html/anchor_element_metrics_sender.h
@@ -24,7 +24,7 @@ // AnchorElementMetricsSender is responsible to send anchor element metrics to // the browser process for a given document. class CORE_EXPORT AnchorElementMetricsSender final - : public GarbageCollectedFinalized<AnchorElementMetricsSender>, + : public GarbageCollected<AnchorElementMetricsSender>, public LocalFrameView::LifecycleNotificationObserver, public Supplement<Document> { USING_GARBAGE_COLLECTED_MIXIN(AnchorElementMetricsSender);
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h index e90ba9a..fe400b9 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h
@@ -34,7 +34,7 @@ constexpr const char* kRGBA16ImagePixelFormatName = "uint16"; class CORE_EXPORT CanvasAsyncBlobCreator - : public GarbageCollectedFinalized<CanvasAsyncBlobCreator> { + : public GarbageCollected<CanvasAsyncBlobCreator> { public: // This enum is used to back an UMA histogram, and should therefore be treated // as append-only. Idle tasks are not implemented for some image types.
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_font_cache.h b/third_party/blink/renderer/core/html/canvas/canvas_font_cache.h index c742018..1976e14 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_font_cache.h +++ b/third_party/blink/renderer/core/html/canvas/canvas_font_cache.h
@@ -23,7 +23,7 @@ class HTMLCanvasElement; class CORE_EXPORT CanvasFontCache final - : public GarbageCollectedFinalized<CanvasFontCache>, + : public GarbageCollected<CanvasFontCache>, public Thread::TaskObserver { USING_PRE_FINALIZER(CanvasFontCache, Dispose);
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_definition.h b/third_party/blink/renderer/core/html/custom/custom_element_definition.h index a996c82..e2c7385 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element_definition.h +++ b/third_party/blink/renderer/core/html/custom/custom_element_definition.h
@@ -33,7 +33,7 @@ }; class CORE_EXPORT CustomElementDefinition - : public GarbageCollectedFinalized<CustomElementDefinition>, + : public GarbageCollected<CustomElementDefinition>, public NameClient { public: // Each definition has an ID that is unique within the
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_reaction.h b/third_party/blink/renderer/core/html/custom/custom_element_reaction.h index d83fecf..d3f60588 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element_reaction.h +++ b/third_party/blink/renderer/core/html/custom/custom_element_reaction.h
@@ -15,7 +15,7 @@ class Element; class CORE_EXPORT CustomElementReaction - : public GarbageCollectedFinalized<CustomElementReaction> { + : public GarbageCollected<CustomElementReaction> { public: CustomElementReaction(CustomElementDefinition&); virtual ~CustomElementReaction() = default;
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_reaction_queue.h b/third_party/blink/renderer/core/html/custom/custom_element_reaction_queue.h index 04910fa..34dfc38 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element_reaction_queue.h +++ b/third_party/blink/renderer/core/html/custom/custom_element_reaction_queue.h
@@ -15,7 +15,7 @@ class Element; class CORE_EXPORT CustomElementReactionQueue final - : public GarbageCollectedFinalized<CustomElementReactionQueue> { + : public GarbageCollected<CustomElementReactionQueue> { public: CustomElementReactionQueue(); ~CustomElementReactionQueue();
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_reaction_test_helpers.h b/third_party/blink/renderer/core/html/custom/custom_element_reaction_test_helpers.h index b240c4d..d2f544c 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element_reaction_test_helpers.h +++ b/third_party/blink/renderer/core/html/custom/custom_element_reaction_test_helpers.h
@@ -22,7 +22,7 @@ class Element; -class Command : public GarbageCollectedFinalized<Command> { +class Command : public GarbageCollected<Command> { public: Command() = default; virtual ~Command() = default;
diff --git a/third_party/blink/renderer/core/html/custom/v0_custom_element_definition.h b/third_party/blink/renderer/core/html/custom/v0_custom_element_definition.h index e340310..79b5530a 100644 --- a/third_party/blink/renderer/core/html/custom/v0_custom_element_definition.h +++ b/third_party/blink/renderer/core/html/custom/v0_custom_element_definition.h
@@ -37,7 +37,7 @@ namespace blink { class V0CustomElementDefinition final - : public GarbageCollectedFinalized<V0CustomElementDefinition> { + : public GarbageCollected<V0CustomElementDefinition> { public: V0CustomElementDefinition(const V0CustomElementDescriptor&, V0CustomElementLifecycleCallbacks*);
diff --git a/third_party/blink/renderer/core/html/custom/v0_custom_element_lifecycle_callbacks.h b/third_party/blink/renderer/core/html/custom/v0_custom_element_lifecycle_callbacks.h index 6e3ed383..ea4407a 100644 --- a/third_party/blink/renderer/core/html/custom/v0_custom_element_lifecycle_callbacks.h +++ b/third_party/blink/renderer/core/html/custom/v0_custom_element_lifecycle_callbacks.h
@@ -39,7 +39,7 @@ class Element; class V0CustomElementLifecycleCallbacks - : public GarbageCollectedFinalized<V0CustomElementLifecycleCallbacks> { + : public GarbageCollected<V0CustomElementLifecycleCallbacks> { public: virtual ~V0CustomElementLifecycleCallbacks() = default;
diff --git a/third_party/blink/renderer/core/html/custom/v0_custom_element_microtask_queue_base.h b/third_party/blink/renderer/core/html/custom/v0_custom_element_microtask_queue_base.h index 81efcc3..8855eee 100644 --- a/third_party/blink/renderer/core/html/custom/v0_custom_element_microtask_queue_base.h +++ b/third_party/blink/renderer/core/html/custom/v0_custom_element_microtask_queue_base.h
@@ -13,7 +13,7 @@ namespace blink { class V0CustomElementMicrotaskQueueBase - : public GarbageCollectedFinalized<V0CustomElementMicrotaskQueueBase> { + : public GarbageCollected<V0CustomElementMicrotaskQueueBase> { public: virtual ~V0CustomElementMicrotaskQueueBase() = default;
diff --git a/third_party/blink/renderer/core/html/custom/v0_custom_element_microtask_step.h b/third_party/blink/renderer/core/html/custom/v0_custom_element_microtask_step.h index c9f1cfc..27f49c7 100644 --- a/third_party/blink/renderer/core/html/custom/v0_custom_element_microtask_step.h +++ b/third_party/blink/renderer/core/html/custom/v0_custom_element_microtask_step.h
@@ -37,7 +37,7 @@ namespace blink { class V0CustomElementMicrotaskStep - : public GarbageCollectedFinalized<V0CustomElementMicrotaskStep> { + : public GarbageCollected<V0CustomElementMicrotaskStep> { public: V0CustomElementMicrotaskStep() = default; virtual ~V0CustomElementMicrotaskStep() = default;
diff --git a/third_party/blink/renderer/core/html/custom/v0_custom_element_observer.h b/third_party/blink/renderer/core/html/custom/v0_custom_element_observer.h index 31888035..1c95d5f 100644 --- a/third_party/blink/renderer/core/html/custom/v0_custom_element_observer.h +++ b/third_party/blink/renderer/core/html/custom/v0_custom_element_observer.h
@@ -39,7 +39,7 @@ class Element; class V0CustomElementObserver - : public GarbageCollectedFinalized<V0CustomElementObserver> { + : public GarbageCollected<V0CustomElementObserver> { public: virtual ~V0CustomElementObserver() = default;
diff --git a/third_party/blink/renderer/core/html/custom/v0_custom_element_processing_step.h b/third_party/blink/renderer/core/html/custom/v0_custom_element_processing_step.h index 145b69bb..64e2314b 100644 --- a/third_party/blink/renderer/core/html/custom/v0_custom_element_processing_step.h +++ b/third_party/blink/renderer/core/html/custom/v0_custom_element_processing_step.h
@@ -37,8 +37,7 @@ namespace blink { class V0CustomElementProcessingStep - : public GarbageCollectedFinalized<V0CustomElementProcessingStep> { - + : public GarbageCollected<V0CustomElementProcessingStep> { public: V0CustomElementProcessingStep() = default;
diff --git a/third_party/blink/renderer/core/html/custom/v0_custom_element_registration_context.h b/third_party/blink/renderer/core/html/custom/v0_custom_element_registration_context.h index 83c4f53..b810d5c0 100644 --- a/third_party/blink/renderer/core/html/custom/v0_custom_element_registration_context.h +++ b/third_party/blink/renderer/core/html/custom/v0_custom_element_registration_context.h
@@ -43,7 +43,7 @@ class CustomElementRegistry; class V0CustomElementRegistrationContext final - : public GarbageCollectedFinalized<V0CustomElementRegistrationContext> { + : public GarbageCollected<V0CustomElementRegistrationContext> { public: V0CustomElementRegistrationContext(); ~V0CustomElementRegistrationContext() = default;
diff --git a/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.h b/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.h index 78e4b1e4..73a7bda 100644 --- a/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.h +++ b/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.h
@@ -35,7 +35,7 @@ namespace blink { class ChooserOnlyTemporalInputTypeView final - : public GarbageCollectedFinalized<ChooserOnlyTemporalInputTypeView>, + : public GarbageCollected<ChooserOnlyTemporalInputTypeView>, public KeyboardClickableInputTypeView, public DateTimeChooserClient { USING_GARBAGE_COLLECTED_MIXIN(ChooserOnlyTemporalInputTypeView);
diff --git a/third_party/blink/renderer/core/html/forms/color_chooser_ui_controller.h b/third_party/blink/renderer/core/html/forms/color_chooser_ui_controller.h index 7cca96c..6d0012a 100644 --- a/third_party/blink/renderer/core/html/forms/color_chooser_ui_controller.h +++ b/third_party/blink/renderer/core/html/forms/color_chooser_ui_controller.h
@@ -41,7 +41,7 @@ class LocalFrame; class CORE_EXPORT ColorChooserUIController - : public GarbageCollectedFinalized<ColorChooserUIController>, + : public GarbageCollected<ColorChooserUIController>, public mojom::blink::ColorChooserClient, public ColorChooser { USING_GARBAGE_COLLECTED_MIXIN(ColorChooserUIController);
diff --git a/third_party/blink/renderer/core/html/forms/date_time_chooser.h b/third_party/blink/renderer/core/html/forms/date_time_chooser.h index c6c5e74..1d6a9763 100644 --- a/third_party/blink/renderer/core/html/forms/date_time_chooser.h +++ b/third_party/blink/renderer/core/html/forms/date_time_chooser.h
@@ -69,8 +69,7 @@ }; // For pickers like color pickers and date pickers. -class CORE_EXPORT DateTimeChooser - : public GarbageCollectedFinalized<DateTimeChooser> { +class CORE_EXPORT DateTimeChooser : public GarbageCollected<DateTimeChooser> { public: virtual ~DateTimeChooser();
diff --git a/third_party/blink/renderer/core/html/forms/external_date_time_chooser_test.cc b/third_party/blink/renderer/core/html/forms/external_date_time_chooser_test.cc index fce4e71a..42aa779 100644 --- a/third_party/blink/renderer/core/html/forms/external_date_time_chooser_test.cc +++ b/third_party/blink/renderer/core/html/forms/external_date_time_chooser_test.cc
@@ -15,7 +15,7 @@ class ExternalDateTimeChooserTest : public testing::Test {}; class TestDateTimeChooserClient final - : public GarbageCollectedFinalized<TestDateTimeChooserClient>, + : public GarbageCollected<TestDateTimeChooserClient>, public DateTimeChooserClient { USING_GARBAGE_COLLECTED_MIXIN(TestDateTimeChooserClient);
diff --git a/third_party/blink/renderer/core/html/forms/form_controller.cc b/third_party/blink/renderer/core/html/forms/form_controller.cc index 8290707..a7643ab 100644 --- a/third_party/blink/renderer/core/html/forms/form_controller.cc +++ b/third_party/blink/renderer/core/html/forms/form_controller.cc
@@ -316,9 +316,7 @@ // ---------------------------------------------------------------------------- -class FormKeyGenerator final - : public GarbageCollectedFinalized<FormKeyGenerator> { - +class FormKeyGenerator final : public GarbageCollected<FormKeyGenerator> { public: FormKeyGenerator() = default;
diff --git a/third_party/blink/renderer/core/html/forms/form_controller.h b/third_party/blink/renderer/core/html/forms/form_controller.h index 4a520187..540ccf7 100644 --- a/third_party/blink/renderer/core/html/forms/form_controller.h +++ b/third_party/blink/renderer/core/html/forms/form_controller.h
@@ -78,8 +78,7 @@ using SavedFormStateMap = HashMap<AtomicString, std::unique_ptr<SavedFormState>>; -class CORE_EXPORT DocumentState final - : public GarbageCollectedFinalized<DocumentState> { +class CORE_EXPORT DocumentState final : public GarbageCollected<DocumentState> { public: DocumentState(Document& document); void Trace(Visitor*); @@ -95,7 +94,7 @@ }; class CORE_EXPORT FormController final - : public GarbageCollectedFinalized<FormController> { + : public GarbageCollected<FormController> { public: FormController(Document& document); ~FormController();
diff --git a/third_party/blink/renderer/core/html/forms/form_data.h b/third_party/blink/renderer/core/html/forms/form_data.h index 625cb5e..4ebb24e3 100644 --- a/third_party/blink/renderer/core/html/forms/form_data.h +++ b/third_party/blink/renderer/core/html/forms/form_data.h
@@ -119,8 +119,7 @@ // Represents entry, which is a pair of a name and a value. // https://xhr.spec.whatwg.org/#concept-formdata-entry // Entry objects are immutable. -class FormData::Entry final - : public GarbageCollectedFinalized<FormData::Entry> { +class FormData::Entry final : public GarbageCollected<FormData::Entry> { public: Entry(const String& name, const String& value); Entry(const String& name, Blob* blob, const String& filename);
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element_test.cc b/third_party/blink/renderer/core/html/forms/html_form_control_element_test.cc index 9d55510..f3f5c1ca 100644 --- a/third_party/blink/renderer/core/html/forms/html_form_control_element_test.cc +++ b/third_party/blink/renderer/core/html/forms/html_form_control_element_test.cc
@@ -18,7 +18,7 @@ namespace { class MockFormValidationMessageClient - : public GarbageCollectedFinalized<MockFormValidationMessageClient>, + : public GarbageCollected<MockFormValidationMessageClient>, public ValidationMessageClient { USING_GARBAGE_COLLECTED_MIXIN(MockFormValidationMessageClient);
diff --git a/third_party/blink/renderer/core/html/forms/input_type.h b/third_party/blink/renderer/core/html/forms/input_type.h index e427d8e..bce5e29 100644 --- a/third_party/blink/renderer/core/html/forms/input_type.h +++ b/third_party/blink/renderer/core/html/forms/input_type.h
@@ -52,7 +52,7 @@ // An InputType object represents the type-specific part of an HTMLInputElement. // Do not expose instances of InputType and classes derived from it to classes // other than HTMLInputElement. -class CORE_EXPORT InputType : public GarbageCollectedFinalized<InputType> { +class CORE_EXPORT InputType : public GarbageCollected<InputType> { public: static InputType* Create(HTMLInputElement&, const AtomicString&); static const AtomicString& NormalizeTypeName(const AtomicString&);
diff --git a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h index e0392ea..7ec1c40 100644 --- a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h +++ b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h
@@ -44,7 +44,7 @@ struct DateTimeChooserParameters; class MultipleFieldsTemporalInputTypeView final - : public GarbageCollectedFinalized<MultipleFieldsTemporalInputTypeView>, + : public GarbageCollected<MultipleFieldsTemporalInputTypeView>, public InputTypeView, protected DateTimeEditElement::EditControlOwner, protected PickerIndicatorElement::PickerIndicatorOwner,
diff --git a/third_party/blink/renderer/core/html/forms/popup_menu.h b/third_party/blink/renderer/core/html/forms/popup_menu.h index 8a14dcb8..af7e1aa 100644 --- a/third_party/blink/renderer/core/html/forms/popup_menu.h +++ b/third_party/blink/renderer/core/html/forms/popup_menu.h
@@ -26,7 +26,7 @@ namespace blink { -class PopupMenu : public GarbageCollectedFinalized<PopupMenu> { +class PopupMenu : public GarbageCollected<PopupMenu> { public: virtual ~PopupMenu() = default; virtual void Trace(Visitor* visitor) {}
diff --git a/third_party/blink/renderer/core/html/imports/html_import.h b/third_party/blink/renderer/core/html/imports/html_import.h index 45078adb..cc874f3 100644 --- a/third_party/blink/renderer/core/html/imports/html_import.h +++ b/third_party/blink/renderer/core/html/imports/html_import.h
@@ -43,7 +43,7 @@ // The superclass of HTMLImportTreeRoot and HTMLImportChild // This represents the import tree data structure. -class HTMLImport : public GarbageCollectedFinalized<HTMLImport>, +class HTMLImport : public GarbageCollected<HTMLImport>, public TreeNode<HTMLImport> { public: enum SyncMode { kSync = 0, kAsync = 1 };
diff --git a/third_party/blink/renderer/core/html/imports/html_import_loader.h b/third_party/blink/renderer/core/html/imports/html_import_loader.h index 3034cc5..cbae34ab 100644 --- a/third_party/blink/renderer/core/html/imports/html_import_loader.h +++ b/third_party/blink/renderer/core/html/imports/html_import_loader.h
@@ -47,10 +47,9 @@ // Owning imported Document lifetime. It also implements RawResourceClient // to feed fetched bytes to the DocumentParser of the imported // document. HTMLImportLoader is owned by HTMLImportsController. -class HTMLImportLoader final - : public GarbageCollectedFinalized<HTMLImportLoader>, - public RawResourceClient, - public DocumentParserClient { +class HTMLImportLoader final : public GarbageCollected<HTMLImportLoader>, + public RawResourceClient, + public DocumentParserClient { USING_GARBAGE_COLLECTED_MIXIN(HTMLImportLoader); public:
diff --git a/third_party/blink/renderer/core/html/lazy_load_frame_observer.h b/third_party/blink/renderer/core/html/lazy_load_frame_observer.h index 0651302..eec5177 100644 --- a/third_party/blink/renderer/core/html/lazy_load_frame_observer.h +++ b/third_party/blink/renderer/core/html/lazy_load_frame_observer.h
@@ -21,7 +21,7 @@ class Visitor; class LazyLoadFrameObserver final - : public GarbageCollectedFinalized<LazyLoadFrameObserver> { + : public GarbageCollected<LazyLoadFrameObserver> { public: // This enum is logged to histograms, so values should not be reordered or // reused, and it must match the corresponding enum
diff --git a/third_party/blink/renderer/core/html/link_resource.h b/third_party/blink/renderer/core/html/link_resource.h index d98f8b6..912368c 100644 --- a/third_party/blink/renderer/core/html/link_resource.h +++ b/third_party/blink/renderer/core/html/link_resource.h
@@ -42,9 +42,7 @@ class HTMLLinkElement; class LocalFrame; -class CORE_EXPORT LinkResource - : public GarbageCollectedFinalized<LinkResource> { - +class CORE_EXPORT LinkResource : public GarbageCollected<LinkResource> { public: enum LinkResourceType { kStyle, kImport, kManifest, kOther };
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h index ca75a83..71137a0 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.h +++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -686,9 +686,8 @@ // AudioClientImpl wraps an AudioSourceProviderClient. // When the audio format is known, Chromium calls setFormat(). - class AudioClientImpl final - : public GarbageCollectedFinalized<AudioClientImpl>, - public WebAudioSourceProviderClient { + class AudioClientImpl final : public GarbageCollected<AudioClientImpl>, + public WebAudioSourceProviderClient { public: explicit AudioClientImpl(AudioSourceProviderClient* client) : client_(client) {}
diff --git a/third_party/blink/renderer/core/html/parser/html_parser_scheduler.h b/third_party/blink/renderer/core/html/parser/html_parser_scheduler.h index d947fcd..9c63198 100644 --- a/third_party/blink/renderer/core/html/parser/html_parser_scheduler.h +++ b/third_party/blink/renderer/core/html/parser/html_parser_scheduler.h
@@ -54,8 +54,7 @@ size_t processed_element_tokens_; }; -class HTMLParserScheduler final - : public GarbageCollectedFinalized<HTMLParserScheduler> { +class HTMLParserScheduler final : public GarbageCollected<HTMLParserScheduler> { public: HTMLParserScheduler(HTMLDocumentParser*, scoped_refptr<base::SingleThreadTaskRunner>);
diff --git a/third_party/blink/renderer/core/html/parser/html_stack_item.h b/third_party/blink/renderer/core/html/parser/html_stack_item.h index bf566ec..3d7bc5a 100644 --- a/third_party/blink/renderer/core/html/parser/html_stack_item.h +++ b/third_party/blink/renderer/core/html/parser/html_stack_item.h
@@ -37,7 +37,7 @@ class ContainerNode; -class HTMLStackItem final : public GarbageCollectedFinalized<HTMLStackItem> { +class HTMLStackItem final : public GarbageCollected<HTMLStackItem> { public: enum ItemType { kItemForContextElement, kItemForDocumentFragmentNode };
diff --git a/third_party/blink/renderer/core/html/parser/html_tree_builder.h b/third_party/blink/renderer/core/html/parser/html_tree_builder.h index af7b90d7..64dc15e 100644 --- a/third_party/blink/renderer/core/html/parser/html_tree_builder.h +++ b/third_party/blink/renderer/core/html/parser/html_tree_builder.h
@@ -45,8 +45,7 @@ class HTMLDocument; class HTMLDocumentParser; -class HTMLTreeBuilder final - : public GarbageCollectedFinalized<HTMLTreeBuilder> { +class HTMLTreeBuilder final : public GarbageCollected<HTMLTreeBuilder> { public: // HTMLTreeBuilder can be created for non-HTMLDocument (XHTMLDocument) from // editing code.
diff --git a/third_party/blink/renderer/core/html/portal/portal_contents.h b/third_party/blink/renderer/core/html/portal/portal_contents.h index 2fac26b2..a9d5d993 100644 --- a/third_party/blink/renderer/core/html/portal/portal_contents.h +++ b/third_party/blink/renderer/core/html/portal/portal_contents.h
@@ -35,7 +35,7 @@ // connection to the browser-side portal state alive (so that the reply can be // received), but this should not prevent the <portal> element from being reused // in the meantime. -class PortalContents : public GarbageCollectedFinalized<PortalContents>, +class PortalContents : public GarbageCollected<PortalContents>, public mojom::blink::PortalClient { public: PortalContents(
diff --git a/third_party/blink/renderer/core/html/track/cue_timeline.h b/third_party/blink/renderer/core/html/track/cue_timeline.h index ad33240..ec9d955 100644 --- a/third_party/blink/renderer/core/html/track/cue_timeline.h +++ b/third_party/blink/renderer/core/html/track/cue_timeline.h
@@ -28,7 +28,7 @@ // This class manages the timeline and rendering updates of cues associated // with TextTracks. Owned by a HTMLMediaElement. -class CueTimeline final : public GarbageCollectedFinalized<CueTimeline> { +class CueTimeline final : public GarbageCollected<CueTimeline> { public: CueTimeline(HTMLMediaElement&);
diff --git a/third_party/blink/renderer/core/html/track/vtt/vtt_parser.h b/third_party/blink/renderer/core/html/track/vtt/vtt_parser.h index 4a4196d..0e8adb4 100644 --- a/third_party/blink/renderer/core/html/track/vtt/vtt_parser.h +++ b/third_party/blink/renderer/core/html/track/vtt/vtt_parser.h
@@ -59,7 +59,7 @@ // Implementation of the WebVTT parser algorithm. // https://w3c.github.io/webvtt/#webvtt-parser-algorithm -class VTTParser final : public GarbageCollectedFinalized<VTTParser> { +class VTTParser final : public GarbageCollected<VTTParser> { public: enum ParseState { kInitial,
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.h b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.h index 465ccbfa..60bbce8 100644 --- a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.h +++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.h
@@ -61,7 +61,7 @@ class ImageBitmapOptions; class ImageBitmapFactories final - : public GarbageCollectedFinalized<ImageBitmapFactories>, + : public GarbageCollected<ImageBitmapFactories>, public Supplement<LocalDOMWindow>, public Supplement<WorkerGlobalScope>, public NameClient { @@ -102,10 +102,9 @@ } private: - class ImageBitmapLoader final - : public GarbageCollectedFinalized<ImageBitmapLoader>, - public ContextLifecycleObserver, - public FileReaderLoaderClient { + class ImageBitmapLoader final : public GarbageCollected<ImageBitmapLoader>, + public ContextLifecycleObserver, + public FileReaderLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(ImageBitmapLoader); public:
diff --git a/third_party/blink/renderer/core/input/event_handler.h b/third_party/blink/renderer/core/input/event_handler.h index 26a8dca..69d25d0f 100644 --- a/third_party/blink/renderer/core/input/event_handler.h +++ b/third_party/blink/renderer/core/input/event_handler.h
@@ -79,8 +79,7 @@ class WebMouseWheelEvent; // Handles events for Pointers (Mouse/Touch), HitTests, DragAndDrop, etc. -class CORE_EXPORT EventHandler final - : public GarbageCollectedFinalized<EventHandler> { +class CORE_EXPORT EventHandler final : public GarbageCollected<EventHandler> { public: explicit EventHandler(LocalFrame&); void Trace(blink::Visitor*);
diff --git a/third_party/blink/renderer/core/input/gesture_manager.h b/third_party/blink/renderer/core/input/gesture_manager.h index 9e33609cb..6499ba3 100644 --- a/third_party/blink/renderer/core/input/gesture_manager.h +++ b/third_party/blink/renderer/core/input/gesture_manager.h
@@ -23,7 +23,7 @@ // This class takes care of gestures and delegating the action based on the // gesture to the responsible class. class CORE_EXPORT GestureManager final - : public GarbageCollectedFinalized<GestureManager> { + : public GarbageCollected<GestureManager> { public: GestureManager(LocalFrame&, ScrollManager&,
diff --git a/third_party/blink/renderer/core/input/keyboard_event_manager.h b/third_party/blink/renderer/core/input/keyboard_event_manager.h index 31a6ec3e..15d3b7b9 100644 --- a/third_party/blink/renderer/core/input/keyboard_event_manager.h +++ b/third_party/blink/renderer/core/input/keyboard_event_manager.h
@@ -25,7 +25,7 @@ enum class OverrideCapsLockState { kDefault, kOn, kOff }; class CORE_EXPORT KeyboardEventManager final - : public GarbageCollectedFinalized<KeyboardEventManager> { + : public GarbageCollected<KeyboardEventManager> { public: static const int kAccessKeyModifiers = // TODO(crbug.com/618397): Add a settings to control this behavior.
diff --git a/third_party/blink/renderer/core/input/mouse_event_manager.h b/third_party/blink/renderer/core/input/mouse_event_manager.h index feee8f95..aa78ae0 100644 --- a/third_party/blink/renderer/core/input/mouse_event_manager.h +++ b/third_party/blink/renderer/core/input/mouse_event_manager.h
@@ -33,7 +33,7 @@ // This class takes care of dispatching all mouse events and keeps track of // positions and states of mouse. class CORE_EXPORT MouseEventManager final - : public GarbageCollectedFinalized<MouseEventManager>, + : public GarbageCollected<MouseEventManager>, public SynchronousMutationObserver { USING_GARBAGE_COLLECTED_MIXIN(MouseEventManager);
diff --git a/third_party/blink/renderer/core/input/mouse_wheel_event_manager.h b/third_party/blink/renderer/core/input/mouse_wheel_event_manager.h index 49fa57a..80f2fb7 100644 --- a/third_party/blink/renderer/core/input/mouse_wheel_event_manager.h +++ b/third_party/blink/renderer/core/input/mouse_wheel_event_manager.h
@@ -19,7 +19,7 @@ class WebMouseWheelEvent; class MouseWheelEventManager final - : public GarbageCollectedFinalized<MouseWheelEventManager> { + : public GarbageCollected<MouseWheelEventManager> { public: explicit MouseWheelEventManager(LocalFrame&); void Trace(blink::Visitor*);
diff --git a/third_party/blink/renderer/core/input/pointer_event_manager.h b/third_party/blink/renderer/core/input/pointer_event_manager.h index 0ea444c6..1da76058 100644 --- a/third_party/blink/renderer/core/input/pointer_event_manager.h +++ b/third_party/blink/renderer/core/input/pointer_event_manager.h
@@ -25,7 +25,7 @@ // This class takes care of dispatching all pointer events and keeps track of // properties of active pointer events. class CORE_EXPORT PointerEventManager final - : public GarbageCollectedFinalized<PointerEventManager> { + : public GarbageCollected<PointerEventManager> { public: PointerEventManager(LocalFrame&, MouseEventManager&); void Trace(blink::Visitor*);
diff --git a/third_party/blink/renderer/core/input/scroll_manager.h b/third_party/blink/renderer/core/input/scroll_manager.h index 4f2a562e..e86a8510 100644 --- a/third_party/blink/renderer/core/input/scroll_manager.h +++ b/third_party/blink/renderer/core/input/scroll_manager.h
@@ -37,9 +37,8 @@ // This class takes care of scrolling and resizing and the related states. The // user action that causes scrolling or resizing is determined in other *Manager // classes and they call into this class for doing the work. -class CORE_EXPORT ScrollManager - : public GarbageCollectedFinalized<ScrollManager>, - public cc::SnapFlingClient { +class CORE_EXPORT ScrollManager : public GarbageCollected<ScrollManager>, + public cc::SnapFlingClient { public: explicit ScrollManager(LocalFrame&); virtual ~ScrollManager() = default;
diff --git a/third_party/blink/renderer/core/input/touch_event_manager.h b/third_party/blink/renderer/core/input/touch_event_manager.h index 7f6d37db..f55565f 100644 --- a/third_party/blink/renderer/core/input/touch_event_manager.h +++ b/third_party/blink/renderer/core/input/touch_event_manager.h
@@ -27,7 +27,7 @@ // This class takes care of dispatching all touch events and // maintaining related states. class CORE_EXPORT TouchEventManager final - : public GarbageCollectedFinalized<TouchEventManager> { + : public GarbageCollected<TouchEventManager> { public: explicit TouchEventManager(LocalFrame&); @@ -49,7 +49,7 @@ // Class represending one touch point event with its coalesced events and // related attributes. class TouchPointAttributes final - : public GarbageCollectedFinalized<TouchPointAttributes> { + : public GarbageCollected<TouchPointAttributes> { public: void Trace(blink::Visitor* visitor) { visitor->Trace(target_); }
diff --git a/third_party/blink/renderer/core/inspector/console_message.h b/third_party/blink/renderer/core/inspector/console_message.h index ecaf42b..87abf1e 100644 --- a/third_party/blink/renderer/core/inspector/console_message.h +++ b/third_party/blink/renderer/core/inspector/console_message.h
@@ -21,7 +21,7 @@ struct WebConsoleMessage; class CORE_EXPORT ConsoleMessage final - : public GarbageCollectedFinalized<ConsoleMessage> { + : public GarbageCollected<ConsoleMessage> { public: // Location must be non-null. static ConsoleMessage* Create(mojom::ConsoleMessageSource,
diff --git a/third_party/blink/renderer/core/inspector/dev_tools_emulator.h b/third_party/blink/renderer/core/inspector/dev_tools_emulator.h index fc743bd..dfc211d 100644 --- a/third_party/blink/renderer/core/inspector/dev_tools_emulator.h +++ b/third_party/blink/renderer/core/inspector/dev_tools_emulator.h
@@ -22,7 +22,7 @@ class WebViewImpl; class CORE_EXPORT DevToolsEmulator final - : public GarbageCollectedFinalized<DevToolsEmulator> { + : public GarbageCollected<DevToolsEmulator> { public: explicit DevToolsEmulator(WebViewImpl*); ~DevToolsEmulator();
diff --git a/third_party/blink/renderer/core/inspector/devtools_agent.h b/third_party/blink/renderer/core/inspector/devtools_agent.h index 509e9e8..d803169 100644 --- a/third_party/blink/renderer/core/inspector/devtools_agent.h +++ b/third_party/blink/renderer/core/inspector/devtools_agent.h
@@ -29,9 +29,8 @@ class WorkerThread; struct WorkerDevToolsParams; -class CORE_EXPORT DevToolsAgent - : public GarbageCollectedFinalized<DevToolsAgent>, - public mojom::blink::DevToolsAgent { +class CORE_EXPORT DevToolsAgent : public GarbageCollected<DevToolsAgent>, + public mojom::blink::DevToolsAgent { public: class Client { public:
diff --git a/third_party/blink/renderer/core/inspector/devtools_session.h b/third_party/blink/renderer/core/inspector/devtools_session.h index e8555f5..13529e15 100644 --- a/third_party/blink/renderer/core/inspector/devtools_session.h +++ b/third_party/blink/renderer/core/inspector/devtools_session.h
@@ -27,11 +27,10 @@ class InspectorAgent; class LocalFrame; -class CORE_EXPORT DevToolsSession - : public GarbageCollectedFinalized<DevToolsSession>, - public mojom::blink::DevToolsSession, - public protocol::FrontendChannel, - public v8_inspector::V8Inspector::Channel { +class CORE_EXPORT DevToolsSession : public GarbageCollected<DevToolsSession>, + public mojom::blink::DevToolsSession, + public protocol::FrontendChannel, + public v8_inspector::V8Inspector::Channel { public: DevToolsSession( DevToolsAgent*,
diff --git a/third_party/blink/renderer/core/inspector/dom_patch_support.h b/third_party/blink/renderer/core/inspector/dom_patch_support.h index 4673de76..fcfb8c3 100644 --- a/third_party/blink/renderer/core/inspector/dom_patch_support.h +++ b/third_party/blink/renderer/core/inspector/dom_patch_support.h
@@ -55,7 +55,7 @@ Node* PatchNode(Node*, const String& markup, ExceptionState&); private: - class Digest final : public GarbageCollectedFinalized<Digest> { + class Digest final : public GarbageCollected<Digest> { public: explicit Digest(Node* node) : node_(node) {} void Trace(blink::Visitor*);
diff --git a/third_party/blink/renderer/core/inspector/inspected_frames.h b/third_party/blink/renderer/core/inspector/inspected_frames.h index 0e2eda6..5885c32f 100644 --- a/third_party/blink/renderer/core/inspector/inspected_frames.h +++ b/third_party/blink/renderer/core/inspector/inspected_frames.h
@@ -16,7 +16,7 @@ class LocalFrame; class CORE_EXPORT InspectedFrames final - : public GarbageCollectedFinalized<InspectedFrames> { + : public GarbageCollected<InspectedFrames> { public: class CORE_EXPORT Iterator { STACK_ALLOCATED();
diff --git a/third_party/blink/renderer/core/inspector/inspector_base_agent.h b/third_party/blink/renderer/core/inspector/inspector_base_agent.h index 146575a..f91d1e5 100644 --- a/third_party/blink/renderer/core/inspector/inspector_base_agent.h +++ b/third_party/blink/renderer/core/inspector/inspector_base_agent.h
@@ -43,8 +43,7 @@ class LocalFrame; -class CORE_EXPORT InspectorAgent - : public GarbageCollectedFinalized<InspectorAgent> { +class CORE_EXPORT InspectorAgent : public GarbageCollected<InspectorAgent> { public: InspectorAgent() = default; virtual ~InspectorAgent() = default;
diff --git a/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc b/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc index 35a79d3..c66835d 100644 --- a/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc
@@ -102,7 +102,7 @@ } // namespace class InspectorRevalidateDOMTask final - : public GarbageCollectedFinalized<InspectorRevalidateDOMTask> { + : public GarbageCollected<InspectorRevalidateDOMTask> { public: explicit InspectorRevalidateDOMTask(InspectorDOMAgent*); void ScheduleStyleAttrRevalidationFor(Element*);
diff --git a/third_party/blink/renderer/core/inspector/inspector_dom_agent.h b/third_party/blink/renderer/core/inspector/inspector_dom_agent.h index d3dbf93..39f63d3 100644 --- a/third_party/blink/renderer/core/inspector/inspector_dom_agent.h +++ b/third_party/blink/renderer/core/inspector/inspector_dom_agent.h
@@ -81,7 +81,7 @@ }; class CORE_EXPORT InspectorSourceLocation final - : public GarbageCollectedFinalized<InspectorSourceLocation> { + : public GarbageCollected<InspectorSourceLocation> { public: InspectorSourceLocation(std::unique_ptr<SourceLocation> source_location) : source_location_(std::move(source_location)) {}
diff --git a/third_party/blink/renderer/core/inspector/inspector_history.h b/third_party/blink/renderer/core/inspector/inspector_history.h index d45e3ed..c94ece9 100644 --- a/third_party/blink/renderer/core/inspector/inspector_history.h +++ b/third_party/blink/renderer/core/inspector/inspector_history.h
@@ -43,7 +43,7 @@ class InspectorHistory final : public GarbageCollected<InspectorHistory> { public: - class Action : public GarbageCollectedFinalized<Action> { + class Action : public GarbageCollected<Action> { public: explicit Action(const String& name); virtual ~Action();
diff --git a/third_party/blink/renderer/core/inspector/inspector_media_context_impl.h b/third_party/blink/renderer/core/inspector/inspector_media_context_impl.h index dbf5bb4..f863a1e 100644 --- a/third_party/blink/renderer/core/inspector/inspector_media_context_impl.h +++ b/third_party/blink/renderer/core/inspector/inspector_media_context_impl.h
@@ -21,7 +21,7 @@ class Document; class HTMLMediaElement; -struct MediaPlayer final : public GarbageCollectedFinalized<MediaPlayer> { +struct MediaPlayer final : public GarbageCollected<MediaPlayer> { void Trace(blink::Visitor*) {} WebString player_id; @@ -30,7 +30,7 @@ }; class CORE_EXPORT MediaInspectorContextImpl final - : public GarbageCollectedFinalized<MediaInspectorContextImpl>, + : public GarbageCollected<MediaInspectorContextImpl>, public Supplement<LocalFrame>, public MediaInspectorContext { USING_GARBAGE_COLLECTED_MIXIN(MediaInspectorContextImpl); @@ -54,7 +54,7 @@ void NotifyPlayerEvents(WebString, InspectorPlayerEvents) override; void SetPlayerProperties(WebString, InspectorPlayerProperties) override; - // GarbageCollectedFinalized methods. + // GarbageCollected methods. void Trace(blink::Visitor*) override; Vector<WebString> GetAllPlayerIds();
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h index 6c9175f2..f03de4b7e 100644 --- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h +++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
@@ -72,7 +72,7 @@ using OverlayFrontend = protocol::Overlay::Metainfo::FrontendClass; -class CORE_EXPORT InspectTool : public GarbageCollectedFinalized<InspectTool> { +class CORE_EXPORT InspectTool : public GarbageCollected<InspectTool> { public: virtual ~InspectTool() = default; void Init(InspectorOverlayAgent* overlay, OverlayFrontend* frontend);
diff --git a/third_party/blink/renderer/core/inspector/inspector_resource_container.h b/third_party/blink/renderer/core/inspector/inspector_resource_container.h index 5fdef9f6..de3a844 100644 --- a/third_party/blink/renderer/core/inspector/inspector_resource_container.h +++ b/third_party/blink/renderer/core/inspector/inspector_resource_container.h
@@ -20,7 +20,7 @@ class LocalFrame; class CORE_EXPORT InspectorResourceContainer final - : public GarbageCollectedFinalized<InspectorResourceContainer> { + : public GarbageCollected<InspectorResourceContainer> { public: explicit InspectorResourceContainer(InspectedFrames*); ~InspectorResourceContainer();
diff --git a/third_party/blink/renderer/core/inspector/inspector_resource_content_loader.cc b/third_party/blink/renderer/core/inspector/inspector_resource_content_loader.cc index ba9eb28..cab04b7 100644 --- a/third_party/blink/renderer/core/inspector/inspector_resource_content_loader.cc +++ b/third_party/blink/renderer/core/inspector/inspector_resource_content_loader.cc
@@ -28,8 +28,7 @@ // resources. Stylesheets can only safely use a RawResourceClient because it has // no custom interface and simply uses the base ResourceClient. class InspectorResourceContentLoader::ResourceClient final - : public GarbageCollectedFinalized< - InspectorResourceContentLoader::ResourceClient>, + : public GarbageCollected<InspectorResourceContentLoader::ResourceClient>, private RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(ResourceClient);
diff --git a/third_party/blink/renderer/core/inspector/inspector_resource_content_loader.h b/third_party/blink/renderer/core/inspector/inspector_resource_content_loader.h index 33fc7e6..ec8d98c 100644 --- a/third_party/blink/renderer/core/inspector/inspector_resource_content_loader.h +++ b/third_party/blink/renderer/core/inspector/inspector_resource_content_loader.h
@@ -20,7 +20,7 @@ class Resource; class CORE_EXPORT InspectorResourceContentLoader final - : public GarbageCollectedFinalized<InspectorResourceContentLoader> { + : public GarbageCollected<InspectorResourceContentLoader> { public: explicit InspectorResourceContentLoader(LocalFrame*); ~InspectorResourceContentLoader();
diff --git a/third_party/blink/renderer/core/inspector/inspector_style_sheet.h b/third_party/blink/renderer/core/inspector/inspector_style_sheet.h index aab9353..c59f456f 100644 --- a/third_party/blink/renderer/core/inspector/inspector_style_sheet.h +++ b/third_party/blink/renderer/core/inspector/inspector_style_sheet.h
@@ -52,7 +52,7 @@ typedef HeapVector<Member<CSSRule>> CSSRuleVector; typedef Vector<unsigned> LineEndings; -class InspectorStyle final : public GarbageCollectedFinalized<InspectorStyle> { +class InspectorStyle final : public GarbageCollected<InspectorStyle> { public: InspectorStyle(CSSStyleDeclaration*, CSSRuleSourceData*, @@ -77,7 +77,7 @@ }; class InspectorStyleSheetBase - : public GarbageCollectedFinalized<InspectorStyleSheetBase> { + : public GarbageCollected<InspectorStyleSheetBase> { public: class CORE_EXPORT Listener { public:
diff --git a/third_party/blink/renderer/core/inspector/network_resources_data.h b/third_party/blink/renderer/core/inspector/network_resources_data.h index 25aad34..0a4c41a3 100644 --- a/third_party/blink/renderer/core/inspector/network_resources_data.h +++ b/third_party/blink/renderer/core/inspector/network_resources_data.h
@@ -48,7 +48,7 @@ class ResourceResponse; class TextResourceDecoder; -class XHRReplayData final : public GarbageCollectedFinalized<XHRReplayData> { +class XHRReplayData final : public GarbageCollected<XHRReplayData> { public: static XHRReplayData* Create(ExecutionContext*, const AtomicString& method, @@ -92,9 +92,9 @@ }; class NetworkResourcesData final - : public GarbageCollectedFinalized<NetworkResourcesData> { + : public GarbageCollected<NetworkResourcesData> { public: - class ResourceData final : public GarbageCollectedFinalized<ResourceData> { + class ResourceData final : public GarbageCollected<ResourceData> { friend class NetworkResourcesData; public:
diff --git a/third_party/blink/renderer/core/inspector/worker_inspector_controller.h b/third_party/blink/renderer/core/inspector/worker_inspector_controller.h index 4014ad5..4d8943a 100644 --- a/third_party/blink/renderer/core/inspector/worker_inspector_controller.h +++ b/third_party/blink/renderer/core/inspector/worker_inspector_controller.h
@@ -53,7 +53,7 @@ struct WorkerDevToolsParams; class WorkerInspectorController final - : public GarbageCollectedFinalized<WorkerInspectorController>, + : public GarbageCollected<WorkerInspectorController>, public trace_event::EnabledStateObserver, public DevToolsAgent::Client, private Thread::TaskObserver {
diff --git a/third_party/blink/renderer/core/intersection_observer/intersection_observer_controller.h b/third_party/blink/renderer/core/intersection_observer/intersection_observer_controller.h index c67d7347..edc08b0 100644 --- a/third_party/blink/renderer/core/intersection_observer/intersection_observer_controller.h +++ b/third_party/blink/renderer/core/intersection_observer/intersection_observer_controller.h
@@ -19,7 +19,7 @@ class Document; class IntersectionObserverController - : public GarbageCollectedFinalized<IntersectionObserverController>, + : public GarbageCollected<IntersectionObserverController>, public ContextClient, public NameClient { USING_GARBAGE_COLLECTED_MIXIN(IntersectionObserverController);
diff --git a/third_party/blink/renderer/core/intersection_observer/intersection_observer_delegate.h b/third_party/blink/renderer/core/intersection_observer/intersection_observer_delegate.h index 8633bb7..3ed349b 100644 --- a/third_party/blink/renderer/core/intersection_observer/intersection_observer_delegate.h +++ b/third_party/blink/renderer/core/intersection_observer/intersection_observer_delegate.h
@@ -16,7 +16,7 @@ class IntersectionObserverEntry; class IntersectionObserverDelegate - : public GarbageCollectedFinalized<IntersectionObserverDelegate>, + : public GarbageCollected<IntersectionObserverDelegate>, public NameClient { public: virtual ~IntersectionObserverDelegate() = default;
diff --git a/third_party/blink/renderer/core/layout/hit_test_cache.h b/third_party/blink/renderer/core/layout/hit_test_cache.h index bc42a71..43f3e25 100644 --- a/third_party/blink/renderer/core/layout/hit_test_cache.h +++ b/third_party/blink/renderer/core/layout/hit_test_cache.h
@@ -44,8 +44,7 @@ void CacheValues(const HitTestCacheEntry&); }; -class CORE_EXPORT HitTestCache final - : public GarbageCollectedFinalized<HitTestCache> { +class CORE_EXPORT HitTestCache final : public GarbageCollected<HitTestCache> { public: HitTestCache() : update_index_(0), dom_tree_version_(0) {}
diff --git a/third_party/blink/renderer/core/layout/hit_test_canvas_result.h b/third_party/blink/renderer/core/layout/hit_test_canvas_result.h index e647859..341faf08 100644 --- a/third_party/blink/renderer/core/layout/hit_test_canvas_result.h +++ b/third_party/blink/renderer/core/layout/hit_test_canvas_result.h
@@ -10,7 +10,7 @@ namespace blink { class CORE_EXPORT HitTestCanvasResult final - : public GarbageCollectedFinalized<HitTestCanvasResult> { + : public GarbageCollected<HitTestCanvasResult> { public: HitTestCanvasResult(String id, Member<Element> control);
diff --git a/third_party/blink/renderer/core/layout/layout_image_resource.h b/third_party/blink/renderer/core/layout/layout_image_resource.h index 11af6c1..af9230cd 100644 --- a/third_party/blink/renderer/core/layout/layout_image_resource.h +++ b/third_party/blink/renderer/core/layout/layout_image_resource.h
@@ -37,7 +37,7 @@ class LayoutObject; class CORE_EXPORT LayoutImageResource - : public GarbageCollectedFinalized<LayoutImageResource> { + : public GarbageCollected<LayoutImageResource> { public: LayoutImageResource(); virtual ~LayoutImageResource();
diff --git a/third_party/blink/renderer/core/layout/ng/custom/css_layout_definition.h b/third_party/blink/renderer/core/layout/ng/custom/css_layout_definition.h index fffb7ae..c7223e9 100644 --- a/third_party/blink/renderer/core/layout/ng/custom/css_layout_definition.h +++ b/third_party/blink/renderer/core/layout/ng/custom/css_layout_definition.h
@@ -30,9 +30,8 @@ // Represents a javascript class registered on the LayoutWorkletGlobalScope by // the author. // https://drafts.css-houdini.org/css-layout-api/#layout-definition -class CSSLayoutDefinition final - : public GarbageCollectedFinalized<CSSLayoutDefinition>, - public NameClient { +class CSSLayoutDefinition final : public GarbageCollected<CSSLayoutDefinition>, + public NameClient { public: CSSLayoutDefinition( ScriptState*, @@ -47,7 +46,7 @@ // This class represents an instance of the layout class defined by the // CSSLayoutDefinition. - class Instance final : public GarbageCollectedFinalized<Instance> { + class Instance final : public GarbageCollected<Instance> { public: Instance(CSSLayoutDefinition*, v8::Local<v8::Value> instance);
diff --git a/third_party/blink/renderer/core/layout/ng/custom/document_layout_definition.h b/third_party/blink/renderer/core/layout/ng/custom/document_layout_definition.h index b3b77ad..2a8e359 100644 --- a/third_party/blink/renderer/core/layout/ng/custom/document_layout_definition.h +++ b/third_party/blink/renderer/core/layout/ng/custom/document_layout_definition.h
@@ -13,7 +13,7 @@ // needed by the document about the author defined layout. // https://drafts.css-houdini.org/css-layout-api/#document-layout-definition class DocumentLayoutDefinition final - : public GarbageCollectedFinalized<DocumentLayoutDefinition> { + : public GarbageCollected<DocumentLayoutDefinition> { public: explicit DocumentLayoutDefinition(CSSLayoutDefinition*); virtual ~DocumentLayoutDefinition();
diff --git a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.h b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.h index 77c4d3fe..46837b1e 100644 --- a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.h +++ b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.h
@@ -18,7 +18,7 @@ // A proxy for LayoutWorklet to talk to LayoutWorkletGlobalScope. class CORE_EXPORT LayoutWorkletGlobalScopeProxy - : public GarbageCollectedFinalized<LayoutWorkletGlobalScopeProxy>, + : public GarbageCollected<LayoutWorkletGlobalScopeProxy>, public WorkletGlobalScopeProxy { USING_GARBAGE_COLLECTED_MIXIN(LayoutWorkletGlobalScopeProxy);
diff --git a/third_party/blink/renderer/core/layout/text_autosizer.h b/third_party/blink/renderer/core/layout/text_autosizer.h index 34dad210..19111b9 100644 --- a/third_party/blink/renderer/core/layout/text_autosizer.h +++ b/third_party/blink/renderer/core/layout/text_autosizer.h
@@ -58,8 +58,7 @@ // Single-pass text autosizer. Documentation at: // http://tinyurl.com/TextAutosizer -class CORE_EXPORT TextAutosizer final - : public GarbageCollectedFinalized<TextAutosizer> { +class CORE_EXPORT TextAutosizer final : public GarbageCollected<TextAutosizer> { public: explicit TextAutosizer(const Document*); ~TextAutosizer();
diff --git a/third_party/blink/renderer/core/loader/appcache/application_cache_host.h b/third_party/blink/renderer/core/loader/appcache/application_cache_host.h index 28ba68f..4137c1c 100644 --- a/third_party/blink/renderer/core/loader/appcache/application_cache_host.h +++ b/third_party/blink/renderer/core/loader/appcache/application_cache_host.h
@@ -51,7 +51,7 @@ namespace blink { class CORE_EXPORT ApplicationCacheHost - : public GarbageCollectedFinalized<ApplicationCacheHost>, + : public GarbageCollected<ApplicationCacheHost>, public mojom::blink::AppCacheFrontend { public: ApplicationCacheHost(
diff --git a/third_party/blink/renderer/core/loader/document_loader.h b/third_party/blink/renderer/core/loader/document_loader.h index a6b84c16..04050ca 100644 --- a/third_party/blink/renderer/core/loader/document_loader.h +++ b/third_party/blink/renderer/core/loader/document_loader.h
@@ -102,10 +102,9 @@ enum class GlobalObjectReusePolicy { kCreateNew, kUseExisting }; // The DocumentLoader fetches a main resource and handles the result. -class CORE_EXPORT DocumentLoader - : public GarbageCollectedFinalized<DocumentLoader>, - public UseCounter, - public WebNavigationBodyLoader::Client { +class CORE_EXPORT DocumentLoader : public GarbageCollected<DocumentLoader>, + public UseCounter, + public WebNavigationBodyLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(DocumentLoader); public:
diff --git a/third_party/blink/renderer/core/loader/form_submission.h b/third_party/blink/renderer/core/loader/form_submission.h index 338875eb..e262e389 100644 --- a/third_party/blink/renderer/core/loader/form_submission.h +++ b/third_party/blink/renderer/core/loader/form_submission.h
@@ -47,7 +47,7 @@ class HTMLFormControlElement; class HTMLFormElement; -class FormSubmission final : public GarbageCollectedFinalized<FormSubmission> { +class FormSubmission final : public GarbageCollected<FormSubmission> { public: enum SubmitMethod { kGetMethod, kPostMethod, kDialogMethod };
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc index 206e4e7..c86cbd3 100644 --- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc +++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
@@ -184,8 +184,7 @@ } // namespace -struct FrameFetchContext::FrozenState final - : GarbageCollectedFinalized<FrozenState> { +struct FrameFetchContext::FrozenState final : GarbageCollected<FrozenState> { FrozenState(const KURL& url, scoped_refptr<const SecurityOrigin> parent_security_origin, const ContentSecurityPolicy* content_security_policy,
diff --git a/third_party/blink/renderer/core/loader/history_item.h b/third_party/blink/renderer/core/loader/history_item.h index d9eefe6..5d29c48f 100644 --- a/third_party/blink/renderer/core/loader/history_item.h +++ b/third_party/blink/renderer/core/loader/history_item.h
@@ -48,8 +48,7 @@ enum class FetchCacheMode : int32_t; } // namespace mojom -class CORE_EXPORT HistoryItem final - : public GarbageCollectedFinalized<HistoryItem> { +class CORE_EXPORT HistoryItem final : public GarbageCollected<HistoryItem> { public: static HistoryItem* Create() { return MakeGarbageCollected<HistoryItem>(); }
diff --git a/third_party/blink/renderer/core/loader/http_refresh_scheduler.h b/third_party/blink/renderer/core/loader/http_refresh_scheduler.h index d1cd385..5381292 100644 --- a/third_party/blink/renderer/core/loader/http_refresh_scheduler.h +++ b/third_party/blink/renderer/core/loader/http_refresh_scheduler.h
@@ -46,7 +46,7 @@ namespace blink { class CORE_EXPORT HttpRefreshScheduler final - : public GarbageCollectedFinalized<HttpRefreshScheduler> { + : public GarbageCollected<HttpRefreshScheduler> { public: explicit HttpRefreshScheduler(Document*); ~HttpRefreshScheduler() = default;
diff --git a/third_party/blink/renderer/core/loader/idleness_detector.h b/third_party/blink/renderer/core/loader/idleness_detector.h index ebf8785..9325a9d9 100644 --- a/third_party/blink/renderer/core/loader/idleness_detector.h +++ b/third_party/blink/renderer/core/loader/idleness_detector.h
@@ -23,7 +23,7 @@ // seconds, and a network idle signal when there are 0 network connections // active in 0.5 seconds. class CORE_EXPORT IdlenessDetector - : public GarbageCollectedFinalized<IdlenessDetector>, + : public GarbageCollected<IdlenessDetector>, public base::sequence_manager::TaskTimeObserver { public: IdlenessDetector(
diff --git a/third_party/blink/renderer/core/loader/image_loader.h b/third_party/blink/renderer/core/loader/image_loader.h index 0a1a8d8ce..f60beba 100644 --- a/third_party/blink/renderer/core/loader/image_loader.h +++ b/third_party/blink/renderer/core/loader/image_loader.h
@@ -45,7 +45,7 @@ class LayoutImageResource; class ScriptState; -class CORE_EXPORT ImageLoader : public GarbageCollectedFinalized<ImageLoader>, +class CORE_EXPORT ImageLoader : public GarbageCollected<ImageLoader>, public ImageResourceObserver { USING_PRE_FINALIZER(ImageLoader, Dispose);
diff --git a/third_party/blink/renderer/core/loader/interactive_detector.h b/third_party/blink/renderer/core/loader/interactive_detector.h index ffe5ca4..a7c7cdd1 100644 --- a/third_party/blink/renderer/core/loader/interactive_detector.h +++ b/third_party/blink/renderer/core/loader/interactive_detector.h
@@ -35,7 +35,7 @@ // TODO(crbug.com/631203): This class currently only detects Time to // Interactive. Implement First Idle. class CORE_EXPORT InteractiveDetector - : public GarbageCollectedFinalized<InteractiveDetector>, + : public GarbageCollected<InteractiveDetector>, public Supplement<Document>, public ContextLifecycleObserver, public LongTaskObserver {
diff --git a/third_party/blink/renderer/core/loader/link_loader.cc b/third_party/blink/renderer/core/loader/link_loader.cc index e0add05..f1128cb 100644 --- a/third_party/blink/renderer/core/loader/link_loader.cc +++ b/third_party/blink/renderer/core/loader/link_loader.cc
@@ -82,7 +82,7 @@ } class LinkLoader::FinishObserver final - : public GarbageCollectedFinalized<LinkLoader::FinishObserver>, + : public GarbageCollected<LinkLoader::FinishObserver>, public ResourceFinishObserver { USING_GARBAGE_COLLECTED_MIXIN(FinishObserver); USING_PRE_FINALIZER(FinishObserver, ClearResource);
diff --git a/third_party/blink/renderer/core/loader/link_loader_test.cc b/third_party/blink/renderer/core/loader/link_loader_test.cc index b18063ba..3e68c88 100644 --- a/third_party/blink/renderer/core/loader/link_loader_test.cc +++ b/third_party/blink/renderer/core/loader/link_loader_test.cc
@@ -32,7 +32,7 @@ namespace { class MockLinkLoaderClient final - : public GarbageCollectedFinalized<MockLinkLoaderClient>, + : public GarbageCollected<MockLinkLoaderClient>, public LinkLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient);
diff --git a/third_party/blink/renderer/core/loader/long_task_detector.h b/third_party/blink/renderer/core/loader/long_task_detector.h index 98269ca..efb1675d 100644 --- a/third_party/blink/renderer/core/loader/long_task_detector.h +++ b/third_party/blink/renderer/core/loader/long_task_detector.h
@@ -27,7 +27,7 @@ // of LongTaskObservers drop to zero it automatically removes itself as a // TaskTimeObserver. class CORE_EXPORT LongTaskDetector final - : public GarbageCollectedFinalized<LongTaskDetector>, + : public GarbageCollected<LongTaskDetector>, public base::sequence_manager::TaskTimeObserver { public: static LongTaskDetector& Instance();
diff --git a/third_party/blink/renderer/core/loader/long_task_detector_test.cc b/third_party/blink/renderer/core/loader/long_task_detector_test.cc index 36900347..deacc8ae 100644 --- a/third_party/blink/renderer/core/loader/long_task_detector_test.cc +++ b/third_party/blink/renderer/core/loader/long_task_detector_test.cc
@@ -15,7 +15,7 @@ class TestLongTaskObserver : // This has to be garbage collected since LongTaskObserver uses // GarbageCollectedMixin. - public GarbageCollectedFinalized<TestLongTaskObserver>, + public GarbageCollected<TestLongTaskObserver>, public LongTaskObserver { USING_GARBAGE_COLLECTED_MIXIN(TestLongTaskObserver);
diff --git a/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h index 4ca66cb..35ee3d7 100644 --- a/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h
@@ -16,7 +16,7 @@ // workers. We should rename this to something like ModuleScriptFetcherImpl that // doesn't relate to Document. class CORE_EXPORT DocumentModuleScriptFetcher final - : public GarbageCollectedFinalized<DocumentModuleScriptFetcher>, + : public GarbageCollected<DocumentModuleScriptFetcher>, public ModuleScriptFetcher { USING_GARBAGE_COLLECTED_MIXIN(DocumentModuleScriptFetcher);
diff --git a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h index 3ddc2a8a..b03fe39 100644 --- a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.h
@@ -15,8 +15,7 @@ // ModuleScriptFetcher for retrieving an installed ServiceWorker script // from ServiceWorker's script storage. class CORE_EXPORT InstalledServiceWorkerModuleScriptFetcher final - : public GarbageCollectedFinalized< - InstalledServiceWorkerModuleScriptFetcher>, + : public GarbageCollected<InstalledServiceWorkerModuleScriptFetcher>, public ModuleScriptFetcher { USING_GARBAGE_COLLECTED_MIXIN(InstalledServiceWorkerModuleScriptFetcher);
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.h b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.h index 223bd92..7541555 100644 --- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.h +++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.h
@@ -31,7 +31,7 @@ // // ModuleScriptLoader(s) should only be used via Modulator and its ModuleMap. class CORE_EXPORT ModuleScriptLoader final - : public GarbageCollectedFinalized<ModuleScriptLoader>, + : public GarbageCollected<ModuleScriptLoader>, public ModuleScriptFetcher::Client { USING_GARBAGE_COLLECTED_MIXIN(ModuleScriptLoader);
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc index 5670bdc1..3800534b 100644 --- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc +++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc
@@ -43,7 +43,7 @@ namespace { class TestModuleScriptLoaderClient final - : public GarbageCollectedFinalized<TestModuleScriptLoaderClient>, + : public GarbageCollected<TestModuleScriptLoaderClient>, public ModuleScriptLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(TestModuleScriptLoaderClient);
diff --git a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h index f36f5286..36710fd 100644 --- a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h
@@ -17,7 +17,7 @@ // https://html.spec.whatwg.org/C/#fetching-scripts-perform-fetch // https://html.spec.whatwg.org/C/#worker-processing-model class CORE_EXPORT WorkerModuleScriptFetcher final - : public GarbageCollectedFinalized<WorkerModuleScriptFetcher>, + : public GarbageCollected<WorkerModuleScriptFetcher>, public ModuleScriptFetcher { USING_GARBAGE_COLLECTED_MIXIN(WorkerModuleScriptFetcher);
diff --git a/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.h index 08c46a4..4bc3312 100644 --- a/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.h
@@ -23,7 +23,7 @@ // WorkletModuleResponsesMap, or defers to ModuleScriptFetcher and // stores the result in WorkletModuleResponsesMap on fetch completion. class CORE_EXPORT WorkletModuleScriptFetcher final - : public GarbageCollectedFinalized<WorkletModuleScriptFetcher>, + : public GarbageCollected<WorkletModuleScriptFetcher>, public ModuleScriptFetcher { USING_GARBAGE_COLLECTED_MIXIN(WorkletModuleScriptFetcher);
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h index f144596..88df341 100644 --- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h +++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h
@@ -26,7 +26,7 @@ // prefetched signed exchange info and will returns loaders for matching // requests. class PrefetchedSignedExchangeManager final - : public GarbageCollectedFinalized<PrefetchedSignedExchangeManager> { + : public GarbageCollected<PrefetchedSignedExchangeManager> { public: // If threre are no "allowed-alt-sxg" link headers in |inner_link_header|, // or |prefetched_signed_exchanges| is empty, returns null.
diff --git a/third_party/blink/renderer/core/loader/previews_resource_loading_hints.h b/third_party/blink/renderer/core/loader/previews_resource_loading_hints.h index 8eed4903..5033635 100644 --- a/third_party/blink/renderer/core/loader/previews_resource_loading_hints.h +++ b/third_party/blink/renderer/core/loader/previews_resource_loading_hints.h
@@ -27,7 +27,7 @@ // PreviewsResourceLoadingHints stores the resource loading hints that apply to // a single document. class CORE_EXPORT PreviewsResourceLoadingHints final - : public GarbageCollectedFinalized<PreviewsResourceLoadingHints> { + : public GarbageCollected<PreviewsResourceLoadingHints> { public: static PreviewsResourceLoadingHints* Create( ExecutionContext& execution_context,
diff --git a/third_party/blink/renderer/core/loader/private/prerender_handle.h b/third_party/blink/renderer/core/loader/private/prerender_handle.h index 14ad87f..b9d4a974 100644 --- a/third_party/blink/renderer/core/loader/private/prerender_handle.h +++ b/third_party/blink/renderer/core/loader/private/prerender_handle.h
@@ -43,7 +43,7 @@ class Prerender; class PrerenderClient; -class PrerenderHandle final : public GarbageCollectedFinalized<PrerenderHandle>, +class PrerenderHandle final : public GarbageCollected<PrerenderHandle>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(PrerenderHandle); USING_PRE_FINALIZER(PrerenderHandle, Dispose);
diff --git a/third_party/blink/renderer/core/loader/progress_tracker.h b/third_party/blink/renderer/core/loader/progress_tracker.h index 94be6b94..36e9782 100644 --- a/third_party/blink/renderer/core/loader/progress_tracker.h +++ b/third_party/blink/renderer/core/loader/progress_tracker.h
@@ -48,7 +48,7 @@ // browser which shows a progress bar during loading. // We should find a better way for Android to get this data and remove this! class CORE_EXPORT ProgressTracker final - : public GarbageCollectedFinalized<ProgressTracker> { + : public GarbageCollected<ProgressTracker> { public: explicit ProgressTracker(LocalFrame*); ~ProgressTracker();
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource.cc b/third_party/blink/renderer/core/loader/resource/image_resource.cc index af0feb1..8184a40 100644 --- a/third_party/blink/renderer/core/loader/resource/image_resource.cc +++ b/third_party/blink/renderer/core/loader/resource/image_resource.cc
@@ -67,7 +67,7 @@ } // namespace class ImageResource::ImageResourceInfoImpl final - : public GarbageCollectedFinalized<ImageResourceInfoImpl>, + : public GarbageCollected<ImageResourceInfoImpl>, public ImageResourceInfo { USING_GARBAGE_COLLECTED_MIXIN(ImageResourceInfoImpl);
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_content.cc b/third_party/blink/renderer/core/loader/resource/image_resource_content.cc index 299fb6f8..5f24567 100644 --- a/third_party/blink/renderer/core/loader/resource/image_resource_content.cc +++ b/third_party/blink/renderer/core/loader/resource/image_resource_content.cc
@@ -30,7 +30,7 @@ namespace { class NullImageResourceInfo final - : public GarbageCollectedFinalized<NullImageResourceInfo>, + : public GarbageCollected<NullImageResourceInfo>, public ImageResourceInfo { USING_GARBAGE_COLLECTED_MIXIN(NullImageResourceInfo);
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_content.h b/third_party/blink/renderer/core/loader/resource/image_resource_content.h index c022783b..0bfbbf9 100644 --- a/third_party/blink/renderer/core/loader/resource/image_resource_content.h +++ b/third_party/blink/renderer/core/loader/resource/image_resource_content.h
@@ -42,7 +42,7 @@ // TODO(hiroshige): Rename local variables of type ImageResourceContent to // e.g. |imageContent|. Currently they have Resource-like names. class CORE_EXPORT ImageResourceContent final - : public GarbageCollectedFinalized<ImageResourceContent>, + : public GarbageCollected<ImageResourceContent>, public ImageObserver { USING_GARBAGE_COLLECTED_MIXIN(ImageResourceContent);
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc index e0a29279..4c2172b 100644 --- a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc +++ b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
@@ -514,7 +514,7 @@ EXPECT_FALSE(GetMemoryCache()->ResourceForURL(test_url)); } -class MockFinishObserver : public GarbageCollectedFinalized<MockFinishObserver>, +class MockFinishObserver : public GarbageCollected<MockFinishObserver>, public ResourceFinishObserver { USING_GARBAGE_COLLECTED_MIXIN(MockFinishObserver);
diff --git a/third_party/blink/renderer/core/loader/resource/mock_font_resource_client.h b/third_party/blink/renderer/core/loader/resource/mock_font_resource_client.h index eb5ceed..7d9d908 100644 --- a/third_party/blink/renderer/core/loader/resource/mock_font_resource_client.h +++ b/third_party/blink/renderer/core/loader/resource/mock_font_resource_client.h
@@ -13,7 +13,7 @@ namespace blink { class MockFontResourceClient final - : public GarbageCollectedFinalized<MockFontResourceClient>, + : public GarbageCollected<MockFontResourceClient>, public FontResourceClient { USING_GARBAGE_COLLECTED_MIXIN(MockFontResourceClient);
diff --git a/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.h b/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.h index cfa2351..9fc6648 100644 --- a/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.h +++ b/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.h
@@ -51,7 +51,7 @@ // A parser parsing mlutipart/x-mixed-replace resource. class CORE_EXPORT MultipartImageResourceParser final - : public GarbageCollectedFinalized<MultipartImageResourceParser> { + : public GarbageCollected<MultipartImageResourceParser> { public: class CORE_EXPORT Client : public GarbageCollectedMixin { public:
diff --git a/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser_test.cc b/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser_test.cc index 711fed3..66df03c 100644 --- a/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser_test.cc +++ b/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser_test.cc
@@ -22,7 +22,7 @@ return String(data.data(), data.size()); } -class MockClient final : public GarbageCollectedFinalized<MockClient>, +class MockClient final : public GarbageCollected<MockClient>, public MultipartImageResourceParser::Client { USING_GARBAGE_COLLECTED_MIXIN(MockClient);
diff --git a/third_party/blink/renderer/core/loader/subresource_filter.h b/third_party/blink/renderer/core/loader/subresource_filter.h index 479e288..d8c9a2ce 100644 --- a/third_party/blink/renderer/core/loader/subresource_filter.h +++ b/third_party/blink/renderer/core/loader/subresource_filter.h
@@ -24,7 +24,7 @@ // to extend the subresource filter with optimizations only possible using blink // types (e.g. a caching layer using StringImpl). class CORE_EXPORT SubresourceFilter final - : public GarbageCollectedFinalized<SubresourceFilter> { + : public GarbageCollected<SubresourceFilter> { public: static SubresourceFilter* Create( ExecutionContext&,
diff --git a/third_party/blink/renderer/core/loader/text_track_loader.h b/third_party/blink/renderer/core/loader/text_track_loader.h index eda65bf5..7488812 100644 --- a/third_party/blink/renderer/core/loader/text_track_loader.h +++ b/third_party/blink/renderer/core/loader/text_track_loader.h
@@ -44,7 +44,7 @@ virtual void CueLoadingCompleted(TextTrackLoader*, bool loading_failed) = 0; }; -class TextTrackLoader final : public GarbageCollectedFinalized<TextTrackLoader>, +class TextTrackLoader final : public GarbageCollected<TextTrackLoader>, public RawResourceClient, private VTTParserClient { USING_GARBAGE_COLLECTED_MIXIN(TextTrackLoader);
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.cc b/third_party/blink/renderer/core/loader/threadable_loader.cc index 9b63eb8..1185c6c5 100644 --- a/third_party/blink/renderer/core/loader/threadable_loader.cc +++ b/third_party/blink/renderer/core/loader/threadable_loader.cc
@@ -104,7 +104,7 @@ // ThreadableLoader. It's for fetch requests with keepalive set, so // it keeps itself alive during loading. class ThreadableLoader::DetachedClient final - : public GarbageCollectedFinalized<DetachedClient>, + : public GarbageCollected<DetachedClient>, public ThreadableLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(DetachedClient);
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.h b/third_party/blink/renderer/core/loader/threadable_loader.h index fa27da6..ff82a73 100644 --- a/third_party/blink/renderer/core/loader/threadable_loader.h +++ b/third_party/blink/renderer/core/loader/threadable_loader.h
@@ -67,7 +67,7 @@ // the constructor. // In either case, Start() must be called to actaully begin the request. class CORE_EXPORT ThreadableLoader final - : public GarbageCollectedFinalized<ThreadableLoader>, + : public GarbageCollected<ThreadableLoader>, private RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(ThreadableLoader);
diff --git a/third_party/blink/renderer/core/loader/threadable_loader_test.cc b/third_party/blink/renderer/core/loader/threadable_loader_test.cc index 73cbbfc..6fb01f8 100644 --- a/third_party/blink/renderer/core/loader/threadable_loader_test.cc +++ b/third_party/blink/renderer/core/loader/threadable_loader_test.cc
@@ -52,7 +52,7 @@ constexpr char kFileName[] = "fox-null-terminated.html"; class MockThreadableLoaderClient final - : public GarbageCollectedFinalized<MockThreadableLoaderClient>, + : public GarbageCollected<MockThreadableLoaderClient>, public ThreadableLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(MockThreadableLoaderClient);
diff --git a/third_party/blink/renderer/core/loader/threaded_icon_loader.h b/third_party/blink/renderer/core/loader/threaded_icon_loader.h index 2b8b9fdd..4384d7b 100644 --- a/third_party/blink/renderer/core/loader/threaded_icon_loader.h +++ b/third_party/blink/renderer/core/loader/threaded_icon_loader.h
@@ -23,7 +23,7 @@ // Utility class for loading, decoding, and potentially rescaling an icon on a // background thread. Note that icons are only downscaled and never upscaled. class CORE_EXPORT ThreadedIconLoader final - : public GarbageCollectedFinalized<ThreadedIconLoader>, + : public GarbageCollected<ThreadedIconLoader>, public ThreadableLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(ThreadedIconLoader);
diff --git a/third_party/blink/renderer/core/loader/web_associated_url_loader_impl.cc b/third_party/blink/renderer/core/loader/web_associated_url_loader_impl.cc index 481fea9..23db6c7 100644 --- a/third_party/blink/renderer/core/loader/web_associated_url_loader_impl.cc +++ b/third_party/blink/renderer/core/loader/web_associated_url_loader_impl.cc
@@ -95,7 +95,7 @@ // It forwards its ThreadableLoaderClient notifications to a // WebAssociatedURLLoaderClient. class WebAssociatedURLLoaderImpl::ClientAdapter final - : public GarbageCollectedFinalized<ClientAdapter>, + : public GarbageCollected<ClientAdapter>, public ThreadableLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(ClientAdapter);
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.h b/third_party/blink/renderer/core/origin_trials/origin_trial_context.h index acf07bca..ecf41cc 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.h +++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.h
@@ -33,7 +33,7 @@ // // For more information, see https://github.com/jpchase/OriginTrials. class CORE_EXPORT OriginTrialContext final - : public GarbageCollectedFinalized<OriginTrialContext> { + : public GarbageCollected<OriginTrialContext> { public: OriginTrialContext(); explicit OriginTrialContext(std::unique_ptr<TrialTokenValidator> validator);
diff --git a/third_party/blink/renderer/core/page/chrome_client.h b/third_party/blink/renderer/core/page/chrome_client.h index 799dfd7..4e051c2 100644 --- a/third_party/blink/renderer/core/page/chrome_client.h +++ b/third_party/blink/renderer/core/page/chrome_client.h
@@ -104,8 +104,7 @@ using CompositorElementId = cc::ElementId; -class CORE_EXPORT ChromeClient - : public GarbageCollectedFinalized<ChromeClient> { +class CORE_EXPORT ChromeClient : public GarbageCollected<ChromeClient> { DISALLOW_COPY_AND_ASSIGN(ChromeClient); public:
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl_test.cc b/third_party/blink/renderer/core/page/chrome_client_impl_test.cc index 1b79c83e..a2e03c4 100644 --- a/third_party/blink/renderer/core/page/chrome_client_impl_test.cc +++ b/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
@@ -98,9 +98,8 @@ FeaturePolicy::FeatureState(), "")); } -class FakeColorChooserClient - : public GarbageCollectedFinalized<FakeColorChooserClient>, - public ColorChooserClient { +class FakeColorChooserClient : public GarbageCollected<FakeColorChooserClient>, + public ColorChooserClient { public: FakeColorChooserClient(Element* owner_element) : owner_element_(owner_element) {} @@ -129,7 +128,7 @@ }; class FakeDateTimeChooserClient - : public GarbageCollectedFinalized<FakeDateTimeChooserClient>, + : public GarbageCollected<FakeDateTimeChooserClient>, public DateTimeChooserClient { public: FakeDateTimeChooserClient(Element* owner_element) @@ -231,9 +230,8 @@ } // A FileChooserClient which makes FileChooser::OpenFileChooser() success. -class MockFileChooserClient - : public GarbageCollectedFinalized<MockFileChooserClient>, - public FileChooserClient { +class MockFileChooserClient : public GarbageCollected<MockFileChooserClient>, + public FileChooserClient { USING_GARBAGE_COLLECTED_MIXIN(MockFileChooserClient); public:
diff --git a/third_party/blink/renderer/core/page/context_menu_controller.h b/third_party/blink/renderer/core/page/context_menu_controller.h index df28bc8..8aef3cb 100644 --- a/third_party/blink/renderer/core/page/context_menu_controller.h +++ b/third_party/blink/renderer/core/page/context_menu_controller.h
@@ -44,7 +44,7 @@ struct WebContextMenuData; class CORE_EXPORT ContextMenuController final - : public GarbageCollectedFinalized<ContextMenuController> { + : public GarbageCollected<ContextMenuController> { public: explicit ContextMenuController(Page*); ~ContextMenuController();
diff --git a/third_party/blink/renderer/core/page/context_menu_provider.h b/third_party/blink/renderer/core/page/context_menu_provider.h index 79fdd43..b712a07 100644 --- a/third_party/blink/renderer/core/page/context_menu_provider.h +++ b/third_party/blink/renderer/core/page/context_menu_provider.h
@@ -38,8 +38,7 @@ struct WebMenuItemInfo; -class ContextMenuProvider - : public GarbageCollectedFinalized<ContextMenuProvider> { +class ContextMenuProvider : public GarbageCollected<ContextMenuProvider> { public: virtual ~ContextMenuProvider() = default; virtual void Trace(blink::Visitor* visitor) {}
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc index a071c23..3b148f36 100644 --- a/third_party/blink/renderer/core/page/page.cc +++ b/third_party/blink/renderer/core/page/page.cc
@@ -770,8 +770,8 @@ auto* local_frame = DynamicTo<LocalFrame>(frame); if (!local_frame) continue; - LayoutView* layout_view = local_frame->ContentLayoutObject(); - layout_view->Compositor()->UpdateAcceleratedCompositingSettings(); + if (LocalFrameView* view = local_frame->View()) + view->UpdateAcceleratedCompositingSettings(); } }
diff --git a/third_party/blink/renderer/core/page/page.h b/third_party/blink/renderer/core/page/page.h index 9f70ee0..f916d594 100644 --- a/third_party/blink/renderer/core/page/page.h +++ b/third_party/blink/renderer/core/page/page.h
@@ -83,7 +83,7 @@ float DeviceScaleFactorDeprecated(LocalFrame*); -class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>, +class CORE_EXPORT Page final : public GarbageCollected<Page>, public Supplementable<Page>, public PageVisibilityNotifier, public SettingsDelegate,
diff --git a/third_party/blink/renderer/core/page/plugin_data.h b/third_party/blink/renderer/core/page/plugin_data.h index 7ca6da9..efd11fb 100644 --- a/third_party/blink/renderer/core/page/plugin_data.h +++ b/third_party/blink/renderer/core/page/plugin_data.h
@@ -33,8 +33,7 @@ class PluginInfo; -class CORE_EXPORT MimeClassInfo final - : public GarbageCollectedFinalized<MimeClassInfo> { +class CORE_EXPORT MimeClassInfo final : public GarbageCollected<MimeClassInfo> { public: void Trace(blink::Visitor*); @@ -54,8 +53,7 @@ Member<PluginInfo> plugin_; }; -class CORE_EXPORT PluginInfo final - : public GarbageCollectedFinalized<PluginInfo> { +class CORE_EXPORT PluginInfo final : public GarbageCollected<PluginInfo> { public: void Trace(blink::Visitor*); @@ -90,8 +88,7 @@ HeapVector<Member<MimeClassInfo>> mimes_; }; -class CORE_EXPORT PluginData final - : public GarbageCollectedFinalized<PluginData> { +class CORE_EXPORT PluginData final : public GarbageCollected<PluginData> { public: void Trace(blink::Visitor*);
diff --git a/third_party/blink/renderer/core/page/print_context.h b/third_party/blink/renderer/core/page/print_context.h index fdceab55..18270df 100644 --- a/third_party/blink/renderer/core/page/print_context.h +++ b/third_party/blink/renderer/core/page/print_context.h
@@ -37,8 +37,7 @@ class LocalFrame; class Node; -class CORE_EXPORT PrintContext - : public GarbageCollectedFinalized<PrintContext> { +class CORE_EXPORT PrintContext : public GarbageCollected<PrintContext> { public: // By shrinking to a width of 75%, we will render the correct physical // dimensions in paged media (i.e. cm, pt,). The shrinkage used
diff --git a/third_party/blink/renderer/core/page/scrolling/fragment_anchor.h b/third_party/blink/renderer/core/page/scrolling/fragment_anchor.h index 2d7aecd..4b121a01 100644 --- a/third_party/blink/renderer/core/page/scrolling/fragment_anchor.h +++ b/third_party/blink/renderer/core/page/scrolling/fragment_anchor.h
@@ -24,8 +24,7 @@ // can implement, allowing fragments to specify different kinds of anchors. // Callers should use the TryCreate static method to create and return the // appropriate type of base class. -class CORE_EXPORT FragmentAnchor - : public GarbageCollectedFinalized<FragmentAnchor> { +class CORE_EXPORT FragmentAnchor : public GarbageCollected<FragmentAnchor> { public: // Parses the fragment string and tries to create a FragmentAnchor object of // the appropriate derived type. If no anchor could be created from the given
diff --git a/third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h b/third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h index 840f0459..ecb13e2 100644 --- a/third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h +++ b/third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h
@@ -13,8 +13,7 @@ class ScrollState; -class ScrollStateCallback - : public GarbageCollectedFinalized<ScrollStateCallback> { +class ScrollStateCallback : public GarbageCollected<ScrollStateCallback> { public: virtual ~ScrollStateCallback() = default;
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h index ce4b40d..9e29a67 100644 --- a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h +++ b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h
@@ -63,7 +63,7 @@ // compositor, as well as creating and managing scrollbar layers. class CORE_EXPORT ScrollingCoordinator final - : public GarbageCollectedFinalized<ScrollingCoordinator> { + : public GarbageCollected<ScrollingCoordinator> { public: struct ScrollbarLayerGroup { // The compositor layer for the scrollbar. It can be one of a few
diff --git a/third_party/blink/renderer/core/page/scrolling/snap_coordinator.h b/third_party/blink/renderer/core/page/scrolling/snap_coordinator.h index 295a5d2..14c20cc9 100644 --- a/third_party/blink/renderer/core/page/scrolling/snap_coordinator.h +++ b/third_party/blink/renderer/core/page/scrolling/snap_coordinator.h
@@ -30,7 +30,7 @@ // // For more information see spec: https://drafts.csswg.org/css-snappoints/ class CORE_EXPORT SnapCoordinator final - : public GarbageCollectedFinalized<SnapCoordinator> { + : public GarbageCollected<SnapCoordinator> { public: explicit SnapCoordinator(); ~SnapCoordinator();
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h index 95e61b8..47817aff 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h
@@ -13,7 +13,7 @@ // Helper class for TextFragmentAnchor that provides hooks for tracking and // reporting usage and performance metrics to UMA. class CORE_EXPORT TextFragmentAnchorMetrics final - : public GarbageCollectedFinalized<TextFragmentAnchorMetrics> { + : public GarbageCollected<TextFragmentAnchorMetrics> { public: TextFragmentAnchorMetrics(Document* document);
diff --git a/third_party/blink/renderer/core/page/spatial_navigation_controller.h b/third_party/blink/renderer/core/page/spatial_navigation_controller.h index b878ac1..3b90ab1 100644 --- a/third_party/blink/renderer/core/page/spatial_navigation_controller.h +++ b/third_party/blink/renderer/core/page/spatial_navigation_controller.h
@@ -25,7 +25,7 @@ // way, e.g. keyboard arrows. We use the term "interest" to specify which // element the user is currently on. class CORE_EXPORT SpatialNavigationController final - : public GarbageCollectedFinalized<SpatialNavigationController> { + : public GarbageCollected<SpatialNavigationController> { public: explicit SpatialNavigationController(Page& page);
diff --git a/third_party/blink/renderer/core/page/validation_message_client_impl.h b/third_party/blink/renderer/core/page/validation_message_client_impl.h index 4e9cac1..df33110 100644 --- a/third_party/blink/renderer/core/page/validation_message_client_impl.h +++ b/third_party/blink/renderer/core/page/validation_message_client_impl.h
@@ -42,7 +42,7 @@ class ValidationMessageOverlayDelegate; class CORE_EXPORT ValidationMessageClientImpl final - : public GarbageCollectedFinalized<ValidationMessageClientImpl>, + : public GarbageCollected<ValidationMessageClientImpl>, public ValidationMessageClient, private PopupOpeningObserver { USING_GARBAGE_COLLECTED_MIXIN(ValidationMessageClientImpl);
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc index fc9b820..fc37662 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -1733,7 +1733,6 @@ GetLayoutObject().UniqueId(), CompositorElementIdNamespace::kEffectMask); mask_layer_->SetElementId(element_id); - mask_layer_->CcLayer()->SetIsMask(true); if (GetLayoutObject().HasBackdropFilter()) mask_layer_->CcLayer()->SetIsBackdropFilterMask(true); layer_changed = true;
diff --git a/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.h b/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.h index 76b4f2b5..f717fe5 100644 --- a/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.h +++ b/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.h
@@ -26,7 +26,7 @@ // seconds), and computes the layout-based First Meaningful Paint. // See https://goo.gl/vpaxv6 and http://goo.gl/TEiMi4 for more details. class CORE_EXPORT FirstMeaningfulPaintDetector - : public GarbageCollectedFinalized<FirstMeaningfulPaintDetector> { + : public GarbageCollected<FirstMeaningfulPaintDetector> { public: static FirstMeaningfulPaintDetector& From(Document&);
diff --git a/third_party/blink/renderer/core/paint/image_element_timing.h b/third_party/blink/renderer/core/paint/image_element_timing.h index 58c1cff..1f6ac8f 100644 --- a/third_party/blink/renderer/core/paint/image_element_timing.h +++ b/third_party/blink/renderer/core/paint/image_element_timing.h
@@ -26,7 +26,7 @@ // ImageElementTiming is responsible for tracking the paint timings for <img> // elements for a given window. class CORE_EXPORT ImageElementTiming final - : public GarbageCollectedFinalized<ImageElementTiming>, + : public GarbageCollected<ImageElementTiming>, public Supplement<LocalDOMWindow> { USING_GARBAGE_COLLECTED_MIXIN(ImageElementTiming); @@ -79,8 +79,7 @@ base::TimeTicks timestamp); // Class containing information about image element timing. - class ElementTimingInfo final - : public GarbageCollectedFinalized<ElementTimingInfo> { + class ElementTimingInfo final : public GarbageCollected<ElementTimingInfo> { public: ElementTimingInfo(const String& url, const FloatRect& rect,
diff --git a/third_party/blink/renderer/core/paint/image_paint_timing_detector.h b/third_party/blink/renderer/core/paint/image_paint_timing_detector.h index 4e9c9e9..b18203f 100644 --- a/third_party/blink/renderer/core/paint/image_paint_timing_detector.h +++ b/third_party/blink/renderer/core/paint/image_paint_timing_detector.h
@@ -200,7 +200,7 @@ // See also: // https://docs.google.com/document/d/1DRVd4a2VU8-yyWftgOparZF-sf16daf0vfbsHuz2rws/edit#heading=h.1k2rnrs6mdmt class CORE_EXPORT ImagePaintTimingDetector final - : public GarbageCollectedFinalized<ImagePaintTimingDetector> { + : public GarbageCollected<ImagePaintTimingDetector> { friend class ImagePaintTimingDetectorTest; public:
diff --git a/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.h b/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.h index e1b0055..72de5f8 100644 --- a/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.h +++ b/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.h
@@ -15,7 +15,7 @@ // image paint and the largest text paint and notifying WindowPerformance // whenever a new LatestLargestContentfulPaint entry should be dispatched. class CORE_EXPORT LargestContentfulPaintCalculator final - : public GarbageCollectedFinalized<LargestContentfulPaintCalculator> { + : public GarbageCollected<LargestContentfulPaintCalculator> { public: explicit LargestContentfulPaintCalculator(WindowPerformance*);
diff --git a/third_party/blink/renderer/core/paint/paint_layer_resource_info.h b/third_party/blink/renderer/core/paint/paint_layer_resource_info.h index 9de93ec..90aa4a4e 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_resource_info.h +++ b/third_party/blink/renderer/core/paint/paint_layer_resource_info.h
@@ -50,7 +50,7 @@ // painting non-hardware accelerated filters (FilterEffect). Hardware // accelerated CSS filters use CompositorFilterOperations, that is backed by cc. class PaintLayerResourceInfo final - : public GarbageCollectedFinalized<PaintLayerResourceInfo>, + : public GarbageCollected<PaintLayerResourceInfo>, public SVGResourceClient { USING_GARBAGE_COLLECTED_MIXIN(PaintLayerResourceInfo);
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h index 786664f..193d0cc0 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h +++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
@@ -114,7 +114,7 @@ // are painted by their associated GraphicsLayer that sets the paint flag // PaintLayerPaintingOverlayScrollbars. class CORE_EXPORT PaintLayerScrollableArea final - : public GarbageCollectedFinalized<PaintLayerScrollableArea>, + : public GarbageCollected<PaintLayerScrollableArea>, public ScrollableArea { USING_GARBAGE_COLLECTED_MIXIN(PaintLayerScrollableArea); friend class Internals;
diff --git a/third_party/blink/renderer/core/paint/paint_timing.h b/third_party/blink/renderer/core/paint/paint_timing.h index f9736e5..ffb1ae21 100644 --- a/third_party/blink/renderer/core/paint/paint_timing.h +++ b/third_party/blink/renderer/core/paint/paint_timing.h
@@ -26,9 +26,8 @@ // PaintTiming is responsible for tracking paint-related timings for a given // document. -class CORE_EXPORT PaintTiming final - : public GarbageCollectedFinalized<PaintTiming>, - public Supplement<Document> { +class CORE_EXPORT PaintTiming final : public GarbageCollected<PaintTiming>, + public Supplement<Document> { USING_GARBAGE_COLLECTED_MIXIN(PaintTiming); friend class FirstMeaningfulPaintDetector; using ReportTimeCallback =
diff --git a/third_party/blink/renderer/core/paint/paint_timing_detector.h b/third_party/blink/renderer/core/paint/paint_timing_detector.h index 661f2bf..638f66b 100644 --- a/third_party/blink/renderer/core/paint/paint_timing_detector.h +++ b/third_party/blink/renderer/core/paint/paint_timing_detector.h
@@ -54,10 +54,10 @@ // An extra benefit of this design is that |LargestContentfulPaintCalculator| // can thus hook to the end of the LIP and LTP's record assignments. // -// |GarbageCollectedFinalized| inheritance is required by the swap-time callback +// |GarbageCollected| inheritance is required by the swap-time callback // registration. class PaintTimingCallbackManagerImpl final - : public GarbageCollectedFinalized<PaintTimingCallbackManagerImpl>, + : public GarbageCollected<PaintTimingCallbackManagerImpl>, public PaintTimingCallbackManager { USING_GARBAGE_COLLECTED_MIXIN(PaintTimingCallbackManagerImpl);
diff --git a/third_party/blink/renderer/core/paint/paint_timing_test_helper.h b/third_party/blink/renderer/core/paint/paint_timing_test_helper.h index 8d1dfb2..e23dfda 100644 --- a/third_party/blink/renderer/core/paint/paint_timing_test_helper.h +++ b/third_party/blink/renderer/core/paint/paint_timing_test_helper.h
@@ -8,7 +8,7 @@ // |ChromeClient::NotifySwapTime()|'s swap-time queueing and invoking for // unit-tests. Find more details in |PaintTimingCallbackManager|. class MockPaintTimingCallbackManager final - : public GarbageCollectedFinalized<MockPaintTimingCallbackManager>, + : public GarbageCollected<MockPaintTimingCallbackManager>, public PaintTimingCallbackManager { USING_GARBAGE_COLLECTED_MIXIN(MockPaintTimingCallbackManager);
diff --git a/third_party/blink/renderer/core/paint/text_element_timing.h b/third_party/blink/renderer/core/paint/text_element_timing.h index f3a4c40..f0f4a8e 100644 --- a/third_party/blink/renderer/core/paint/text_element_timing.h +++ b/third_party/blink/renderer/core/paint/text_element_timing.h
@@ -23,7 +23,7 @@ // TextElementTiming is responsible for tracking the paint timings for groups of // text nodes associated with elements of a given window. class CORE_EXPORT TextElementTiming final - : public GarbageCollectedFinalized<TextElementTiming>, + : public GarbageCollected<TextElementTiming>, public Supplement<LocalDOMWindow> { USING_GARBAGE_COLLECTED_MIXIN(TextElementTiming);
diff --git a/third_party/blink/renderer/core/paint/text_paint_timing_detector.h b/third_party/blink/renderer/core/paint/text_paint_timing_detector.h index 15f03be7..5a0e6ee 100644 --- a/third_party/blink/renderer/core/paint/text_paint_timing_detector.h +++ b/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
@@ -189,7 +189,7 @@ // See also: // https://docs.google.com/document/d/1DRVd4a2VU8-yyWftgOparZF-sf16daf0vfbsHuz2rws/edit#heading=h.lvno2v283uls class CORE_EXPORT TextPaintTimingDetector final - : public GarbageCollectedFinalized<TextPaintTimingDetector> { + : public GarbageCollected<TextPaintTimingDetector> { friend class TextPaintTimingDetectorTest; public:
diff --git a/third_party/blink/renderer/core/resize_observer/resize_observer.h b/third_party/blink/renderer/core/resize_observer/resize_observer.h index 047bd3d..572f88ee 100644 --- a/third_party/blink/renderer/core/resize_observer/resize_observer.h +++ b/third_party/blink/renderer/core/resize_observer/resize_observer.h
@@ -31,7 +31,7 @@ public: // This delegate is an internal (non-web-exposed) version of ResizeCallback. - class Delegate : public GarbageCollectedFinalized<Delegate> { + class Delegate : public GarbageCollected<Delegate> { public: virtual ~Delegate() = default; virtual void OnResize(
diff --git a/third_party/blink/renderer/core/script/html_parser_script_runner.h b/third_party/blink/renderer/core/script/html_parser_script_runner.h index a3f88c0..3eaa1a3 100644 --- a/third_party/blink/renderer/core/script/html_parser_script_runner.h +++ b/third_party/blink/renderer/core/script/html_parser_script_runner.h
@@ -53,7 +53,7 @@ // // An HTMLParserScriptRunner is owned by its host, an HTMLDocumentParser. class HTMLParserScriptRunner final - : public GarbageCollectedFinalized<HTMLParserScriptRunner>, + : public GarbageCollected<HTMLParserScriptRunner>, public PendingScriptClient, public NameClient { USING_GARBAGE_COLLECTED_MIXIN(HTMLParserScriptRunner);
diff --git a/third_party/blink/renderer/core/script/import_map.h b/third_party/blink/renderer/core/script/import_map.h index 240a2a3..cf17fd4 100644 --- a/third_party/blink/renderer/core/script/import_map.h +++ b/third_party/blink/renderer/core/script/import_map.h
@@ -23,8 +23,7 @@ // Import maps. // https://wicg.github.io/import-maps/ // https://github.com/WICG/import-maps/blob/master/spec.md -class CORE_EXPORT ImportMap final - : public GarbageCollectedFinalized<ImportMap> { +class CORE_EXPORT ImportMap final : public GarbageCollected<ImportMap> { public: static ImportMap* Parse(const Modulator&, const String& text,
diff --git a/third_party/blink/renderer/core/script/mock_script_element_base.h b/third_party/blink/renderer/core/script/mock_script_element_base.h index 2722f3a..0bd11bbb 100644 --- a/third_party/blink/renderer/core/script/mock_script_element_base.h +++ b/third_party/blink/renderer/core/script/mock_script_element_base.h
@@ -12,9 +12,8 @@ namespace blink { -class MockScriptElementBase - : public GarbageCollectedFinalized<MockScriptElementBase>, - public ScriptElementBase { +class MockScriptElementBase : public GarbageCollected<MockScriptElementBase>, + public ScriptElementBase { USING_GARBAGE_COLLECTED_MIXIN(MockScriptElementBase); public:
diff --git a/third_party/blink/renderer/core/script/modulator.h b/third_party/blink/renderer/core/script/modulator.h index e9d4f06..dc8131d2 100644 --- a/third_party/blink/renderer/core/script/modulator.h +++ b/third_party/blink/renderer/core/script/modulator.h
@@ -40,7 +40,7 @@ // module tree graph) load is complete and its corresponding entry is created in // module map. class CORE_EXPORT SingleModuleClient - : public GarbageCollectedFinalized<SingleModuleClient>, + : public GarbageCollected<SingleModuleClient>, public NameClient { public: virtual ~SingleModuleClient() = default; @@ -54,9 +54,8 @@ // A ModuleTreeClient is notified when a module script and its whole descendent // tree load is complete. -class CORE_EXPORT ModuleTreeClient - : public GarbageCollectedFinalized<ModuleTreeClient>, - public NameClient { +class CORE_EXPORT ModuleTreeClient : public GarbageCollected<ModuleTreeClient>, + public NameClient { public: virtual ~ModuleTreeClient() = default; virtual void Trace(Visitor* visitor) {} @@ -95,7 +94,7 @@ // https://html.spec.whatwg.org/C/#environment-settings-object // // A Modulator also serves as an entry point for various module spec algorithms. -class CORE_EXPORT Modulator : public GarbageCollectedFinalized<Modulator>, +class CORE_EXPORT Modulator : public GarbageCollected<Modulator>, public V8PerContextData::Data, public NameClient { USING_GARBAGE_COLLECTED_MIXIN(Modulator);
diff --git a/third_party/blink/renderer/core/script/module_map.cc b/third_party/blink/renderer/core/script/module_map.cc index d38ecfd..4a984fa 100644 --- a/third_party/blink/renderer/core/script/module_map.cc +++ b/third_party/blink/renderer/core/script/module_map.cc
@@ -16,7 +16,7 @@ // Entry struct represents a value in "module map" spec object. // https://html.spec.whatwg.org/C/#module-map -class ModuleMap::Entry final : public GarbageCollectedFinalized<Entry>, +class ModuleMap::Entry final : public GarbageCollected<Entry>, public NameClient, public ModuleScriptLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(ModuleMap::Entry);
diff --git a/third_party/blink/renderer/core/script/module_map_test.cc b/third_party/blink/renderer/core/script/module_map_test.cc index 479c0ac..09c7728 100644 --- a/third_party/blink/renderer/core/script/module_map_test.cc +++ b/third_party/blink/renderer/core/script/module_map_test.cc
@@ -103,7 +103,7 @@ ScriptState* GetScriptState() override { return script_state_; } class TestModuleScriptFetcher final - : public GarbageCollectedFinalized<TestModuleScriptFetcher>, + : public GarbageCollected<TestModuleScriptFetcher>, public ModuleScriptFetcher { USING_GARBAGE_COLLECTED_MIXIN(TestModuleScriptFetcher); @@ -148,7 +148,7 @@ return Thread::Current()->GetTaskRunner().get(); } - struct TestRequest final : public GarbageCollectedFinalized<TestRequest> { + struct TestRequest final : public GarbageCollected<TestRequest> { TestRequest(const ModuleScriptCreationParams& params, ModuleScriptFetcher::Client* client) : params_(params), client_(client) {}
diff --git a/third_party/blink/renderer/core/script/module_record_resolver.h b/third_party/blink/renderer/core/script/module_record_resolver.h index 8833c5500..cf07f65d 100644 --- a/third_party/blink/renderer/core/script/module_record_resolver.h +++ b/third_party/blink/renderer/core/script/module_record_resolver.h
@@ -23,7 +23,7 @@ // ModuleRecordResolver, given a referrer and specifier, can look up the // descendant. class CORE_EXPORT ModuleRecordResolver - : public GarbageCollectedFinalized<ModuleRecordResolver> { + : public GarbageCollected<ModuleRecordResolver> { public: virtual ~ModuleRecordResolver() = default; virtual void Trace(Visitor* visitor) {}
diff --git a/third_party/blink/renderer/core/script/pending_import_map.h b/third_party/blink/renderer/core/script/pending_import_map.h index 3344fec..99a3578d 100644 --- a/third_party/blink/renderer/core/script/pending_import_map.h +++ b/third_party/blink/renderer/core/script/pending_import_map.h
@@ -32,7 +32,7 @@ // Note: Currently we only support inline import maps and PendingImportMap is // always ready. class CORE_EXPORT PendingImportMap final - : public GarbageCollectedFinalized<PendingImportMap> { + : public GarbageCollected<PendingImportMap> { public: // https://wicg.github.io/import-maps/#create-an-import-map-parse-result // for inline import maps.
diff --git a/third_party/blink/renderer/core/script/pending_script.h b/third_party/blink/renderer/core/script/pending_script.h index 8b8804168..f3f0c97 100644 --- a/third_party/blink/renderer/core/script/pending_script.h +++ b/third_party/blink/renderer/core/script/pending_script.h
@@ -61,9 +61,8 @@ // When "script is ready" // https://html.spec.whatwg.org/C/#the-script-is-ready, // PendingScriptClient is notified. -class CORE_EXPORT PendingScript - : public GarbageCollectedFinalized<PendingScript>, - public NameClient { +class CORE_EXPORT PendingScript : public GarbageCollected<PendingScript>, + public NameClient { public: virtual ~PendingScript();
diff --git a/third_party/blink/renderer/core/script/script.h b/third_party/blink/renderer/core/script/script.h index 2226029..1f633a9 100644 --- a/third_party/blink/renderer/core/script/script.h +++ b/third_party/blink/renderer/core/script/script.h
@@ -19,7 +19,7 @@ class WorkerGlobalScope; // https://html.spec.whatwg.org/C/#concept-script -class CORE_EXPORT Script : public GarbageCollectedFinalized<Script> { +class CORE_EXPORT Script : public GarbageCollected<Script> { public: virtual void Trace(Visitor* visitor) {}
diff --git a/third_party/blink/renderer/core/script/script_loader.h b/third_party/blink/renderer/core/script/script_loader.h index 0ac49da3b..c0cbbaf9 100644 --- a/third_party/blink/renderer/core/script/script_loader.h +++ b/third_party/blink/renderer/core/script/script_loader.h
@@ -47,10 +47,9 @@ class ScriptResource; class Modulator; -class CORE_EXPORT ScriptLoader final - : public GarbageCollectedFinalized<ScriptLoader>, - public PendingScriptClient, - public NameClient { +class CORE_EXPORT ScriptLoader final : public GarbageCollected<ScriptLoader>, + public PendingScriptClient, + public NameClient { USING_GARBAGE_COLLECTED_MIXIN(ScriptLoader); public:
diff --git a/third_party/blink/renderer/core/script/script_runner.h b/third_party/blink/renderer/core/script/script_runner.h index 75b6998..0e7c57da 100644 --- a/third_party/blink/renderer/core/script/script_runner.h +++ b/third_party/blink/renderer/core/script/script_runner.h
@@ -41,9 +41,8 @@ class PendingScript; class ScriptLoader; -class CORE_EXPORT ScriptRunner final - : public GarbageCollectedFinalized<ScriptRunner>, - public NameClient { +class CORE_EXPORT ScriptRunner final : public GarbageCollected<ScriptRunner>, + public NameClient { public: explicit ScriptRunner(Document*);
diff --git a/third_party/blink/renderer/core/script/xml_parser_script_runner.h b/third_party/blink/renderer/core/script/xml_parser_script_runner.h index ba652cd..9ed0ddc 100644 --- a/third_party/blink/renderer/core/script/xml_parser_script_runner.h +++ b/third_party/blink/renderer/core/script/xml_parser_script_runner.h
@@ -19,7 +19,7 @@ // // https://html.spec.whatwg.org/C/#parsing-xhtml-documents class XMLParserScriptRunner final - : public GarbageCollectedFinalized<XMLParserScriptRunner>, + : public GarbageCollected<XMLParserScriptRunner>, public PendingScriptClient { USING_GARBAGE_COLLECTED_MIXIN(XMLParserScriptRunner);
diff --git a/third_party/blink/renderer/core/scroll/scroll_animator_compositor_coordinator.h b/third_party/blink/renderer/core/scroll/scroll_animator_compositor_coordinator.h index e172f0d..32171ab4 100644 --- a/third_party/blink/renderer/core/scroll/scroll_animator_compositor_coordinator.h +++ b/third_party/blink/renderer/core/scroll/scroll_animator_compositor_coordinator.h
@@ -31,7 +31,7 @@ // See ScrollAnimator.h for more information about scroll animations. class CORE_EXPORT ScrollAnimatorCompositorCoordinator - : public GarbageCollectedFinalized<ScrollAnimatorCompositorCoordinator>, + : public GarbageCollected<ScrollAnimatorCompositorCoordinator>, private CompositorAnimationClient, CompositorAnimationDelegate { DISALLOW_COPY_AND_ASSIGN(ScrollAnimatorCompositorCoordinator);
diff --git a/third_party/blink/renderer/core/scroll/scroll_animator_test.cc b/third_party/blink/renderer/core/scroll/scroll_animator_test.cc index c67e52e..1983545 100644 --- a/third_party/blink/renderer/core/scroll/scroll_animator_test.cc +++ b/third_party/blink/renderer/core/scroll/scroll_animator_test.cc
@@ -54,7 +54,7 @@ } class MockScrollableAreaForAnimatorTest - : public GarbageCollectedFinalized<MockScrollableAreaForAnimatorTest>, + : public GarbageCollected<MockScrollableAreaForAnimatorTest>, public ScrollableArea { USING_GARBAGE_COLLECTED_MIXIN(MockScrollableAreaForAnimatorTest);
diff --git a/third_party/blink/renderer/core/scroll/scrollbar.h b/third_party/blink/renderer/core/scroll/scrollbar.h index 3bbdbf6..b4a27d2f 100644 --- a/third_party/blink/renderer/core/scroll/scrollbar.h +++ b/third_party/blink/renderer/core/scroll/scrollbar.h
@@ -47,7 +47,7 @@ class WebGestureEvent; class WebMouseEvent; -class CORE_EXPORT Scrollbar : public GarbageCollectedFinalized<Scrollbar>, +class CORE_EXPORT Scrollbar : public GarbageCollected<Scrollbar>, public DisplayItemClient { public: // Theme object ownership remains with the caller and it must outlive the
diff --git a/third_party/blink/renderer/core/scroll/scrollbar_test_suite.h b/third_party/blink/renderer/core/scroll/scrollbar_test_suite.h index 95766c57..8b5ccfaca 100644 --- a/third_party/blink/renderer/core/scroll/scrollbar_test_suite.h +++ b/third_party/blink/renderer/core/scroll/scrollbar_test_suite.h
@@ -34,7 +34,7 @@ bool is_popup_; }; -class MockScrollableArea : public GarbageCollectedFinalized<MockScrollableArea>, +class MockScrollableArea : public GarbageCollected<MockScrollableArea>, public ScrollableArea { USING_GARBAGE_COLLECTED_MIXIN(MockScrollableArea);
diff --git a/third_party/blink/renderer/core/streams/queue_with_sizes.cc b/third_party/blink/renderer/core/streams/queue_with_sizes.cc index 3130e85..1fcd96a 100644 --- a/third_party/blink/renderer/core/streams/queue_with_sizes.cc +++ b/third_party/blink/renderer/core/streams/queue_with_sizes.cc
@@ -23,7 +23,7 @@ } // namespace class QueueWithSizes::ValueSizePair final - : public GarbageCollectedFinalized<ValueSizePair> { + : public GarbageCollected<ValueSizePair> { public: ValueSizePair(v8::Local<v8::Value> value, double size, v8::Isolate* isolate) : value_(isolate, value), size_(size) {}
diff --git a/third_party/blink/renderer/core/streams/queue_with_sizes.h b/third_party/blink/renderer/core/streams/queue_with_sizes.h index e7816465..c114ea7 100644 --- a/third_party/blink/renderer/core/streams/queue_with_sizes.h +++ b/third_party/blink/renderer/core/streams/queue_with_sizes.h
@@ -22,7 +22,7 @@ // container, but require it to have a QueueWithSizes member. // https://streams.spec.whatwg.org/#queue-with-sizes class CORE_EXPORT QueueWithSizes final - : public GarbageCollectedFinalized<QueueWithSizes> { + : public GarbageCollected<QueueWithSizes> { public: QueueWithSizes(); ~QueueWithSizes();
diff --git a/third_party/blink/renderer/core/streams/readable_stream.h b/third_party/blink/renderer/core/streams/readable_stream.h index 72134c6..84093c6c 100644 --- a/third_party/blink/renderer/core/streams/readable_stream.h +++ b/third_party/blink/renderer/core/streams/readable_stream.h
@@ -31,7 +31,7 @@ // directly. // // TODO(ricea): Remove this when the V8 Extras implementation is removed. - class ReadHandle : public GarbageCollectedFinalized<ReadHandle> { + class ReadHandle : public GarbageCollected<ReadHandle> { public: ReadHandle() = default; virtual ~ReadHandle() = default;
diff --git a/third_party/blink/renderer/core/streams/readable_stream_default_controller_interface.h b/third_party/blink/renderer/core/streams/readable_stream_default_controller_interface.h index eb8b3bb..6699e71 100644 --- a/third_party/blink/renderer/core/streams/readable_stream_default_controller_interface.h +++ b/third_party/blink/renderer/core/streams/readable_stream_default_controller_interface.h
@@ -15,8 +15,7 @@ class Visitor; class CORE_EXPORT ReadableStreamDefaultControllerInterface - : public GarbageCollectedFinalized< - ReadableStreamDefaultControllerInterface> { + : public GarbageCollected<ReadableStreamDefaultControllerInterface> { public: static ReadableStreamDefaultControllerInterface* Create( ScriptState* script_state,
diff --git a/third_party/blink/renderer/core/streams/readable_stream_native.cc b/third_party/blink/renderer/core/streams/readable_stream_native.cc index 0f305b8..717d99c 100644 --- a/third_party/blink/renderer/core/streams/readable_stream_native.cc +++ b/third_party/blink/renderer/core/streams/readable_stream_native.cc
@@ -42,7 +42,7 @@ // and WritableStreamDefaultWriter::Write() to bypass promise creation and so // reduce the number of allocations on the hot path. class ReadableStreamNative::PipeToEngine final - : public GarbageCollectedFinalized<PipeToEngine> { + : public GarbageCollected<PipeToEngine> { public: PipeToEngine(ScriptState* script_state, PipeOptions pipe_options) : script_state_(script_state), pipe_options_(pipe_options) {} @@ -599,7 +599,7 @@ }; class ReadableStreamNative::TeeEngine final - : public GarbageCollectedFinalized<TeeEngine> { + : public GarbageCollected<TeeEngine> { public: TeeEngine() = default;
diff --git a/third_party/blink/renderer/core/streams/readable_stream_operations_test.cc b/third_party/blink/renderer/core/streams/readable_stream_operations_test.cc index 3defe07..467820d 100644 --- a/third_party/blink/renderer/core/streams/readable_stream_operations_test.cc +++ b/third_party/blink/renderer/core/streams/readable_stream_operations_test.cc
@@ -53,7 +53,7 @@ return ScriptValue(); } -class Iteration final : public GarbageCollectedFinalized<Iteration> { +class Iteration final : public GarbageCollected<Iteration> { public: Iteration() : is_set_(false), is_done_(false), is_valid_(true) {}
diff --git a/third_party/blink/renderer/core/streams/stream_algorithms.h b/third_party/blink/renderer/core/streams/stream_algorithms.h index 242a310..839ccd7 100644 --- a/third_party/blink/renderer/core/streams/stream_algorithms.h +++ b/third_party/blink/renderer/core/streams/stream_algorithms.h
@@ -22,8 +22,7 @@ // https://streams.spec.whatwg.org/#rs-default-controller-internal-slots. // Subclasses may refer to JavaScript functions and so objects of this type must // always be reachable by V8's garbage collector. -class StrategySizeAlgorithm - : public GarbageCollectedFinalized<StrategySizeAlgorithm> { +class StrategySizeAlgorithm : public GarbageCollected<StrategySizeAlgorithm> { public: virtual ~StrategySizeAlgorithm() = default; @@ -38,8 +37,7 @@ // method of the underlying object. These differ from other underlying // algorithms in that they can throw synchronously. Objects of this // type must always be reachable by V8's garbage collector. -class StreamStartAlgorithm - : public GarbageCollectedFinalized<StreamStartAlgorithm> { +class StreamStartAlgorithm : public GarbageCollected<StreamStartAlgorithm> { public: virtual ~StreamStartAlgorithm() = default; @@ -52,7 +50,7 @@ // Promise. This is used as the type for all the algorithms in the standard that // do not use StrategySizeAlgorithm or StreamStartAlgorithm. Objects of this // type must always be reachable by V8's garbage collector. -class StreamAlgorithm : public GarbageCollectedFinalized<StreamAlgorithm> { +class StreamAlgorithm : public GarbageCollected<StreamAlgorithm> { public: virtual ~StreamAlgorithm() = default;
diff --git a/third_party/blink/renderer/core/streams/stream_promise_resolver.h b/third_party/blink/renderer/core/streams/stream_promise_resolver.h index d34ce283..02a7014 100644 --- a/third_party/blink/renderer/core/streams/stream_promise_resolver.h +++ b/third_party/blink/renderer/core/streams/stream_promise_resolver.h
@@ -22,7 +22,7 @@ // v8::Local<v8::Promise>, or ScriptPromise if they are to be returned to the // bindings code. class CORE_EXPORT StreamPromiseResolver final - : public GarbageCollectedFinalized<StreamPromiseResolver> { + : public GarbageCollected<StreamPromiseResolver> { public: // Implements "a promise rejected with" from the INFRA standard. // https://www.w3.org/2001/tag/doc/promises-guide/#a-promise-rejected-with
diff --git a/third_party/blink/renderer/core/streams/transform_stream_transformer.h b/third_party/blink/renderer/core/streams/transform_stream_transformer.h index bb4bb041..9a1b9a3 100644 --- a/third_party/blink/renderer/core/streams/transform_stream_transformer.h +++ b/third_party/blink/renderer/core/streams/transform_stream_transformer.h
@@ -27,7 +27,7 @@ // uncollectable cycles implementations must not directly or indirectly strongly // reference any JS object. class CORE_EXPORT TransformStreamTransformer - : public GarbageCollectedFinalized<TransformStreamTransformer> { + : public GarbageCollected<TransformStreamTransformer> { public: TransformStreamTransformer() = default; virtual ~TransformStreamTransformer() = default;
diff --git a/third_party/blink/renderer/core/streams/writable_stream_default_controller_interface.h b/third_party/blink/renderer/core/streams/writable_stream_default_controller_interface.h index f403214..ae0563a 100644 --- a/third_party/blink/renderer/core/streams/writable_stream_default_controller_interface.h +++ b/third_party/blink/renderer/core/streams/writable_stream_default_controller_interface.h
@@ -16,8 +16,7 @@ class Visitor; class CORE_EXPORT WritableStreamDefaultControllerInterface - : public GarbageCollectedFinalized< - WritableStreamDefaultControllerInterface> { + : public GarbageCollected<WritableStreamDefaultControllerInterface> { public: WritableStreamDefaultControllerInterface(); virtual ~WritableStreamDefaultControllerInterface();
diff --git a/third_party/blink/renderer/core/streams/writable_stream_native.cc b/third_party/blink/renderer/core/streams/writable_stream_native.cc index 913ddadae..370c9429 100644 --- a/third_party/blink/renderer/core/streams/writable_stream_native.cc +++ b/third_party/blink/renderer/core/streams/writable_stream_native.cc
@@ -34,7 +34,7 @@ // The PendingAbortRequest type corresponds to the Record {[[promise]], // [[reason]], [[wasAlreadyErroring]]} from the standard. class WritableStreamNative::PendingAbortRequest final - : public GarbageCollectedFinalized<PendingAbortRequest> { + : public GarbageCollected<PendingAbortRequest> { public: PendingAbortRequest(v8::Isolate* isolate, StreamPromiseResolver* promise,
diff --git a/third_party/blink/renderer/core/style/content_data.h b/third_party/blink/renderer/core/style/content_data.h index 6ec8254..871d045 100644 --- a/third_party/blink/renderer/core/style/content_data.h +++ b/third_party/blink/renderer/core/style/content_data.h
@@ -40,7 +40,7 @@ enum class LegacyLayout; class PseudoElement; -class ContentData : public GarbageCollectedFinalized<ContentData> { +class ContentData : public GarbageCollected<ContentData> { public: static ContentData* Create(StyleImage*); static ContentData* Create(const String&);
diff --git a/third_party/blink/renderer/core/style/filter_operation.h b/third_party/blink/renderer/core/style/filter_operation.h index 10f8dfb4..48733f4 100644 --- a/third_party/blink/renderer/core/style/filter_operation.h +++ b/third_party/blink/renderer/core/style/filter_operation.h
@@ -45,9 +45,7 @@ // CSS Filters -class CORE_EXPORT FilterOperation - : public GarbageCollectedFinalized<FilterOperation> { - +class CORE_EXPORT FilterOperation : public GarbageCollected<FilterOperation> { public: enum OperationType { REFERENCE, // url(#somefilter)
diff --git a/third_party/blink/renderer/core/style/shape_value.h b/third_party/blink/renderer/core/style/shape_value.h index 8a7253e3..6cfb86cf 100644 --- a/third_party/blink/renderer/core/style/shape_value.h +++ b/third_party/blink/renderer/core/style/shape_value.h
@@ -38,7 +38,7 @@ namespace blink { -class ShapeValue final : public GarbageCollectedFinalized<ShapeValue> { +class ShapeValue final : public GarbageCollected<ShapeValue> { public: enum ShapeValueType { // The Auto value is defined by a null ShapeValue*
diff --git a/third_party/blink/renderer/core/style/style_image.h b/third_party/blink/renderer/core/style/style_image.h index 68897cd..ddf24cf 100644 --- a/third_party/blink/renderer/core/style/style_image.h +++ b/third_party/blink/renderer/core/style/style_image.h
@@ -45,7 +45,7 @@ // This class represents a CSS <image> value in ComputedStyle. The underlying // object can be an image, a gradient or anything else defined as an <image> // value. -class CORE_EXPORT StyleImage : public GarbageCollectedFinalized<StyleImage> { +class CORE_EXPORT StyleImage : public GarbageCollected<StyleImage> { public: virtual ~StyleImage() = default;
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time_container.h b/third_party/blink/renderer/core/svg/animation/smil_time_container.h index 3aea5661..14fd4a0 100644 --- a/third_party/blink/renderer/core/svg/animation/smil_time_container.h +++ b/third_party/blink/renderer/core/svg/animation/smil_time_container.h
@@ -44,8 +44,7 @@ class SVGElement; class SVGSVGElement; -class SMILTimeContainer final - : public GarbageCollectedFinalized<SMILTimeContainer> { +class SMILTimeContainer final : public GarbageCollected<SMILTimeContainer> { public: // Sorted list using AnimationId = std::pair<WeakMember<SVGElement>, QualifiedName>;
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 0702c36..7f57c8f 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
@@ -198,7 +198,7 @@ // This represents conditions on elements begin or end list that need to be // resolved on runtime, for example // <animate begin="otherElement.begin + 8s; button.click" ... /> - class Condition final : public GarbageCollectedFinalized<Condition> { + class Condition final : public GarbageCollected<Condition> { public: enum Type { kEventBase, kSyncBase, kAccessKey };
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc b/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc index 7b4d572..c471081 100644 --- a/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc +++ b/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc
@@ -93,7 +93,7 @@ private: class PauseControlImageObserver - : public GarbageCollectedFinalized<PauseControlImageObserver>, + : public GarbageCollected<PauseControlImageObserver>, public ImageObserver { USING_GARBAGE_COLLECTED_MIXIN(PauseControlImageObserver);
diff --git a/third_party/blink/renderer/core/svg/linear_gradient_attributes.h b/third_party/blink/renderer/core/svg/linear_gradient_attributes.h index d002ad5..0669fbb9 100644 --- a/third_party/blink/renderer/core/svg/linear_gradient_attributes.h +++ b/third_party/blink/renderer/core/svg/linear_gradient_attributes.h
@@ -93,7 +93,7 @@ // Wrapper object for the LinearGradientAttributes part object. class LinearGradientAttributesWrapper final - : public GarbageCollectedFinalized<LinearGradientAttributesWrapper> { + : public GarbageCollected<LinearGradientAttributesWrapper> { public: LinearGradientAttributesWrapper() = default;
diff --git a/third_party/blink/renderer/core/svg/properties/svg_property.h b/third_party/blink/renderer/core/svg/properties/svg_property.h index 516ed39..00a712e 100644 --- a/third_party/blink/renderer/core/svg/properties/svg_property.h +++ b/third_party/blink/renderer/core/svg/properties/svg_property.h
@@ -41,7 +41,7 @@ class SVGElement; class SVGAnimationElement; -class SVGPropertyBase : public GarbageCollectedFinalized<SVGPropertyBase> { +class SVGPropertyBase : public GarbageCollected<SVGPropertyBase> { public: // Properties do not have a primitive type by default typedef void PrimitiveType;
diff --git a/third_party/blink/renderer/core/svg/radial_gradient_attributes.h b/third_party/blink/renderer/core/svg/radial_gradient_attributes.h index 90b8711..3947fe58 100644 --- a/third_party/blink/renderer/core/svg/radial_gradient_attributes.h +++ b/third_party/blink/renderer/core/svg/radial_gradient_attributes.h
@@ -115,7 +115,7 @@ // Wrapper object for the RadialGradientAttributes part object. class RadialGradientAttributesWrapper final - : public GarbageCollectedFinalized<RadialGradientAttributesWrapper> { + : public GarbageCollected<RadialGradientAttributesWrapper> { public: RadialGradientAttributesWrapper() = default;
diff --git a/third_party/blink/renderer/core/svg/svg_animated_integer_optional_integer.h b/third_party/blink/renderer/core/svg/svg_animated_integer_optional_integer.h index 97a6a6e..c637a4f 100644 --- a/third_party/blink/renderer/core/svg/svg_animated_integer_optional_integer.h +++ b/third_party/blink/renderer/core/svg/svg_animated_integer_optional_integer.h
@@ -44,7 +44,7 @@ // |secondInteger| are used. // For example, see SVGFEDropShadowElement::stdDeviation{X,Y}() class SVGAnimatedIntegerOptionalInteger - : public GarbageCollectedFinalized<SVGAnimatedIntegerOptionalInteger>, + : public GarbageCollected<SVGAnimatedIntegerOptionalInteger>, public SVGAnimatedPropertyCommon<SVGIntegerOptionalInteger> { USING_GARBAGE_COLLECTED_MIXIN(SVGAnimatedIntegerOptionalInteger);
diff --git a/third_party/blink/renderer/core/svg/svg_animated_number_optional_number.h b/third_party/blink/renderer/core/svg/svg_animated_number_optional_number.h index b18b31d..dc7a84f0 100644 --- a/third_party/blink/renderer/core/svg/svg_animated_number_optional_number.h +++ b/third_party/blink/renderer/core/svg/svg_animated_number_optional_number.h
@@ -44,7 +44,7 @@ // are used. // For example, see SVGFEDropShadowElement::stdDeviation{X,Y}() class SVGAnimatedNumberOptionalNumber - : public GarbageCollectedFinalized<SVGAnimatedNumberOptionalNumber>, + : public GarbageCollected<SVGAnimatedNumberOptionalNumber>, public SVGAnimatedPropertyCommon<SVGNumberOptionalNumber> { USING_GARBAGE_COLLECTED_MIXIN(SVGAnimatedNumberOptionalNumber);
diff --git a/third_party/blink/renderer/core/svg/svg_animated_path.h b/third_party/blink/renderer/core/svg/svg_animated_path.h index efc68744..13f336e 100644 --- a/third_party/blink/renderer/core/svg/svg_animated_path.h +++ b/third_party/blink/renderer/core/svg/svg_animated_path.h
@@ -36,7 +36,7 @@ namespace blink { -class SVGAnimatedPath final : public GarbageCollectedFinalized<SVGAnimatedPath>, +class SVGAnimatedPath final : public GarbageCollected<SVGAnimatedPath>, public SVGAnimatedProperty<SVGPath> { USING_GARBAGE_COLLECTED_MIXIN(SVGAnimatedPath);
diff --git a/third_party/blink/renderer/core/svg/svg_animated_point_list.h b/third_party/blink/renderer/core/svg/svg_animated_point_list.h index d6af8b6b..5cc6fbf 100644 --- a/third_party/blink/renderer/core/svg/svg_animated_point_list.h +++ b/third_party/blink/renderer/core/svg/svg_animated_point_list.h
@@ -37,7 +37,7 @@ namespace blink { class SVGAnimatedPointList final - : public GarbageCollectedFinalized<SVGAnimatedPointList>, + : public GarbageCollected<SVGAnimatedPointList>, public SVGAnimatedProperty<SVGPointList> { USING_GARBAGE_COLLECTED_MIXIN(SVGAnimatedPointList);
diff --git a/third_party/blink/renderer/core/svg/svg_document_extensions.h b/third_party/blink/renderer/core/svg/svg_document_extensions.h index f14413f..abce5e9 100644 --- a/third_party/blink/renderer/core/svg/svg_document_extensions.h +++ b/third_party/blink/renderer/core/svg/svg_document_extensions.h
@@ -36,7 +36,7 @@ class SubtreeLayoutScope; class SVGDocumentExtensions final - : public GarbageCollectedFinalized<SVGDocumentExtensions> { + : public GarbageCollected<SVGDocumentExtensions> { public: explicit SVGDocumentExtensions(Document*); ~SVGDocumentExtensions();
diff --git a/third_party/blink/renderer/core/svg/svg_element_rare_data.h b/third_party/blink/renderer/core/svg/svg_element_rare_data.h index 8351a68..0693228 100644 --- a/third_party/blink/renderer/core/svg/svg_element_rare_data.h +++ b/third_party/blink/renderer/core/svg/svg_element_rare_data.h
@@ -31,8 +31,7 @@ class SVGResourceClient; -class SVGElementRareData final - : public GarbageCollectedFinalized<SVGElementRareData> { +class SVGElementRareData final : public GarbageCollected<SVGElementRareData> { public: SVGElementRareData() : corresponding_element_(nullptr),
diff --git a/third_party/blink/renderer/core/svg/svg_resource.h b/third_party/blink/renderer/core/svg/svg_resource.h index 7bf0b3a..21c8ca6 100644 --- a/third_party/blink/renderer/core/svg/svg_resource.h +++ b/third_party/blink/renderer/core/svg/svg_resource.h
@@ -59,7 +59,7 @@ // // <event> -> SVG...Element -> SVGResource -> SVGResourceClient(0..N) // -class SVGResource : public GarbageCollectedFinalized<SVGResource> { +class SVGResource : public GarbageCollected<SVGResource> { public: virtual ~SVGResource();
diff --git a/third_party/blink/renderer/core/svg/svg_static_string_list.h b/third_party/blink/renderer/core/svg/svg_static_string_list.h index 45244519..81beaf48 100644 --- a/third_party/blink/renderer/core/svg/svg_static_string_list.h +++ b/third_party/blink/renderer/core/svg/svg_static_string_list.h
@@ -43,9 +43,8 @@ // SVGStringList property implementations for SVGTests properties. // Inherits SVGAnimatedPropertyBase to enable XML attribute synchronization, but // this is never animated. -class SVGStaticStringList final - : public GarbageCollectedFinalized<SVGStaticStringList>, - public SVGAnimatedPropertyBase { +class SVGStaticStringList final : public GarbageCollected<SVGStaticStringList>, + public SVGAnimatedPropertyBase { USING_GARBAGE_COLLECTED_MIXIN(SVGStaticStringList); public:
diff --git a/third_party/blink/renderer/core/svg/svg_tree_scope_resources.h b/third_party/blink/renderer/core/svg/svg_tree_scope_resources.h index 6d745ebb5..f6fbe0c9 100644 --- a/third_party/blink/renderer/core/svg/svg_tree_scope_resources.h +++ b/third_party/blink/renderer/core/svg/svg_tree_scope_resources.h
@@ -19,7 +19,7 @@ // TreeScope. It's per-TreeScope because that matches the lookup scope of an // element's id (which is used to identify a resource.) class SVGTreeScopeResources final - : public GarbageCollectedFinalized<SVGTreeScopeResources> { + : public GarbageCollected<SVGTreeScopeResources> { public: explicit SVGTreeScopeResources(TreeScope*); ~SVGTreeScopeResources();
diff --git a/third_party/blink/renderer/core/svg/svg_view_spec.h b/third_party/blink/renderer/core/svg/svg_view_spec.h index 6b8dee6e..41867c7 100644 --- a/third_party/blink/renderer/core/svg/svg_view_spec.h +++ b/third_party/blink/renderer/core/svg/svg_view_spec.h
@@ -30,7 +30,7 @@ class SVGTransformList; class SVGViewElement; -class SVGViewSpec final : public GarbageCollectedFinalized<SVGViewSpec> { +class SVGViewSpec final : public GarbageCollected<SVGViewSpec> { public: static SVGViewSpec* CreateFromFragment(const String&); static SVGViewSpec* CreateForViewElement(const SVGViewElement&);
diff --git a/third_party/blink/renderer/core/testing/null_execution_context.h b/third_party/blink/renderer/core/testing/null_execution_context.h index b2a1e9b..26cd0cad 100644 --- a/third_party/blink/renderer/core/testing/null_execution_context.h +++ b/third_party/blink/renderer/core/testing/null_execution_context.h
@@ -16,10 +16,9 @@ namespace blink { -class NullExecutionContext - : public GarbageCollectedFinalized<NullExecutionContext>, - public SecurityContext, - public ExecutionContext { +class NullExecutionContext : public GarbageCollected<NullExecutionContext>, + public SecurityContext, + public ExecutionContext { USING_GARBAGE_COLLECTED_MIXIN(NullExecutionContext); public:
diff --git a/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h b/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h index 8473491..eab3581 100644 --- a/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h +++ b/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h
@@ -20,7 +20,7 @@ // Represents a set of task runners of the parent execution context, or default // task runners for the current thread if no execution context is available. class CORE_EXPORT ParentExecutionContextTaskRunners final - : public GarbageCollectedFinalized<ParentExecutionContextTaskRunners>, + : public GarbageCollected<ParentExecutionContextTaskRunners>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(ParentExecutionContextTaskRunners);
diff --git a/third_party/blink/renderer/core/workers/shared_worker_client_holder.h b/third_party/blink/renderer/core/workers/shared_worker_client_holder.h index 258cf5e1..5153e2c 100644 --- a/third_party/blink/renderer/core/workers/shared_worker_client_holder.h +++ b/third_party/blink/renderer/core/workers/shared_worker_client_holder.h
@@ -61,7 +61,7 @@ // SharedWorkerClientHolder is a per-Document object and owned by Document via // Supplement<Document>. class CORE_EXPORT SharedWorkerClientHolder final - : public GarbageCollectedFinalized<SharedWorkerClientHolder>, + : public GarbageCollected<SharedWorkerClientHolder>, public Supplement<Document>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(SharedWorkerClientHolder);
diff --git a/third_party/blink/renderer/core/workers/shared_worker_reporting_proxy.h b/third_party/blink/renderer/core/workers/shared_worker_reporting_proxy.h index e259234..1a8f0f9a 100644 --- a/third_party/blink/renderer/core/workers/shared_worker_reporting_proxy.h +++ b/third_party/blink/renderer/core/workers/shared_worker_reporting_proxy.h
@@ -18,7 +18,7 @@ // and owned by WebSharedWorkerImpl on the main thread, accessed from a worker // thread, and destroyed on the main thread. class SharedWorkerReportingProxy final - : public GarbageCollectedFinalized<SharedWorkerReportingProxy>, + : public GarbageCollected<SharedWorkerReportingProxy>, public WorkerReportingProxy { public: SharedWorkerReportingProxy(WebSharedWorkerImpl*,
diff --git a/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h b/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h index b5c0674..ffa5aa4 100644 --- a/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h +++ b/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h
@@ -42,7 +42,7 @@ // living on the worker thread (e.g., WorkerGlobalScope) but the parent object // can be destroyed before the completion of worker thread termination. class CORE_EXPORT ThreadedMessagingProxyBase - : public GarbageCollectedFinalized<ThreadedMessagingProxyBase> { + : public GarbageCollected<ThreadedMessagingProxyBase> { public: virtual ~ThreadedMessagingProxyBase();
diff --git a/third_party/blink/renderer/core/workers/worker_classic_script_loader.h b/third_party/blink/renderer/core/workers/worker_classic_script_loader.h index 0ee2070..b1531220 100644 --- a/third_party/blink/renderer/core/workers/worker_classic_script_loader.h +++ b/third_party/blink/renderer/core/workers/worker_classic_script_loader.h
@@ -53,7 +53,7 @@ class TextResourceDecoder; class CORE_EXPORT WorkerClassicScriptLoader final - : public GarbageCollectedFinalized<WorkerClassicScriptLoader>, + : public GarbageCollected<WorkerClassicScriptLoader>, public ThreadableLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(WorkerClassicScriptLoader);
diff --git a/third_party/blink/renderer/core/workers/worker_fetch_test_helper.h b/third_party/blink/renderer/core/workers/worker_fetch_test_helper.h index 3eb6d84..f165f7a 100644 --- a/third_party/blink/renderer/core/workers/worker_fetch_test_helper.h +++ b/third_party/blink/renderer/core/workers/worker_fetch_test_helper.h
@@ -16,7 +16,7 @@ namespace blink { -class ClientImpl final : public GarbageCollectedFinalized<ClientImpl>, +class ClientImpl final : public GarbageCollected<ClientImpl>, public ModuleScriptFetcher::Client { USING_GARBAGE_COLLECTED_MIXIN(ClientImpl);
diff --git a/third_party/blink/renderer/core/workers/worklet_module_responses_map.h b/third_party/blink/renderer/core/workers/worklet_module_responses_map.h index e6d31c5..12f6691 100644 --- a/third_party/blink/renderer/core/workers/worklet_module_responses_map.h +++ b/third_party/blink/renderer/core/workers/worklet_module_responses_map.h
@@ -33,7 +33,7 @@ // and any data passed in or read out is copied to ensure that this object's // internal state can be safely destructed from the main thread. class CORE_EXPORT WorkletModuleResponsesMap final - : public GarbageCollectedFinalized<WorkletModuleResponsesMap> { + : public GarbageCollected<WorkletModuleResponsesMap> { public: WorkletModuleResponsesMap() = default;
diff --git a/third_party/blink/renderer/core/xml/xpath_expression_node.h b/third_party/blink/renderer/core/xml/xpath_expression_node.h index 3f3f6ea..2a6e70e4 100644 --- a/third_party/blink/renderer/core/xml/xpath_expression_node.h +++ b/third_party/blink/renderer/core/xml/xpath_expression_node.h
@@ -53,7 +53,7 @@ bool had_type_conversion_error; }; -class CORE_EXPORT ParseNode : public GarbageCollectedFinalized<ParseNode> { +class CORE_EXPORT ParseNode : public GarbageCollected<ParseNode> { public: virtual ~ParseNode() = default; virtual void Trace(blink::Visitor* visitor) {}
diff --git a/third_party/blink/renderer/core/xml/xpath_step.h b/third_party/blink/renderer/core/xml/xpath_step.h index ec283202..5883c89 100644 --- a/third_party/blink/renderer/core/xml/xpath_step.h +++ b/third_party/blink/renderer/core/xml/xpath_step.h
@@ -57,7 +57,7 @@ kSelfAxis }; - class NodeTest final : public GarbageCollectedFinalized<NodeTest> { + class NodeTest final : public GarbageCollected<NodeTest> { public: enum Kind { kTextNodeTest,
diff --git a/third_party/blink/renderer/core/xml/xpath_value.h b/third_party/blink/renderer/core/xml/xpath_value.h index cfba3f1..a416d3ca 100644 --- a/third_party/blink/renderer/core/xml/xpath_value.h +++ b/third_party/blink/renderer/core/xml/xpath_value.h
@@ -37,7 +37,7 @@ struct EvaluationContext; -class ValueData final : public GarbageCollectedFinalized<ValueData> { +class ValueData final : public GarbageCollected<ValueData> { public: ValueData() : node_set_(NodeSet::Create()) {} explicit ValueData(const NodeSet& node_set)
diff --git a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc index 900edfd..ff1a3fb 100644 --- a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc +++ b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc
@@ -231,7 +231,7 @@ } // namespace class XMLHttpRequest::BlobLoader final - : public GarbageCollectedFinalized<XMLHttpRequest::BlobLoader>, + : public GarbageCollected<XMLHttpRequest::BlobLoader>, public FileReaderLoaderClient { public: BlobLoader(XMLHttpRequest* xhr, scoped_refptr<BlobDataHandle> handle)
diff --git a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request_progress_event_throttle.h b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request_progress_event_throttle.h index fdc728e..906a246 100644 --- a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request_progress_event_throttle.h +++ b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request_progress_event_throttle.h
@@ -50,7 +50,7 @@ // - ProgressEvent means an event using the ProgressEvent interface defined in // the spec. class XMLHttpRequestProgressEventThrottle final - : public GarbageCollectedFinalized<XMLHttpRequestProgressEventThrottle>, + : public GarbageCollected<XMLHttpRequestProgressEventThrottle>, public TimerBase { // Need to promptly stop this timer when it is deemed finalizable. USING_PRE_FINALIZER(XMLHttpRequestProgressEventThrottle, Stop);
diff --git a/third_party/blink/renderer/devtools/.eslintrc.js b/third_party/blink/renderer/devtools/.eslintrc.js index 401bb011..10cc7cb 100644 --- a/third_party/blink/renderer/devtools/.eslintrc.js +++ b/third_party/blink/renderer/devtools/.eslintrc.js
@@ -7,8 +7,7 @@ }, "parserOptions": { - "ecmaVersion": 9, - "sourceType": "module" + "ecmaVersion": 9 }, /**
diff --git a/third_party/blink/renderer/devtools/BUILD.gn b/third_party/blink/renderer/devtools/BUILD.gn index 3b9d6d3..917c44c 100644 --- a/third_party/blink/renderer/devtools/BUILD.gn +++ b/third_party/blink/renderer/devtools/BUILD.gn
@@ -786,6 +786,7 @@ "front_end/toolbox.js", "front_end/toolbox.json", "front_end/ui/ActionRegistry.js", + "front_end/ui/ARIAUtils.js", "front_end/ui/checkboxTextLabel.css", "front_end/ui/closeButton.css", "front_end/ui/confirmDialog.css", @@ -957,12 +958,6 @@ all_devtools_files += lighthouse_locale_files -all_devtools_modules = [ - "front_end/root.js", - "front_end/ui/ARIAUtils.js", - "front_end/ui/UI.js", -] - devtools_test_files = [ "//third_party/axe-core/axe.js", "front_end/accessibility_test_runner/AccessibilityPaneTestRunner.js", @@ -1154,12 +1149,6 @@ "front_end/worker_app.html", ] -copied_devtools_modules = [ - "$resources_out_dir/root.js", - "$resources_out_dir/ui/ARIAUtils.js", - "$resources_out_dir/ui/UI.js", -] - generated_applications = [ "$resources_out_dir/audits_worker.js", "$resources_out_dir/devtools_app.html", @@ -1278,7 +1267,7 @@ visibility = [ "//third_party/blink/*" ] group("devtools_all_files") { - data = all_devtools_files + all_devtools_modules + data = all_devtools_files deps = [ ":devtools_frontend_resources_data", ] @@ -1295,7 +1284,6 @@ ":devtools_extension_api", ":frontend_protocol_sources", ":supported_css_properties", - ":copy_devtools_modules", ] if (debug_devtools) { @@ -1360,8 +1348,8 @@ ] grd_files = - all_devtools_modules + generated_applications + - generated_non_autostart_non_remote_modules + devtools_embedder_scripts + + generated_applications + generated_non_autostart_non_remote_modules + + devtools_embedder_scripts + [ "$resources_out_dir/devtools_extension_api.js" ] # Bundle remote modules in ChromeOS. @@ -1480,24 +1468,6 @@ ] } -action("copy_devtools_modules") { - script = "scripts/build/copy_devtools_modules.py" - - deps = [ - ":build_release_devtools", - ] - - inputs = all_devtools_modules - outputs = copied_devtools_modules - - args = all_devtools_modules + [ - "--input_path", - rebase_path(".", root_build_dir), - "--output_path", - rebase_path(resources_out_dir, root_build_dir), - ] -} - if (debug_devtools) { resources_out_debug_dir = "$root_out_dir/resources/inspector/debug"
diff --git a/third_party/blink/renderer/devtools/PRESUBMIT.py b/third_party/blink/renderer/devtools/PRESUBMIT.py index 4768b66..f56c03d 100644 --- a/third_party/blink/renderer/devtools/PRESUBMIT.py +++ b/third_party/blink/renderer/devtools/PRESUBMIT.py
@@ -79,7 +79,7 @@ # Also fix semicolon to avoid confusing clang-format. eslint_process = popen([ local_node.node_path(), - local_node.eslint_path(), '--no-eslintrc', '--fix', '--env=es6', '--parser-options=ecmaVersion:9,sourceType:module', + local_node.eslint_path(), '--no-eslintrc', '--fix', '--env=es6', '--parser-options=ecmaVersion:9', '--rule={"curly": [2, "multi-or-nest", "consistent"], "semi": 2}' ] + affected_files) eslint_process.communicate()
diff --git a/third_party/blink/renderer/devtools/front_end/audits_worker/AuditsService.js b/third_party/blink/renderer/devtools/front_end/audits_worker/AuditsService.js index d3d7ca7..45a27ea 100644 --- a/third_party/blink/renderer/devtools/front_end/audits_worker/AuditsService.js +++ b/third_party/blink/renderer/devtools/front_end/audits_worker/AuditsService.js
@@ -5,7 +5,6 @@ /** * @interface */ -// eslint-disable-next-line const LighthousePort = class { /** * @param {!string} eventName, 'message', 'close'
diff --git a/third_party/blink/renderer/devtools/front_end/color_picker/Spectrum.js b/third_party/blink/renderer/devtools/front_end/color_picker/Spectrum.js index 098433e..bed6718 100644 --- a/third_party/blink/renderer/devtools/front_end/color_picker/Spectrum.js +++ b/third_party/blink/renderer/devtools/front_end/color_picker/Spectrum.js
@@ -147,7 +147,7 @@ UI.ARIAUtils.markAsButton(paletteSwitcher); UI.ARIAUtils.setAccessibleName(paletteSwitcher, ls`Preview palettes`); paletteSwitcher.tabIndex = 0; - self.onInvokeElement(paletteSwitcher, event => { + onInvokeElement(paletteSwitcher, event => { this._togglePalettePanel(true); event.consume(true); }); @@ -533,7 +533,7 @@ previewElement.appendChild(this._createPaletteColor(palette.colors[i], palette.colorNames[i])); for (; i < colorsPerPreviewRow; i++) previewElement.createChild('div', 'spectrum-palette-color empty-color'); - self.onInvokeElement(previewElement, event => { + onInvokeElement(previewElement, event => { this._paletteSelected(palette); event.consume(true); });
diff --git a/third_party/blink/renderer/devtools/front_end/components/ImagePreview.js b/third_party/blink/renderer/devtools/front_end/components/ImagePreview.js index 29af920..5059405f 100644 --- a/third_party/blink/renderer/devtools/front_end/components/ImagePreview.js +++ b/third_party/blink/renderer/devtools/front_end/components/ImagePreview.js
@@ -7,10 +7,11 @@ * @param {!SDK.Target} target * @param {string} originalImageURL * @param {boolean} showDimensions - * @param {!Object=} precomputedFeatures + * @param {!{precomputedFeatures: (!Object|undefined), imageAltText: (string|undefined)}=} options * @return {!Promise<?Element>} */ - static build(target, originalImageURL, showDimensions, precomputedFeatures) { + static build(target, originalImageURL, showDimensions, options = {}) { + const {precomputedFeatures, imageAltText} = options; const resourceTreeModel = target.model(SDK.ResourceTreeModel); if (!resourceTreeModel) return Promise.resolve(/** @type {?Element} */ (null)); @@ -28,6 +29,8 @@ const imageElement = createElement('img'); imageElement.addEventListener('load', buildContent, false); imageElement.addEventListener('error', () => fulfill(null), false); + if (imageAltText) + imageElement.alt = imageAltText; resource.populateImageSource(imageElement); return promise; @@ -94,4 +97,14 @@ return {renderedWidth: this.width, renderedHeight: this.height, currentSrc: this.currentSrc}; } } + + /** + * @param {string} url + * @return {string} + */ + static defaultAltTextForImageURL(url) { + const parsedImageURL = new Common.ParsedURL(url); + const imageSourceText = parsedImageURL.isValid ? parsedImageURL.displayName : ls`unknown source`; + return ls`Image from ${imageSourceText}`; + } };
diff --git a/third_party/blink/renderer/devtools/front_end/components/components_strings.grdp b/third_party/blink/renderer/devtools/front_end/components/components_strings.grdp index 837cd18..bf9098fd 100644 --- a/third_party/blink/renderer/devtools/front_end/components/components_strings.grdp +++ b/third_party/blink/renderer/devtools/front_end/components/components_strings.grdp
@@ -6,6 +6,9 @@ <message name="IDS_DEVTOOLS_131c97f8ba5bc0277386d660a18f13b6" desc="Text in Linkifier"> Reveal in <ph name="DESTINATION">$1s<ex>Sources panel</ex></ph> </message> + <message name="IDS_DEVTOOLS_3b9e0551f1ed4b83f205b7f1d26dde5c" desc="Alt text description of an image's source"> + unknown source + </message> <message name="IDS_DEVTOOLS_7f52f5f786eb8d9bf9e56ce89fb3db3a" desc="Show all link text content in JSPresentation Utils"> Show 1 more frame </message>
diff --git a/third_party/blink/renderer/devtools/front_end/console/ConsolePinPane.js b/third_party/blink/renderer/devtools/front_end/console/ConsolePinPane.js index 484211f..0db3def 100644 --- a/third_party/blink/renderer/devtools/front_end/console/ConsolePinPane.js +++ b/third_party/blink/renderer/devtools/front_end/console/ConsolePinPane.js
@@ -101,7 +101,7 @@ constructor(expression, pinPane) { super(); const deletePinIcon = UI.Icon.create('smallicon-cross', 'console-delete-pin'); - self.onInvokeElement(deletePinIcon, () => pinPane._removePin(this)); + onInvokeElement(deletePinIcon, () => pinPane._removePin(this)); deletePinIcon.tabIndex = 0; UI.ARIAUtils.setAccessibleName(deletePinIcon, ls`Remove expression`); UI.ARIAUtils.markAsButton(deletePinIcon);
diff --git a/third_party/blink/renderer/devtools/front_end/devtools_app.html b/third_party/blink/renderer/devtools/front_end/devtools_app.html index 2460c329..81b6645 100644 --- a/third_party/blink/renderer/devtools/front_end/devtools_app.html +++ b/third_party/blink/renderer/devtools/front_end/devtools_app.html
@@ -9,9 +9,8 @@ <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com"> <meta name="referrer" content="no-referrer"> - <script type="module" src="root.js"></script> - <script defer src="Runtime.js"></script> - <script defer src="devtools_app.js"></script> + <script src="Runtime.js"></script> + <script src="devtools_app.js"></script> </head> <body class="undocked" id="-blink-dev-tools"></body> </html>
diff --git a/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeOutline.js b/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeOutline.js index 3c67b1b..fc26b10c 100644 --- a/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeOutline.js +++ b/third_party/blink/renderer/devtools/front_end/elements/ElementsTreeOutline.js
@@ -541,7 +541,7 @@ const node = /** @type {!Elements.ElementsTreeElement} */ (listItem.treeElement).node(); const precomputedFeatures = await Components.ImagePreview.loadDimensionsForNode(node); const preview = await Components.ImagePreview.build( - node.domModel().target(), link[Elements.ElementsTreeElement.HrefSymbol], true, precomputedFeatures); + node.domModel().target(), link[Elements.ElementsTreeElement.HrefSymbol], true, {precomputedFeatures}); if (preview) popover.contentElement.appendChild(preview); return !!preview;
diff --git a/third_party/blink/renderer/devtools/front_end/inspector.html b/third_party/blink/renderer/devtools/front_end/inspector.html index 1ab4d319..b5d6f04e 100644 --- a/third_party/blink/renderer/devtools/front_end/inspector.html +++ b/third_party/blink/renderer/devtools/front_end/inspector.html
@@ -9,9 +9,8 @@ <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com"> <meta name="referrer" content="no-referrer"> - <script type="module" src="root.js"></script> - <script defer src="Runtime.js"></script> - <script defer src="inspector.js"></script> + <script src="Runtime.js"></script> + <script src="inspector.js"></script> </head> <body class="undocked" id="-blink-dev-tools"></body> </html>
diff --git a/third_party/blink/renderer/devtools/front_end/integration_test_runner.html b/third_party/blink/renderer/devtools/front_end/integration_test_runner.html index 073b301..ca7cc521 100644 --- a/third_party/blink/renderer/devtools/front_end/integration_test_runner.html +++ b/third_party/blink/renderer/devtools/front_end/integration_test_runner.html
@@ -8,9 +8,8 @@ <head> <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com"> - <script type="module" src="root.js"></script> - <script defer src="Runtime.js"></script> - <script defer src="integration_test_runner.js"></script> + <script src="Runtime.js"></script> + <script src="integration_test_runner.js"></script> </head> <body id="-blink-dev-tools"></body> </html>
diff --git a/third_party/blink/renderer/devtools/front_end/js_app.html b/third_party/blink/renderer/devtools/front_end/js_app.html index 8cc144c..7105918 100644 --- a/third_party/blink/renderer/devtools/front_end/js_app.html +++ b/third_party/blink/renderer/devtools/front_end/js_app.html
@@ -9,9 +9,8 @@ <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com"> <meta name="referrer" content="no-referrer"> - <script type="module" src="root.js"></script> - <script defer src="Runtime.js"></script> - <script defer src="js_app.js"></script> + <script src="Runtime.js"></script> + <script src="js_app.js"></script> </head> <body class="undocked" id="-blink-dev-tools"></body> </html>
diff --git a/third_party/blink/renderer/devtools/front_end/ndb_app.html b/third_party/blink/renderer/devtools/front_end/ndb_app.html index d6f17486..ac0dee1 100644 --- a/third_party/blink/renderer/devtools/front_end/ndb_app.html +++ b/third_party/blink/renderer/devtools/front_end/ndb_app.html
@@ -9,9 +9,8 @@ <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com"> <meta name="referrer" content="no-referrer"> - <script type="module" src="root.js"></script> - <script defer src="Runtime.js"></script> - <script defer src="ndb_app.js"></script> + <script src="Runtime.js"></script> + <script src="ndb_app.js"></script> </head> <body class="undocked" id="-blink-dev-tools"></body> </html>
diff --git a/third_party/blink/renderer/devtools/front_end/node_app.html b/third_party/blink/renderer/devtools/front_end/node_app.html index 5b475a11..05aa910 100644 --- a/third_party/blink/renderer/devtools/front_end/node_app.html +++ b/third_party/blink/renderer/devtools/front_end/node_app.html
@@ -9,9 +9,8 @@ <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com"> <meta name="referrer" content="no-referrer"> - <script type="module" src="root.js"></script> - <script defer src="Runtime.js"></script> - <script defer src="node_app.js"></script> + <script src="Runtime.js"></script> + <script src="node_app.js"></script> </head> <body class="undocked" id="-blink-dev-tools"></body> </html>
diff --git a/third_party/blink/renderer/devtools/front_end/resources/ServiceWorkersView.js b/third_party/blink/renderer/devtools/front_end/resources/ServiceWorkersView.js index 9dc6f28..3f29507d 100644 --- a/third_party/blink/renderer/devtools/front_end/resources/ServiceWorkersView.js +++ b/third_party/blink/renderer/devtools/front_end/resources/ServiceWorkersView.js
@@ -37,7 +37,7 @@ this._otherSWFilter.setAttribute('aria-checked', false); const filterLabel = this._otherSWFilter.createChild('label', 'service-worker-filter-label'); filterLabel.textContent = Common.UIString('Service workers from other origins'); - self.onInvokeElement(this._otherSWFilter, event => { + onInvokeElement(this._otherSWFilter, event => { if (event.target === this._otherSWFilter || event.target === filterLabel) this._toggleFilter(); }); @@ -437,7 +437,7 @@ errorsLabel.classList.add('link'); errorsLabel.tabIndex = 0; UI.ARIAUtils.setAccessibleName(errorsLabel, ls`${this._registration.errors.length} registration errors`); - self.onInvokeElement(errorsLabel, () => Common.console.show()); + onInvokeElement(errorsLabel, () => Common.console.show()); name.appendChild(errorsLabel); } this._sourceField.createChild('div', 'report-field-value-subtitle').textContent =
diff --git a/third_party/blink/renderer/devtools/front_end/root.js b/third_party/blink/renderer/devtools/front_end/root.js deleted file mode 100644 index 90ae39a..0000000 --- a/third_party/blink/renderer/devtools/front_end/root.js +++ /dev/null
@@ -1,5 +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 './ui/UI.js'; \ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/timeline/TimelineUIUtils.js b/third_party/blink/renderer/devtools/front_end/timeline/TimelineUIUtils.js index 0bba1a3..e89b1db3 100644 --- a/third_party/blink/renderer/devtools/front_end/timeline/TimelineUIUtils.js +++ b/third_party/blink/renderer/devtools/front_end/timeline/TimelineUIUtils.js
@@ -748,10 +748,12 @@ if (typeof event[Timeline.TimelineUIUtils._previewElementSymbol] === 'undefined') { let previewElement = null; const url = TimelineModel.TimelineData.forEvent(event).url; - if (url) - previewElement = await Components.ImagePreview.build(target, url, false); - else if (TimelineModel.TimelineData.forEvent(event).picture) + if (url) { + previewElement = await Components.ImagePreview.build( + target, url, false, {imageAltText: Components.ImagePreview.defaultAltTextForImageURL(url)}); + } else if (TimelineModel.TimelineData.forEvent(event).picture) { previewElement = await Timeline.TimelineUIUtils.buildPicturePreviewContent(event, target); + } event[Timeline.TimelineUIUtils._previewElementSymbol] = previewElement; } @@ -1259,8 +1261,10 @@ } } - if (!request.previewElement && request.url && target) - request.previewElement = await Components.ImagePreview.build(target, request.url, false); + if (!request.previewElement && request.url && target) { + request.previewElement = await Components.ImagePreview.build( + target, request.url, false, {imageAltText: Components.ImagePreview.defaultAltTextForImageURL(request.url)}); + } if (request.previewElement) contentHelper.appendElementRow(ls`Preview`, request.previewElement); return contentHelper.fragment; @@ -1503,6 +1507,7 @@ container.classList.add('image-preview-container', 'vbox', 'link'); const img = container.createChild('img'); img.src = imageURL; + img.alt = Components.ImagePreview.defaultAltTextForImageURL(imageURL); const paintProfilerButton = container.createChild('a'); paintProfilerButton.textContent = ls`Paint Profiler`; container.addEventListener(
diff --git a/third_party/blink/renderer/devtools/front_end/toolbox.html b/third_party/blink/renderer/devtools/front_end/toolbox.html index ab892052..c48ad36 100644 --- a/third_party/blink/renderer/devtools/front_end/toolbox.html +++ b/third_party/blink/renderer/devtools/front_end/toolbox.html
@@ -8,9 +8,8 @@ <head> <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' "> - <script type="module" src="root.js"></script> - <script defer src="Runtime.js"></script> - <script defer src="toolbox.js"></script> + <script src="Runtime.js"></script> + <script src="toolbox.js"></script> </head> <body class="undocked" id="-blink-dev-tools"></body> </html>
diff --git a/third_party/blink/renderer/devtools/front_end/ui/ARIAUtils.js b/third_party/blink/renderer/devtools/front_end/ui/ARIAUtils.js index 088e6ee..fd1aad50 100644 --- a/third_party/blink/renderer/devtools/front_end/ui/ARIAUtils.js +++ b/third_party/blink/renderer/devtools/front_end/ui/ARIAUtils.js
@@ -2,326 +2,327 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -let _id = 0; - -/** - * @param {string} prefix - * @return {string} - */ -export function nextId(prefix) { - return (prefix || '') + ++_id; -} +UI.ARIAUtils = {}; +UI.ARIAUtils._id = 0; /** * @param {!Element} label * @param {!Element} control */ -export function bindLabelToControl(label, control) { - const controlId = nextId('labelledControl'); +UI.ARIAUtils.bindLabelToControl = function(label, control) { + const controlId = UI.ARIAUtils.nextId('labelledControl'); control.id = controlId; label.setAttribute('for', controlId); -} +}; /** * @param {!Element} element */ -export function markAsAlert(element) { +UI.ARIAUtils.markAsAlert = function(element) { element.setAttribute('role', 'alert'); element.setAttribute('aria-live', 'polite'); -} +}; /** * @param {!Element} element */ -export function markAsButton(element) { +UI.ARIAUtils.markAsButton = function(element) { element.setAttribute('role', 'button'); -} +}; /** * @param {!Element} element */ -export function markAsCheckbox(element) { +UI.ARIAUtils.markAsCheckbox = function(element) { element.setAttribute('role', 'checkbox'); -} +}; /** * @param {!Element} element * @param {boolean=} modal */ -export function markAsDialog(element, modal) { +UI.ARIAUtils.markAsDialog = function(element, modal) { element.setAttribute('role', 'dialog'); if (modal) element.setAttribute('aria-modal', 'true'); -} +}; /** * @param {!Element} element */ -export function markAsGroup(element) { +UI.ARIAUtils.markAsGroup = function(element) { element.setAttribute('role', 'group'); -} +}; /** * @param {!Element} element */ -export function markAsLink(element) { +UI.ARIAUtils.markAsLink = function(element) { element.setAttribute('role', 'link'); -} +}; /** * @param {!Element} element */ -export function markAsMenuButton(element) { - markAsButton(element); +UI.ARIAUtils.markAsMenuButton = function(element) { + UI.ARIAUtils.markAsButton(element); element.setAttribute('aria-haspopup', true); -} +}; /** * @param {!Element} element */ -export function markAsProgressBar(element) { +UI.ARIAUtils.markAsProgressBar = function(element) { element.setAttribute('role', 'progressbar'); element.setAttribute('aria-valuemin', 0); element.setAttribute('aria-valuemax', 100); -} +}; /** * @param {!Element} element */ -export function markAsTab(element) { +UI.ARIAUtils.markAsTab = function(element) { element.setAttribute('role', 'tab'); -} +}; /** * @param {!Element} element */ -export function markAsTree(element) { +UI.ARIAUtils.markAsTree = function(element) { element.setAttribute('role', 'tree'); -} +}; /** * @param {!Element} element */ -export function markAsTreeitem(element) { +UI.ARIAUtils.markAsTreeitem = function(element) { element.setAttribute('role', 'treeitem'); -} +}; /** * @param {!Element} element */ -export function markAsTextBox(element) { +UI.ARIAUtils.markAsTextBox = function(element) { element.setAttribute('role', 'textbox'); -} +}; /** * @param {!Element} element */ -export function markAsMenu(element) { +UI.ARIAUtils.markAsMenu = function(element) { element.setAttribute('role', 'menu'); -} +}; /** * @param {!Element} element */ -export function markAsMenuItem(element) { +UI.ARIAUtils.markAsMenuItem = function(element) { element.setAttribute('role', 'menuitem'); -} +}; /** * @param {!Element} element */ -export function markAsMenuItemSubMenu(element) { - markAsMenuItem(element); +UI.ARIAUtils.markAsMenuItemSubMenu = function(element) { + UI.ARIAUtils.markAsMenuItem(element); element.setAttribute('aria-haspopup', true); -} +}; /** * Must contain children whose role is option. * @param {!Element} element */ -export function markAsListBox(element) { +UI.ARIAUtils.markAsListBox = function(element) { element.setAttribute('role', 'listbox'); -} +}; /** * @param {!Element} element */ -export function markAsMultiSelectable(element) { +UI.ARIAUtils.markAsMultiSelectable = function(element) { element.setAttribute('aria-multiselectable', 'true'); -} +}; /** * Must be contained in, or owned by, an element with the role listbox. * @param {!Element} element */ -export function markAsOption(element) { +UI.ARIAUtils.markAsOption = function(element) { element.setAttribute('role', 'option'); -} +}; /** * @param {!Element} element */ -export function markAsRadioGroup(element) { +UI.ARIAUtils.markAsRadioGroup = function(element) { element.setAttribute('role', 'radiogroup'); -} +}; /** * @param {!Element} element */ -export function markAsHidden(element) { +UI.ARIAUtils.markAsHidden = function(element) { element.setAttribute('aria-hidden', 'true'); -} +}; /** * @param {!Element} element * @param {number} level */ -export function markAsHeading(element, level) { +UI.ARIAUtils.markAsHeading = function(element, level) { element.setAttribute('role', 'heading'); element.setAttribute('aria-level', level); -} +}; /** * @param {!Element} element */ -export function markAsPoliteLiveRegion(element) { +UI.ARIAUtils.markAsPoliteLiveRegion = function(element) { element.setAttribute('aria-live', 'polite'); -} +}; /** * @param {!Element} element * @param {?string} placeholder */ -export function setPlaceholder(element, placeholder) { +UI.ARIAUtils.setPlaceholder = function(element, placeholder) { if (placeholder) element.setAttribute('aria-placeholder', placeholder); else element.removeAttribute('aria-placeholder'); -} +}; /** * @param {!Element} element */ -export function markAsPresentation(element) { +UI.ARIAUtils.markAsPresentation = function(element) { element.setAttribute('role', 'presentation'); -} +}; /** * @param {!Element} element */ -export function markAsStatus(element) { +UI.ARIAUtils.markAsStatus = function(element) { element.setAttribute('role', 'status'); -} +}; /** * @param {!Element} element */ -export function ensureId(element) { +UI.ARIAUtils.ensureId = function(element) { if (!element.id) - element.id = nextId('ariaElement'); -} + element.id = UI.ARIAUtils.nextId('ariaElement'); +}; + +/** + * @param {string} prefix + * @return {string} + */ +UI.ARIAUtils.nextId = function(prefix) { + return (prefix || '') + ++UI.ARIAUtils._id; +}; /** * @param {!Element} element * @param {?Element} controlledElement */ -export function setControls(element, controlledElement) { +UI.ARIAUtils.setControls = function(element, controlledElement) { if (!controlledElement) { element.removeAttribute('aria-controls'); return; } - ensureId(controlledElement); + UI.ARIAUtils.ensureId(controlledElement); element.setAttribute('aria-controls', controlledElement.id); -} +}; /** * @param {!Element} element * @param {boolean} value */ -export function setChecked(element, value) { +UI.ARIAUtils.setChecked = function(element, value) { element.setAttribute('aria-checked', !!value); -} +}; /** * @param {!Element} element */ -export function setCheckboxAsIndeterminate(element) { +UI.ARIAUtils.setCheckboxAsIndeterminate = function(element) { element.setAttribute('aria-checked', 'mixed'); -} +}; /** * @param {!Element} element * @param {boolean} value */ -export function setExpanded(element, value) { +UI.ARIAUtils.setExpanded = function(element, value) { element.setAttribute('aria-expanded', !!value); -} +}; /** * @param {!Element} element */ -export function unsetExpandable(element) { +UI.ARIAUtils.unsetExpandable = function(element) { element.removeAttribute('aria-expanded'); -} +}; /** * @param {!Element} element * @param {boolean} value */ -export function setSelected(element, value) { +UI.ARIAUtils.setSelected = function(element, value) { // aria-selected behaves differently for false and undefined. // Often times undefined values are unintentionally typed as booleans. // Use !! to make sure this is true or false. element.setAttribute('aria-selected', !!value); -} +}; /** * @param {!Element} element * @param {boolean} value */ -export function setInvalid(element, value) { +UI.ARIAUtils.setInvalid = function(element, value) { if (value) element.setAttribute('aria-invalid', value); else element.removeAttribute('aria-invalid'); -} +}; /** * @param {!Element} element * @param {boolean} value */ -export function setPressed(element, value) { +UI.ARIAUtils.setPressed = function(element, value) { // aria-pressed behaves differently for false and undefined. // Often times undefined values are unintentionally typed as booleans. // Use !! to make sure this is true or false. element.setAttribute('aria-pressed', !!value); -} +}; /** * @param {!Element} element * @param {number} value */ -export function setProgressBarCurrentPercentage(element, value) { +UI.ARIAUtils.setProgressBarCurrentPercentage = function(element, value) { element.setAttribute('aria-valuenow', value); -} +}; /** * @param {!Element} element * @param {string} name */ -export function setAccessibleName(element, name) { +UI.ARIAUtils.setAccessibleName = function(element, name) { element.setAttribute('aria-label', name); -} +}; /** @type {!WeakMap<!Element, !Element>} */ -const _descriptionMap = new WeakMap(); +UI.ARIAUtils._descriptionMap = new WeakMap(); /** * @param {!Element} element * @param {string} description */ -export function setDescription(element, description) { +UI.ARIAUtils.setDescription = function(element, description) { // Nodes in the accesesibility tree are made up of a core // triplet of "name", "value", "description" // The "description" field is taken from either @@ -347,12 +348,12 @@ // The rest of DevTools shouldn't have to worry about this, // so there is some unfortunate code below. - if (_descriptionMap.has(element)) - _descriptionMap.get(element).remove(); + if (UI.ARIAUtils._descriptionMap.has(element)) + UI.ARIAUtils._descriptionMap.get(element).remove(); element.removeAttribute('data-aria-utils-animation-hack'); if (!description) { - _descriptionMap.delete(element); + UI.ARIAUtils._descriptionMap.delete(element); element.removeAttribute('aria-describedby'); return; } @@ -362,9 +363,9 @@ const descriptionElement = createElement('span'); descriptionElement.textContent = description; descriptionElement.style.display = 'none'; - ensureId(descriptionElement); + UI.ARIAUtils.ensureId(descriptionElement); element.setAttribute('aria-describedby', descriptionElement.id); - _descriptionMap.set(element, descriptionElement); + UI.ARIAUtils._descriptionMap.set(element, descriptionElement); // Now we have to actually put this description element // somewhere in the DOM so that we can point to it. @@ -397,20 +398,20 @@ element.setAttribute('data-aria-utils-animation-hack', 'sorry'); element.addEventListener('animationend', () => { // Someone might have made a new description in the meantime. - if (_descriptionMap.get(element) !== descriptionElement) + if (UI.ARIAUtils._descriptionMap.get(element) !== descriptionElement) return; element.removeAttribute('data-aria-utils-animation-hack'); // Try it again. This time we are in the DOM, so it *should* work. element.insertAdjacentElement('afterend', descriptionElement); }, {once: true}); -} +}; /** * @param {!Element} element * @param {?Element} activedescendant */ -export function setActiveDescendant(element, activedescendant) { +UI.ARIAUtils.setActiveDescendant = function(element, activedescendant) { if (!activedescendant) { element.removeAttribute('aria-activedescendant'); return; @@ -418,19 +419,17 @@ console.assert(element.hasSameShadowRoot(activedescendant), 'elements are not in the same shadow dom'); - ensureId(activedescendant); + UI.ARIAUtils.ensureId(activedescendant); element.setAttribute('aria-activedescendant', activedescendant.id); -} - -const AlertElementSymbol = Symbol('AlertElementSybmol'); +}; /** * @param {string} message * @param {!Element} element */ -export function alert(message, element) { +UI.ARIAUtils.alert = function(message, element) { const document = element.ownerDocument; - if (!document[AlertElementSymbol]) { + if (!document[UI.ARIAUtils.AlertElementSymbol]) { const alertElement = document.body.createChild('div'); alertElement.style.position = 'absolute'; alertElement.style.left = '-999em'; @@ -438,54 +437,9 @@ alertElement.style.overflow = 'hidden'; alertElement.setAttribute('role', 'alert'); alertElement.setAttribute('aria-atomic', 'true'); - document[AlertElementSymbol] = alertElement; + document[UI.ARIAUtils.AlertElementSymbol] = alertElement; } - - document[AlertElementSymbol].textContent = message.trimEndWithMaxLength(10000); -} - -/** Legacy exported object @suppress {const} */ -self.UI = self.UI || {}; -self.UI.ARIAUtils = { - nextId, - bindLabelToControl, - markAsAlert, - markAsButton, - markAsCheckbox, - markAsDialog, - markAsGroup, - markAsLink, - markAsMenuButton, - markAsProgressBar, - markAsTab, - markAsTree, - markAsTreeitem, - markAsTextBox, - markAsMenu, - markAsMenuItem, - markAsMenuItemSubMenu, - markAsListBox, - markAsMultiSelectable, - markAsOption, - markAsRadioGroup, - markAsHidden, - markAsHeading, - markAsPoliteLiveRegion, - setPlaceholder, - markAsPresentation, - markAsStatus, - ensureId, - setControls, - setChecked, - setCheckboxAsIndeterminate, - setExpanded, - unsetExpandable, - setSelected, - setInvalid, - setPressed, - setProgressBarCurrentPercentage, - setAccessibleName, - setDescription, - setActiveDescendant, - alert, + document[UI.ARIAUtils.AlertElementSymbol].textContent = message.trimEndWithMaxLength(10000); }; + +UI.ARIAUtils.AlertElementSymbol = Symbol('AlertElementSybmol');
diff --git a/third_party/blink/renderer/devtools/front_end/ui/UI.js b/third_party/blink/renderer/devtools/front_end/ui/UI.js deleted file mode 100644 index 262177a9..0000000 --- a/third_party/blink/renderer/devtools/front_end/ui/UI.js +++ /dev/null
@@ -1,5 +0,0 @@ -import * as ARIAUtils from './ARIAUtils.js'; - -export { - ARIAUtils, -}; \ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/ui/module.json b/third_party/blink/renderer/devtools/front_end/ui/module.json index 2dcde6f..bd5f5a1e 100644 --- a/third_party/blink/renderer/devtools/front_end/ui/module.json +++ b/third_party/blink/renderer/devtools/front_end/ui/module.json
@@ -54,16 +54,13 @@ "SuggestBox.js", "TabbedPane.js", "UIUtils.js", + "ARIAUtils.js", "ZoomManager.js", "ShortcutsScreen.js", "Geometry.js", "XLink.js", "XWidget.js" ], - "modules": [ - "ARIAUtils.js", - "UI.js" - ], "resources": [ "checkboxTextLabel.css", "closeButton.css",
diff --git a/third_party/blink/renderer/devtools/front_end/worker_app.html b/third_party/blink/renderer/devtools/front_end/worker_app.html index c041d37..e5827b5e 100644 --- a/third_party/blink/renderer/devtools/front_end/worker_app.html +++ b/third_party/blink/renderer/devtools/front_end/worker_app.html
@@ -9,9 +9,8 @@ <meta charset="utf-8"> <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com"> <meta name="referrer" content="no-referrer"> - <script type="module" src="root.js"></script> - <script defer src="Runtime.js"></script> - <script defer src="worker_app.js"></script> + <script src="Runtime.js"></script> + <script src="worker_app.js"></script> </head> <body class="undocked" id="-blink-dev-tools"></body> </html>
diff --git a/third_party/blink/renderer/devtools/package.json b/third_party/blink/renderer/devtools/package.json index 42d8d90..feea3f1a 100644 --- a/third_party/blink/renderer/devtools/package.json +++ b/third_party/blink/renderer/devtools/package.json
@@ -35,10 +35,6 @@ "bugs": { "url": "https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component:Platform%3EDevTools%20&sort=-opened&colspec=ID%20Stars%20Owner%20Summary%20Modified%20Opened" }, - "type": "module", - "files": [ - "front_end/**/*.mjs" - ], "homepage": "https://devtools.chrome.com", "devDependencies": { "ajv": "^5.1.5"
diff --git a/third_party/blink/renderer/devtools/scripts/build/build_release_applications.py b/third_party/blink/renderer/devtools/scripts/build/build_release_applications.py index db32b006..74e1c10 100755 --- a/third_party/blink/renderer/devtools/scripts/build/build_release_applications.py +++ b/third_party/blink/renderer/devtools/scripts/build/build_release_applications.py
@@ -133,13 +133,13 @@ output = StringIO() with open(join(self.application_dir, html_name), 'r') as app_input_html: for line in app_input_html: - if ('<script ' in line and 'type="module"' not in line) or '<link ' in line: + if '<script ' in line or '<link ' in line: continue if '</head>' in line: self._write_include_tags(self.descriptors, output) js_file = join(self.application_dir, self.app_file('js')) if path.exists(js_file): - output.write(' <script type="module">%s</script>\n' % minify_js(read_file(js_file))) + output.write(' <script>%s</script>\n' % minify_js(read_file(js_file))) output.write(line) write_file(join(self.output_dir, html_name), output.getvalue()) @@ -154,7 +154,7 @@ def _generate_include_tag(self, resource_path): if resource_path.endswith('.js'): - return ' <script defer src="%s"></script>\n' % resource_path + return ' <script type="text/javascript" src="%s"></script>\n' % resource_path else: assert resource_path
diff --git a/third_party/blink/renderer/devtools/scripts/build/copy_devtools_modules.py b/third_party/blink/renderer/devtools/scripts/build/copy_devtools_modules.py deleted file mode 100755 index 10d9ee235..0000000 --- a/third_party/blink/renderer/devtools/scripts/build/copy_devtools_modules.py +++ /dev/null
@@ -1,32 +0,0 @@ -#!/usr/bin/env python -# -*- coding: 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. -""" -Copies the modules into the resources folder -""" - -from os.path import join, relpath -import shutil -import sys - - -def main(argv): - try: - input_path_flag_index = argv.index('--input_path') - input_path = argv[input_path_flag_index + 1] - output_path_flag_index = argv.index('--output_path') - output_path = argv[output_path_flag_index + 1] - devtools_modules = argv[1:input_path_flag_index] - except: - print 'Usage: %s module_1 module_2 ... module_N --input_path <input_path> --output_path <output_path>' % argv[0] - raise - - for file_name in devtools_modules: - shutil.copy(join(input_path, file_name), join(output_path, relpath(file_name, 'front_end'))) - - -if __name__ == '__main__': - sys.exit(main(sys.argv))
diff --git a/third_party/blink/renderer/devtools/scripts/build/modular_build.py b/third_party/blink/renderer/devtools/scripts/build/modular_build.py index c818ad95..90d6697 100755 --- a/third_party/blink/renderer/devtools/scripts/build/modular_build.py +++ b/third_party/blink/renderer/devtools/scripts/build/modular_build.py
@@ -76,7 +76,7 @@ for name in self.sorted_modules(): module = self.modules[name] skipped_files = set(module.get('skip_compilation', [])) - for script in module.get('scripts', []) + module.get('modules', []): + for script in module.get('scripts', []): if script not in skipped_files: files[path.normpath(path.join(self.application_dir, name, script))] = True return files.keys()
diff --git a/third_party/blink/renderer/devtools/scripts/check_localizability.js b/third_party/blink/renderer/devtools/scripts/check_localizability.js index 98e695c..f71a713 100644 --- a/third_party/blink/renderer/devtools/scripts/check_localizability.js +++ b/third_party/blink/renderer/devtools/scripts/check_localizability.js
@@ -285,7 +285,7 @@ if (path.extname(filePath) === '.grdp') return auditGrdpFile(filePath, fileContent, errors); - const ast = esprima.parseModule(fileContent, {loc: true}); + const ast = esprima.parse(fileContent, {loc: true}); const relativeFilePath = localizationUtils.getRelativeFilePathFromSrc(filePath); for (const node of ast.body)
diff --git a/third_party/blink/renderer/devtools/scripts/check_localizable_resources.js b/third_party/blink/renderer/devtools/scripts/check_localizable_resources.js index acf7e72..50a2859 100644 --- a/third_party/blink/renderer/devtools/scripts/check_localizable_resources.js +++ b/third_party/blink/renderer/devtools/scripts/check_localizable_resources.js
@@ -32,7 +32,6 @@ else await getErrors(); } catch (e) { - console.log(e.stack); console.log(`Error: ${e.message}`); process.exit(1); }
diff --git a/third_party/blink/renderer/devtools/scripts/compile_frontend.py b/third_party/blink/renderer/devtools/scripts/compile_frontend.py index 78a553da..53ad724f 100755 --- a/third_party/blink/renderer/devtools/scripts/compile_frontend.py +++ b/third_party/blink/renderer/devtools/scripts/compile_frontend.py
@@ -77,7 +77,6 @@ GLOBAL_EXTERNS_FILE = to_platform_path(path.join(DEVTOOLS_FRONTEND_PATH, 'externs.js')) DEFAULT_PROTOCOL_EXTERNS_FILE = path.join(DEVTOOLS_FRONTEND_PATH, 'protocol_externs.js') RUNTIME_FILE = to_platform_path(path.join(DEVTOOLS_FRONTEND_PATH, 'Runtime.js')) -ROOT_MODULE_FILE = to_platform_path(path.join(DEVTOOLS_FRONTEND_PATH, 'root.js')) CLOSURE_COMPILER_JAR = to_platform_path(path.join(SCRIPTS_PATH, 'closure', 'compiler.jar')) CLOSURE_RUNNER_JAR = to_platform_path(path.join(SCRIPTS_PATH, 'closure', 'closure_runner', 'closure_runner.jar')) @@ -280,8 +279,6 @@ namespace_externs_path, '--js', RUNTIME_FILE, - '--js', - ROOT_MODULE_FILE, ] all_files = descriptors.all_compiled_files()
diff --git a/third_party/blink/renderer/devtools/tsconfig.json b/third_party/blink/renderer/devtools/tsconfig.json new file mode 100644 index 0000000..1dbc1cc --- /dev/null +++ b/third_party/blink/renderer/devtools/tsconfig.json
@@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "typeRoots": ["../../../devtools-node-modules/third_party/node_modules/@types"] + } +}
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h index 2072655..9786766 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -102,7 +102,7 @@ }; class NameSourceRelatedObject final - : public GarbageCollectedFinalized<NameSourceRelatedObject> { + : public GarbageCollected<NameSourceRelatedObject> { public: WeakMember<AXObject> object; String text; @@ -168,14 +168,14 @@ namespace blink { -class MODULES_EXPORT AXObject : public GarbageCollectedFinalized<AXObject> { +class MODULES_EXPORT AXObject : public GarbageCollected<AXObject> { public: typedef HeapVector<Member<AXObject>> AXObjectVector; // Iterator for doing an in-order traversal of the accessibility tree. // Includes ignored objects in the traversal. class MODULES_EXPORT InOrderTraversalIterator final - : public GarbageCollectedFinalized<InOrderTraversalIterator> { + : public GarbageCollected<InOrderTraversalIterator> { public: ~InOrderTraversalIterator() = default; @@ -266,7 +266,7 @@ // Walks through all the unignored parents of the object up to the root. // Does not include the object itself in the list of ancestors. class MODULES_EXPORT AncestorsIterator final - : public GarbageCollectedFinalized<AncestorsIterator> { + : public GarbageCollected<AncestorsIterator> { public: ~AncestorsIterator() = default;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h index 34d7678..100038e6 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
@@ -268,7 +268,7 @@ AXObject* CreateFromInlineTextBox(AbstractInlineTextBox*); private: - struct AXEventParams final : public GarbageCollectedFinalized<AXEventParams> { + struct AXEventParams final : public GarbageCollected<AXEventParams> { AXEventParams(AXObject* target, ax::mojom::Event event_type, ax::mojom::EventFrom event_from) @@ -280,8 +280,7 @@ void Trace(Visitor* visitor) { visitor->Trace(target); } }; - struct TreeUpdateParams final - : public GarbageCollectedFinalized<TreeUpdateParams> { + struct TreeUpdateParams final : public GarbageCollected<TreeUpdateParams> { TreeUpdateParams(Node* node, base::OnceClosure callback) : node(node), callback(std::move(callback)) {} WeakMember<Node> node;
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h index 74770067..31fe8c6 100644 --- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h +++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h
@@ -26,7 +26,7 @@ // This is constructed on the main thread but it is used in the worklet backing // thread. class MODULES_EXPORT AnimationWorkletProxyClient - : public GarbageCollectedFinalized<AnimationWorkletProxyClient>, + : public GarbageCollected<AnimationWorkletProxyClient>, public Supplement<WorkerClients>, public AnimationWorkletMutator { USING_GARBAGE_COLLECTED_MIXIN(AnimationWorkletProxyClient);
diff --git a/third_party/blink/renderer/modules/animationworklet/animator.h b/third_party/blink/renderer/modules/animationworklet/animator.h index 67e6a0fb..bfafe97 100644 --- a/third_party/blink/renderer/modules/animationworklet/animator.h +++ b/third_party/blink/renderer/modules/animationworklet/animator.h
@@ -23,8 +23,7 @@ // Represents an animator instance. It owns the underlying |v8::Object| for the // instance and knows how to invoke the |animate| function on it. // See also |AnimationWorkletGlobalScope::CreateInstance|. -class Animator final : public GarbageCollectedFinalized<Animator>, - public NameClient { +class Animator final : public GarbageCollected<Animator>, public NameClient { public: Animator(v8::Isolate*, AnimatorDefinition*,
diff --git a/third_party/blink/renderer/modules/animationworklet/animator_definition.h b/third_party/blink/renderer/modules/animationworklet/animator_definition.h index 85658f2..09bf9c6 100644 --- a/third_party/blink/renderer/modules/animationworklet/animator_definition.h +++ b/third_party/blink/renderer/modules/animationworklet/animator_definition.h
@@ -21,7 +21,7 @@ // |AnimationWorkletGlobalScope::registerAnimator| to validate the provided // Javascript class before completing the registration. class MODULES_EXPORT AnimatorDefinition final - : public GarbageCollectedFinalized<AnimatorDefinition>, + : public GarbageCollected<AnimatorDefinition>, public NameClient { public: explicit AnimatorDefinition(V8AnimatorConstructor* constructor,
diff --git a/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.h b/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.h index 6fcf88b..f974bc49 100644 --- a/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.h +++ b/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.h
@@ -18,7 +18,7 @@ class ScriptState; class MODULES_EXPORT HTMLMediaElementAudioOutputDevice final - : public GarbageCollectedFinalized<HTMLMediaElementAudioOutputDevice>, + : public GarbageCollected<HTMLMediaElementAudioOutputDevice>, public Supplement<HTMLMediaElement> { USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElementAudioOutputDevice);
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_bridge.h b/third_party/blink/renderer/modules/background_fetch/background_fetch_bridge.h index f88536db..dd17dd1a 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_bridge.h +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_bridge.h
@@ -25,7 +25,7 @@ // connection to the BackgroundFetchService. It's keyed on an active Service // Worker Registration. class BackgroundFetchBridge final - : public GarbageCollectedFinalized<BackgroundFetchBridge>, + : public GarbageCollected<BackgroundFetchBridge>, public Supplement<ServiceWorkerRegistration> { USING_GARBAGE_COLLECTED_MIXIN(BackgroundFetchBridge);
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.h b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.h index c6ee8d86..3b425340 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.h +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.h
@@ -14,7 +14,7 @@ class BackgroundFetchBridge; class MODULES_EXPORT BackgroundFetchIconLoader final - : public GarbageCollectedFinalized<BackgroundFetchIconLoader> { + : public GarbageCollected<BackgroundFetchIconLoader> { public: // The bitmap may be empty if the request failed or the image data could not // be decoded. The int64_t returned is the scale of the ideal to chosen icon,
diff --git a/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.h b/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.h index 6e6d12f9..abd4ce4 100644 --- a/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.h +++ b/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.h
@@ -16,8 +16,7 @@ class BackgroundFetchManager; class ServiceWorkerRegistrationBackgroundFetch final - : public GarbageCollectedFinalized< - ServiceWorkerRegistrationBackgroundFetch>, + : public GarbageCollected<ServiceWorkerRegistrationBackgroundFetch>, public Supplement<ServiceWorkerRegistration> { USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistrationBackgroundFetch);
diff --git a/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.h b/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.h index 6c3c435e..ba2920e 100644 --- a/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.h +++ b/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.h
@@ -17,7 +17,7 @@ class ServiceWorkerRegistration; class ServiceWorkerRegistrationSync final - : public GarbageCollectedFinalized<ServiceWorkerRegistrationSync>, + : public GarbageCollected<ServiceWorkerRegistrationSync>, public Supplement<ServiceWorkerRegistration> { USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistrationSync);
diff --git a/third_party/blink/renderer/modules/battery/battery_dispatcher.h b/third_party/blink/renderer/modules/battery/battery_dispatcher.h index e1b4965e..20a75a80 100644 --- a/third_party/blink/renderer/modules/battery/battery_dispatcher.h +++ b/third_party/blink/renderer/modules/battery/battery_dispatcher.h
@@ -16,7 +16,7 @@ namespace blink { class MODULES_EXPORT BatteryDispatcher final - : public GarbageCollectedFinalized<BatteryDispatcher>, + : public GarbageCollected<BatteryDispatcher>, public PlatformEventDispatcher { USING_GARBAGE_COLLECTED_MIXIN(BatteryDispatcher);
diff --git a/third_party/blink/renderer/modules/beacon/navigator_beacon.h b/third_party/blink/renderer/modules/beacon/navigator_beacon.h index 57ba79d..4548251 100644 --- a/third_party/blink/renderer/modules/beacon/navigator_beacon.h +++ b/third_party/blink/renderer/modules/beacon/navigator_beacon.h
@@ -16,7 +16,7 @@ class KURL; class ArrayBufferViewOrBlobOrStringOrFormData; -class NavigatorBeacon final : public GarbageCollectedFinalized<NavigatorBeacon>, +class NavigatorBeacon final : public GarbageCollected<NavigatorBeacon>, public Supplement<Navigator> { USING_GARBAGE_COLLECTED_MIXIN(NavigatorBeacon);
diff --git a/third_party/blink/renderer/modules/cache_storage/cache.cc b/third_party/blink/renderer/modules/cache_storage/cache.cc index 844223a..2af08c3 100644 --- a/third_party/blink/renderer/modules/cache_storage/cache.cc +++ b/third_party/blink/renderer/modules/cache_storage/cache.cc
@@ -204,7 +204,7 @@ }; class Cache::BarrierCallbackForPut final - : public GarbageCollectedFinalized<BarrierCallbackForPut> { + : public GarbageCollected<BarrierCallbackForPut> { public: BarrierCallbackForPut(wtf_size_t number_of_operations, Cache* cache, @@ -354,7 +354,7 @@ }; class Cache::BlobHandleCallbackForPut final - : public GarbageCollectedFinalized<BlobHandleCallbackForPut>, + : public GarbageCollected<BlobHandleCallbackForPut>, public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(BlobHandleCallbackForPut); @@ -400,7 +400,7 @@ }; class Cache::CodeCacheHandleCallbackForPut final - : public GarbageCollectedFinalized<CodeCacheHandleCallbackForPut>, + : public GarbageCollected<CodeCacheHandleCallbackForPut>, public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(CodeCacheHandleCallbackForPut);
diff --git a/third_party/blink/renderer/modules/cache_storage/cache_test.cc b/third_party/blink/renderer/modules/cache_storage/cache_test.cc index 2c8cb7d..6366db2 100644 --- a/third_party/blink/renderer/modules/cache_storage/cache_test.cc +++ b/third_party/blink/renderer/modules/cache_storage/cache_test.cc
@@ -51,7 +51,7 @@ "NotSupportedError: Method is not implemented."; class ScopedFetcherForTests final - : public GarbageCollectedFinalized<ScopedFetcherForTests>, + : public GarbageCollected<ScopedFetcherForTests>, public GlobalFetch::ScopedFetcher { USING_GARBAGE_COLLECTED_MIXIN(ScopedFetcherForTests);
diff --git a/third_party/blink/renderer/modules/cache_storage/global_cache_storage.cc b/third_party/blink/renderer/modules/cache_storage/global_cache_storage.cc index fd9d7a9..483b7a3 100644 --- a/third_party/blink/renderer/modules/cache_storage/global_cache_storage.cc +++ b/third_party/blink/renderer/modules/cache_storage/global_cache_storage.cc
@@ -19,7 +19,7 @@ template <typename T> class GlobalCacheStorageImpl final - : public GarbageCollectedFinalized<GlobalCacheStorageImpl<T>>, + : public GarbageCollected<GlobalCacheStorageImpl<T>>, public Supplement<T> { USING_GARBAGE_COLLECTED_MIXIN(GlobalCacheStorageImpl);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h index 0e164085d..ba1967c 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h
@@ -25,7 +25,7 @@ class Element; class CanvasRenderingContext2DState final - : public GarbageCollectedFinalized<CanvasRenderingContext2DState>, + : public GarbageCollected<CanvasRenderingContext2DState>, public FontSelectorClient { USING_GARBAGE_COLLECTED_MIXIN(CanvasRenderingContext2DState);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc index 91e8444..feb9aba 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc
@@ -155,7 +155,7 @@ Persistent<MemoryCache> global_memory_cache_; std::unique_ptr<ScopedAccelerated2dCanvasForTest> allow_accelerated_; - class WrapGradients final : public GarbageCollectedFinalized<WrapGradients> { + class WrapGradients final : public GarbageCollected<WrapGradients> { public: void Trace(blink::Visitor* visitor) { visitor->Trace(opaque_gradient_);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/hit_region.h b/third_party/blink/renderer/modules/canvas/canvas2d/hit_region.h index d581278..909768d9 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/hit_region.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/hit_region.h
@@ -15,7 +15,7 @@ namespace blink { -class HitRegion final : public GarbageCollectedFinalized<HitRegion> { +class HitRegion final : public GarbageCollected<HitRegion> { public: HitRegion(const Path&, const HitRegionOptions*); virtual ~HitRegion() = default; @@ -37,8 +37,7 @@ WindRule fill_rule_; }; -class HitRegionManager final - : public GarbageCollectedFinalized<HitRegionManager> { +class HitRegionManager final : public GarbageCollected<HitRegionManager> { public: HitRegionManager() = default; ~HitRegionManager() {}
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc index 60872e0e..0ca5726 100644 --- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc
@@ -182,8 +182,13 @@ if (image->IsTextureBacked()) { // Before discarding the image resource, we need to flush pending render ops // to fully resolve the snapshot. - image->PaintImageForCurrentFrame().GetSkImage()->getBackendTexture( - true); // Flush pending ops. + // We can only do this if the skImage is not null + if (auto skImage = image->PaintImageForCurrentFrame().GetSkImage()) { + skImage->getBackendTexture(true); // Flush pending ops. + } else { + // If the SkImage was null, we better return a null ImageBitmap + return nullptr; + } } Host()->DiscardResourceProvider(); // "Transfer" means no retained buffer. return ImageBitmap::Create(std::move(image));
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_promise.h b/third_party/blink/renderer/modules/clipboard/clipboard_promise.h index 9867510..c4191eb 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_promise.h +++ b/third_party/blink/renderer/modules/clipboard/clipboard_promise.h
@@ -21,9 +21,8 @@ class ScriptPromiseResolver; -class ClipboardPromise final - : public GarbageCollectedFinalized<ClipboardPromise>, - public ContextLifecycleObserver { +class ClipboardPromise final : public GarbageCollected<ClipboardPromise>, + public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(ClipboardPromise); public:
diff --git a/third_party/blink/renderer/modules/content_index/content_index_icon_loader.h b/third_party/blink/renderer/modules/content_index/content_index_icon_loader.h index d49fc1d..2643f06 100644 --- a/third_party/blink/renderer/modules/content_index/content_index_icon_loader.h +++ b/third_party/blink/renderer/modules/content_index/content_index_icon_loader.h
@@ -17,7 +17,7 @@ class ExecutionContext; class MODULES_EXPORT ContentIndexIconLoader final - : public GarbageCollectedFinalized<ContentIndexIconLoader> { + : public GarbageCollected<ContentIndexIconLoader> { public: using IconsCallback = base::OnceCallback<void(mojom::blink::ContentDescriptionPtr description,
diff --git a/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.h b/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.h index 5276c31..7852eba 100644 --- a/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.h +++ b/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.h
@@ -16,7 +16,7 @@ class ContentIndex; class ServiceWorkerRegistrationContentIndex final - : public GarbageCollectedFinalized<ServiceWorkerRegistrationContentIndex>, + : public GarbageCollected<ServiceWorkerRegistrationContentIndex>, public Supplement<ServiceWorkerRegistration> { USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistrationContentIndex);
diff --git a/third_party/blink/renderer/modules/credentialmanager/credential_manager_proxy.h b/third_party/blink/renderer/modules/credentialmanager/credential_manager_proxy.h index fd21f86..25f046d 100644 --- a/third_party/blink/renderer/modules/credentialmanager/credential_manager_proxy.h +++ b/third_party/blink/renderer/modules/credentialmanager/credential_manager_proxy.h
@@ -29,7 +29,7 @@ // whose global object owns the CredentialsContainer instance on which the // method was called. class MODULES_EXPORT CredentialManagerProxy - : public GarbageCollectedFinalized<CredentialManagerProxy>, + : public GarbageCollected<CredentialManagerProxy>, public Supplement<Document> { USING_GARBAGE_COLLECTED_MIXIN(CredentialManagerProxy);
diff --git a/third_party/blink/renderer/modules/csspaint/css_paint_definition.h b/third_party/blink/renderer/modules/csspaint/css_paint_definition.h index 70b49fbe..d885536 100644 --- a/third_party/blink/renderer/modules/csspaint/css_paint_definition.h +++ b/third_party/blink/renderer/modules/csspaint/css_paint_definition.h
@@ -30,7 +30,7 @@ // the author. It will store the properties for invalidation and input argument // types as well. class MODULES_EXPORT CSSPaintDefinition final - : public GarbageCollectedFinalized<CSSPaintDefinition>, + : public GarbageCollected<CSSPaintDefinition>, public NameClient { public: CSSPaintDefinition(
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.h b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.h index b7dcf27..8182e1f0 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.h +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.h
@@ -20,7 +20,7 @@ // A proxy for PaintWorklet to talk to PaintWorkletGlobalScope. class MODULES_EXPORT PaintWorkletGlobalScopeProxy - : public GarbageCollectedFinalized<PaintWorkletGlobalScopeProxy>, + : public GarbageCollected<PaintWorkletGlobalScopeProxy>, public WorkletGlobalScopeProxy { USING_GARBAGE_COLLECTED_MIXIN(PaintWorkletGlobalScopeProxy);
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h index 8312dc5..8c5f1bc 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h
@@ -30,7 +30,7 @@ // This class is constructed on the main thread but it is used in the worklet // backing thread. The entire class is used for off-thread CSS Paint. class MODULES_EXPORT PaintWorkletProxyClient - : public GarbageCollectedFinalized<PaintWorkletProxyClient>, + : public GarbageCollected<PaintWorkletProxyClient>, public Supplement<WorkerClients>, public PaintWorkletPainter { USING_GARBAGE_COLLECTED_MIXIN(PaintWorkletProxyClient);
diff --git a/third_party/blink/renderer/modules/device_orientation/device_motion_event_pump.h b/third_party/blink/renderer/modules/device_orientation/device_motion_event_pump.h index 6f36eeb..caec1ea5 100644 --- a/third_party/blink/renderer/modules/device_orientation/device_motion_event_pump.h +++ b/third_party/blink/renderer/modules/device_orientation/device_motion_event_pump.h
@@ -17,7 +17,7 @@ class PlatformEventController; class MODULES_EXPORT DeviceMotionEventPump - : public GarbageCollectedFinalized<DeviceMotionEventPump>, + : public GarbageCollected<DeviceMotionEventPump>, public DeviceSensorEventPump { USING_GARBAGE_COLLECTED_MIXIN(DeviceMotionEventPump);
diff --git a/third_party/blink/renderer/modules/device_orientation/device_motion_event_pump_unittest.cc b/third_party/blink/renderer/modules/device_orientation/device_motion_event_pump_unittest.cc index bf1c8a75..83d6a7d 100644 --- a/third_party/blink/renderer/modules/device_orientation/device_motion_event_pump_unittest.cc +++ b/third_party/blink/renderer/modules/device_orientation/device_motion_event_pump_unittest.cc
@@ -24,7 +24,7 @@ using device::FakeSensorProvider; class MockDeviceMotionController final - : public GarbageCollectedFinalized<MockDeviceMotionController>, + : public GarbageCollected<MockDeviceMotionController>, public PlatformEventController { USING_GARBAGE_COLLECTED_MIXIN(MockDeviceMotionController);
diff --git a/third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump.h b/third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump.h index 3b2b564..e76252c 100644 --- a/third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump.h +++ b/third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump.h
@@ -17,7 +17,7 @@ class PlatformEventController; class MODULES_EXPORT DeviceOrientationEventPump - : public GarbageCollectedFinalized<DeviceOrientationEventPump>, + : public GarbageCollected<DeviceOrientationEventPump>, public DeviceSensorEventPump { USING_GARBAGE_COLLECTED_MIXIN(DeviceOrientationEventPump);
diff --git a/third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump_unittest.cc b/third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump_unittest.cc index db858fc..f3f6636 100644 --- a/third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump_unittest.cc +++ b/third_party/blink/renderer/modules/device_orientation/device_orientation_event_pump_unittest.cc
@@ -27,7 +27,7 @@ using device::FakeSensorProvider; class MockDeviceOrientationController final - : public GarbageCollectedFinalized<MockDeviceOrientationController>, + : public GarbageCollected<MockDeviceOrientationController>, public PlatformEventController { USING_GARBAGE_COLLECTED_MIXIN(MockDeviceOrientationController);
diff --git a/third_party/blink/renderer/modules/device_orientation/device_sensor_entry.h b/third_party/blink/renderer/modules/device_orientation/device_sensor_entry.h index d11d967..d1954ce 100644 --- a/third_party/blink/renderer/modules/device_orientation/device_sensor_entry.h +++ b/third_party/blink/renderer/modules/device_orientation/device_sensor_entry.h
@@ -20,7 +20,7 @@ class DeviceSensorEventPump; -class DeviceSensorEntry : public GarbageCollectedFinalized<DeviceSensorEntry>, +class DeviceSensorEntry : public GarbageCollected<DeviceSensorEntry>, public device::mojom::blink::SensorClient { USING_PRE_FINALIZER(DeviceSensorEntry, Dispose);
diff --git a/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.h b/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.h index 6d2a65c4..fb687dfd 100644 --- a/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.h +++ b/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.h
@@ -27,7 +27,7 @@ class WebContentDecryptionModule; class MODULES_EXPORT HTMLMediaElementEncryptedMedia final - : public GarbageCollectedFinalized<HTMLMediaElementEncryptedMedia>, + : public GarbageCollected<HTMLMediaElementEncryptedMedia>, public Supplement<HTMLMediaElement>, public WebMediaPlayerEncryptedMediaClient { USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElementEncryptedMedia);
diff --git a/third_party/blink/renderer/modules/encryptedmedia/media_key_session.cc b/third_party/blink/renderer/modules/encryptedmedia/media_key_session.cc index 664e74c5..c72276e1 100644 --- a/third_party/blink/renderer/modules/encryptedmedia/media_key_session.cc +++ b/third_party/blink/renderer/modules/encryptedmedia/media_key_session.cc
@@ -133,7 +133,7 @@ // A class holding a pending action. class MediaKeySession::PendingAction final - : public GarbageCollectedFinalized<MediaKeySession::PendingAction> { + : public GarbageCollected<MediaKeySession::PendingAction> { public: enum Type { kGenerateRequest, kLoad, kUpdate, kClose, kRemove };
diff --git a/third_party/blink/renderer/modules/encryptedmedia/media_key_status_map.cc b/third_party/blink/renderer/modules/encryptedmedia/media_key_status_map.cc index 11569cd..e5f77707 100644 --- a/third_party/blink/renderer/modules/encryptedmedia/media_key_status_map.cc +++ b/third_party/blink/renderer/modules/encryptedmedia/media_key_status_map.cc
@@ -18,7 +18,7 @@ // Represents the key ID and associated status. class MediaKeyStatusMap::MapEntry final - : public GarbageCollectedFinalized<MediaKeyStatusMap::MapEntry> { + : public GarbageCollected<MediaKeyStatusMap::MapEntry> { public: MapEntry(WebData key_id, const String& status) : key_id_(DOMArrayBuffer::Create(scoped_refptr<SharedBuffer>(key_id))),
diff --git a/third_party/blink/renderer/modules/encryptedmedia/media_keys.cc b/third_party/blink/renderer/modules/encryptedmedia/media_keys.cc index 6fdacf0..6197e7c 100644 --- a/third_party/blink/renderer/modules/encryptedmedia/media_keys.cc +++ b/third_party/blink/renderer/modules/encryptedmedia/media_keys.cc
@@ -52,7 +52,7 @@ // A class holding a pending action. class MediaKeys::PendingAction final - : public GarbageCollectedFinalized<MediaKeys::PendingAction> { + : public GarbageCollected<MediaKeys::PendingAction> { public: enum class Type { kSetServerCertificate, kGetStatusForPolicy };
diff --git a/third_party/blink/renderer/modules/eventsource/event_source_parser.h b/third_party/blink/renderer/modules/eventsource/event_source_parser.h index 7596ab2..e2b7905 100644 --- a/third_party/blink/renderer/modules/eventsource/event_source_parser.h +++ b/third_party/blink/renderer/modules/eventsource/event_source_parser.h
@@ -16,7 +16,7 @@ namespace blink { class MODULES_EXPORT EventSourceParser final - : public GarbageCollectedFinalized<EventSourceParser> { + : public GarbageCollected<EventSourceParser> { public: class MODULES_EXPORT Client : public GarbageCollectedMixin { public:
diff --git a/third_party/blink/renderer/modules/eventsource/event_source_parser_test.cc b/third_party/blink/renderer/modules/eventsource/event_source_parser_test.cc index f7ce421b..d36aed3 100644 --- a/third_party/blink/renderer/modules/eventsource/event_source_parser_test.cc +++ b/third_party/blink/renderer/modules/eventsource/event_source_parser_test.cc
@@ -35,7 +35,7 @@ const uint64_t reconnection_time; }; -class Client : public GarbageCollectedFinalized<Client>, +class Client : public GarbageCollected<Client>, public EventSourceParser::Client { USING_GARBAGE_COLLECTED_MIXIN(Client); @@ -57,7 +57,7 @@ Vector<EventOrReconnectionTimeSetting> events_; }; -class StoppingClient : public GarbageCollectedFinalized<StoppingClient>, +class StoppingClient : public GarbageCollected<StoppingClient>, public EventSourceParser::Client { USING_GARBAGE_COLLECTED_MIXIN(StoppingClient);
diff --git a/third_party/blink/renderer/modules/filesystem/dragged_isolated_file_system_impl.h b/third_party/blink/renderer/modules/filesystem/dragged_isolated_file_system_impl.h index e524f907..e5f7dbb3 100644 --- a/third_party/blink/renderer/modules/filesystem/dragged_isolated_file_system_impl.h +++ b/third_party/blink/renderer/modules/filesystem/dragged_isolated_file_system_impl.h
@@ -43,7 +43,7 @@ class DOMFileSystem; class DraggedIsolatedFileSystemImpl final - : public GarbageCollectedFinalized<DraggedIsolatedFileSystemImpl>, + : public GarbageCollected<DraggedIsolatedFileSystemImpl>, public DraggedIsolatedFileSystem, public Supplement<DataObject> { USING_GARBAGE_COLLECTED_MIXIN(DraggedIsolatedFileSystemImpl);
diff --git a/third_party/blink/renderer/modules/filesystem/file_system_dispatcher.h b/third_party/blink/renderer/modules/filesystem/file_system_dispatcher.h index f64b5d4..5344dcf 100644 --- a/third_party/blink/renderer/modules/filesystem/file_system_dispatcher.h +++ b/third_party/blink/renderer/modules/filesystem/file_system_dispatcher.h
@@ -28,9 +28,8 @@ // Sends messages via mojo to the blink::mojom::FileSystemManager service // running in the browser process. It is owned by ExecutionContext, and // instances are created lazily by calling FileSystemDispatcher::From(). -class FileSystemDispatcher - : public GarbageCollectedFinalized<FileSystemDispatcher>, - public Supplement<ExecutionContext> { +class FileSystemDispatcher : public GarbageCollected<FileSystemDispatcher>, + public Supplement<ExecutionContext> { USING_GARBAGE_COLLECTED_MIXIN(FileSystemDispatcher); USING_PRE_FINALIZER(FileSystemDispatcher, Prefinalize);
diff --git a/third_party/blink/renderer/modules/filesystem/file_writer_test.cc b/third_party/blink/renderer/modules/filesystem/file_writer_test.cc index 1da44bd..9e929f7 100644 --- a/third_party/blink/renderer/modules/filesystem/file_writer_test.cc +++ b/third_party/blink/renderer/modules/filesystem/file_writer_test.cc
@@ -30,7 +30,7 @@ } // namespace -class TestableFileWriter : public GarbageCollectedFinalized<TestableFileWriter>, +class TestableFileWriter : public GarbageCollected<TestableFileWriter>, public FileWriterBase { USING_GARBAGE_COLLECTED_MIXIN(TestableFileWriter);
diff --git a/third_party/blink/renderer/modules/filesystem/local_file_system.h b/third_party/blink/renderer/modules/filesystem/local_file_system.h index 532745c..1349c15a 100644 --- a/third_party/blink/renderer/modules/filesystem/local_file_system.h +++ b/third_party/blink/renderer/modules/filesystem/local_file_system.h
@@ -52,7 +52,7 @@ class KURL; class ResolveURICallbacks; -class LocalFileSystem final : public GarbageCollectedFinalized<LocalFileSystem>, +class LocalFileSystem final : public GarbageCollected<LocalFileSystem>, public Supplement<LocalFrame>, public Supplement<WorkerClients>, public NameClient {
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_dispatcher.h b/third_party/blink/renderer/modules/gamepad/gamepad_dispatcher.h index 5dfa9a9..afbcdfe 100644 --- a/third_party/blink/renderer/modules/gamepad/gamepad_dispatcher.h +++ b/third_party/blink/renderer/modules/gamepad/gamepad_dispatcher.h
@@ -22,10 +22,9 @@ class GamepadSharedMemoryReader; -class GamepadDispatcher final - : public GarbageCollectedFinalized<GamepadDispatcher>, - public PlatformEventDispatcher, - public WebGamepadListener { +class GamepadDispatcher final : public GarbageCollected<GamepadDispatcher>, + public PlatformEventDispatcher, + public WebGamepadListener { USING_GARBAGE_COLLECTED_MIXIN(GamepadDispatcher); public:
diff --git a/third_party/blink/renderer/modules/gamepad/navigator_gamepad.h b/third_party/blink/renderer/modules/gamepad/navigator_gamepad.h index 8133c7e7..145d0ee0 100644 --- a/third_party/blink/renderer/modules/gamepad/navigator_gamepad.h +++ b/third_party/blink/renderer/modules/gamepad/navigator_gamepad.h
@@ -50,7 +50,7 @@ class Navigator; class MODULES_EXPORT NavigatorGamepad final - : public GarbageCollectedFinalized<NavigatorGamepad>, + : public GarbageCollected<NavigatorGamepad>, public Supplement<Navigator>, public DOMWindowClient, public PlatformEventController,
diff --git a/third_party/blink/renderer/modules/geolocation/geo_notifier.h b/third_party/blink/renderer/modules/geolocation/geo_notifier.h index 4bb380c..8876993 100644 --- a/third_party/blink/renderer/modules/geolocation/geo_notifier.h +++ b/third_party/blink/renderer/modules/geolocation/geo_notifier.h
@@ -19,7 +19,7 @@ class GeolocationPositionError; class Geoposition; -class GeoNotifier final : public GarbageCollectedFinalized<GeoNotifier>, +class GeoNotifier final : public GarbageCollected<GeoNotifier>, public NameClient { public: GeoNotifier(Geolocation*, @@ -54,7 +54,7 @@ // notifier and the Geolocation. The timer should run only when the notifier // is owned by the Geolocation. When the Geolocation removes a notifier, the // timer should be stopped beforehand. - class Timer final : public GarbageCollectedFinalized<Timer> { + class Timer final : public GarbageCollected<Timer> { public: explicit Timer(scoped_refptr<base::SingleThreadTaskRunner> web_task_runner, GeoNotifier* notifier,
diff --git a/third_party/blink/renderer/modules/geolocation/geolocation_error.h b/third_party/blink/renderer/modules/geolocation/geolocation_error.h index b6d759a..b1a40f0 100644 --- a/third_party/blink/renderer/modules/geolocation/geolocation_error.h +++ b/third_party/blink/renderer/modules/geolocation/geolocation_error.h
@@ -30,8 +30,7 @@ namespace blink { -class GeolocationError final - : public GarbageCollectedFinalized<GeolocationError> { +class GeolocationError final : public GarbageCollected<GeolocationError> { public: enum ErrorCode { kPermissionDenied, kPositionUnavailable };
diff --git a/third_party/blink/renderer/modules/image_downloader/image_downloader_impl.h b/third_party/blink/renderer/modules/image_downloader/image_downloader_impl.h index 90211f4..6051b87 100644 --- a/third_party/blink/renderer/modules/image_downloader/image_downloader_impl.h +++ b/third_party/blink/renderer/modules/image_downloader/image_downloader_impl.h
@@ -16,11 +16,10 @@ class LocalFrame; class MultiResolutionImageResourceFetcher; -class ImageDownloaderImpl final - : public GarbageCollectedFinalized<ImageDownloaderImpl>, - public Supplement<LocalFrame>, - public ContextLifecycleObserver, - public mojom::blink::ImageDownloader { +class ImageDownloaderImpl final : public GarbageCollected<ImageDownloaderImpl>, + public Supplement<LocalFrame>, + public ContextLifecycleObserver, + public mojom::blink::ImageDownloader { USING_PRE_FINALIZER(ImageDownloaderImpl, Dispose); USING_GARBAGE_COLLECTED_MIXIN(ImageDownloaderImpl);
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_any.h b/third_party/blink/renderer/modules/indexeddb/idb_any.h index 5af7a5b5..7d037a0 100644 --- a/third_party/blink/renderer/modules/indexeddb/idb_any.h +++ b/third_party/blink/renderer/modules/indexeddb/idb_any.h
@@ -53,7 +53,7 @@ // This allows for lazy conversion to script values (via IDBBindingUtilities), // and avoids the need for many dedicated union types. -class MODULES_EXPORT IDBAny final : public GarbageCollectedFinalized<IDBAny> { +class MODULES_EXPORT IDBAny final : public GarbageCollected<IDBAny> { public: static IDBAny* CreateUndefined(); static IDBAny* CreateNull();
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_database_callbacks.h b/third_party/blink/renderer/modules/indexeddb/idb_database_callbacks.h index 965cdc7..7591e44 100644 --- a/third_party/blink/renderer/modules/indexeddb/idb_database_callbacks.h +++ b/third_party/blink/renderer/modules/indexeddb/idb_database_callbacks.h
@@ -37,7 +37,7 @@ class IDBObservation; class MODULES_EXPORT IDBDatabaseCallbacks - : public GarbageCollectedFinalized<IDBDatabaseCallbacks> { + : public GarbageCollected<IDBDatabaseCallbacks> { public: IDBDatabaseCallbacks(); virtual ~IDBDatabaseCallbacks();
diff --git a/third_party/blink/renderer/modules/installedapp/installed_app_controller.h b/third_party/blink/renderer/modules/installedapp/installed_app_controller.h index 13f912a..76b4ede 100644 --- a/third_party/blink/renderer/modules/installedapp/installed_app_controller.h +++ b/third_party/blink/renderer/modules/installedapp/installed_app_controller.h
@@ -29,7 +29,7 @@ CallbackPromiseAdapter<HeapVector<Member<RelatedApplication>>, void>; class MODULES_EXPORT InstalledAppController final - : public GarbageCollectedFinalized<InstalledAppController>, + : public GarbageCollected<InstalledAppController>, public Supplement<LocalFrame>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(InstalledAppController);
diff --git a/third_party/blink/renderer/modules/keyboard/keyboard_layout.h b/third_party/blink/renderer/modules/keyboard/keyboard_layout.h index c354199..c607f439b 100644 --- a/third_party/blink/renderer/modules/keyboard/keyboard_layout.h +++ b/third_party/blink/renderer/modules/keyboard/keyboard_layout.h
@@ -17,7 +17,7 @@ class ScriptPromiseResolver; -class KeyboardLayout final : public GarbageCollectedFinalized<KeyboardLayout>, +class KeyboardLayout final : public GarbageCollected<KeyboardLayout>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(KeyboardLayout);
diff --git a/third_party/blink/renderer/modules/keyboard/keyboard_lock.h b/third_party/blink/renderer/modules/keyboard/keyboard_lock.h index 07a2ea43..ffee447 100644 --- a/third_party/blink/renderer/modules/keyboard/keyboard_lock.h +++ b/third_party/blink/renderer/modules/keyboard/keyboard_lock.h
@@ -17,7 +17,7 @@ class ScriptPromiseResolver; -class KeyboardLock final : public GarbageCollectedFinalized<KeyboardLock>, +class KeyboardLock final : public GarbageCollected<KeyboardLock>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(KeyboardLock);
diff --git a/third_party/blink/renderer/modules/launch/dom_window_launch_params.h b/third_party/blink/renderer/modules/launch/dom_window_launch_params.h index 881fcb3..d20cfa4 100644 --- a/third_party/blink/renderer/modules/launch/dom_window_launch_params.h +++ b/third_party/blink/renderer/modules/launch/dom_window_launch_params.h
@@ -20,7 +20,7 @@ class Visitor; class DOMWindowLaunchParams final - : public GarbageCollectedFinalized<DOMWindowLaunchParams>, + : public GarbageCollected<DOMWindowLaunchParams>, public Supplement<LocalDOMWindow> { USING_GARBAGE_COLLECTED_MIXIN(DOMWindowLaunchParams);
diff --git a/third_party/blink/renderer/modules/locks/lock_manager.cc b/third_party/blink/renderer/modules/locks/lock_manager.cc index 6790c7da..7f3238d4 100644 --- a/third_party/blink/renderer/modules/locks/lock_manager.cc +++ b/third_party/blink/renderer/modules/locks/lock_manager.cc
@@ -54,7 +54,7 @@ } // namespace class LockManager::LockRequestImpl final - : public GarbageCollectedFinalized<LockRequestImpl>, + : public GarbageCollected<LockRequestImpl>, public NameClient, public mojom::blink::LockRequest { USING_PRE_FINALIZER(LockManager::LockRequestImpl, Dispose);
diff --git a/third_party/blink/renderer/modules/manifest/manifest_change_notifier.h b/third_party/blink/renderer/modules/manifest/manifest_change_notifier.h index b49e7f8b..770cb16 100644 --- a/third_party/blink/renderer/modules/manifest/manifest_change_notifier.h +++ b/third_party/blink/renderer/modules/manifest/manifest_change_notifier.h
@@ -17,7 +17,7 @@ class LocalFrame; class MODULES_EXPORT ManifestChangeNotifier - : public GarbageCollectedFinalized<ManifestChangeNotifier> { + : public GarbageCollected<ManifestChangeNotifier> { public: explicit ManifestChangeNotifier(LocalFrame& frame); virtual ~ManifestChangeNotifier();
diff --git a/third_party/blink/renderer/modules/manifest/manifest_fetcher.h b/third_party/blink/renderer/modules/manifest/manifest_fetcher.h index 5e8af03..bda2edd 100644 --- a/third_party/blink/renderer/modules/manifest/manifest_fetcher.h +++ b/third_party/blink/renderer/modules/manifest/manifest_fetcher.h
@@ -24,7 +24,7 @@ // Helper class to download a Web Manifest. When an instance is created, the // caller need to call Start() and wait for the passed callback to be executed. // If the fetch fails, the callback will be called with two empty objects. -class ManifestFetcher final : public GarbageCollectedFinalized<ManifestFetcher>, +class ManifestFetcher final : public GarbageCollected<ManifestFetcher>, public ThreadableLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(ManifestFetcher); // This will be called asynchronously after the URL has been fetched,
diff --git a/third_party/blink/renderer/modules/manifest/manifest_manager.h b/third_party/blink/renderer/modules/manifest/manifest_manager.h index 678c08a8..a12a50b 100644 --- a/third_party/blink/renderer/modules/manifest/manifest_manager.h +++ b/third_party/blink/renderer/modules/manifest/manifest_manager.h
@@ -30,11 +30,10 @@ // the ManifestParser in order to do so. // // Consumers should use the mojo ManifestManager interface to use this class. -class MODULES_EXPORT ManifestManager - : public GarbageCollectedFinalized<ManifestManager>, - public Supplement<LocalFrame>, - public mojom::blink::ManifestManager, - public ContextLifecycleObserver { +class MODULES_EXPORT ManifestManager : public GarbageCollected<ManifestManager>, + public Supplement<LocalFrame>, + public mojom::blink::ManifestManager, + public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(ManifestManager); public:
diff --git a/third_party/blink/renderer/modules/mediacapturefromelement/auto_canvas_draw_listener.h b/third_party/blink/renderer/modules/mediacapturefromelement/auto_canvas_draw_listener.h index 3523062..c3a22e2 100644 --- a/third_party/blink/renderer/modules/mediacapturefromelement/auto_canvas_draw_listener.h +++ b/third_party/blink/renderer/modules/mediacapturefromelement/auto_canvas_draw_listener.h
@@ -12,9 +12,8 @@ namespace blink { -class AutoCanvasDrawListener - : public GarbageCollectedFinalized<AutoCanvasDrawListener>, - public CanvasDrawListener { +class AutoCanvasDrawListener : public GarbageCollected<AutoCanvasDrawListener>, + public CanvasDrawListener { USING_GARBAGE_COLLECTED_MIXIN(AutoCanvasDrawListener); public:
diff --git a/third_party/blink/renderer/modules/mediarecorder/audio_track_recorder.h b/third_party/blink/renderer/modules/mediarecorder/audio_track_recorder.h index d8a87a0..48ff1e9 100644 --- a/third_party/blink/renderer/modules/mediarecorder/audio_track_recorder.h +++ b/third_party/blink/renderer/modules/mediarecorder/audio_track_recorder.h
@@ -32,7 +32,7 @@ // which lives an AudioTrackEncoder with its own threading subtleties, see the // implementation file. class MODULES_EXPORT AudioTrackRecorder - : public GarbageCollectedFinalized<AudioTrackRecorder>, + : public GarbageCollected<AudioTrackRecorder>, public WebMediaStreamAudioSink { USING_PRE_FINALIZER(AudioTrackRecorder, Prefinalize);
diff --git a/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.h b/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.h index 59614f96..1ebb7db 100644 --- a/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.h +++ b/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.h
@@ -43,7 +43,7 @@ // i.e. the Main Render thread. (Note that a BindToCurrentLoop is used to // guarantee this, since VideoTrackRecorder sends back frames on IO thread.) class MODULES_EXPORT MediaRecorderHandler final - : public GarbageCollectedFinalized<MediaRecorderHandler> { + : public GarbageCollected<MediaRecorderHandler> { public: static MediaRecorderHandler* Create( scoped_refptr<base::SingleThreadTaskRunner> task_runner);
diff --git a/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.h b/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.h index c12dbbf..0453b8c4 100644 --- a/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.h +++ b/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.h
@@ -73,7 +73,7 @@ // thread but that pass frames on Render IO thread. It has an internal Encoder // with its own threading subtleties, see the implementation file. class MODULES_EXPORT VideoTrackRecorder - : public GarbageCollectedFinalized<VideoTrackRecorder>, + : public GarbageCollected<VideoTrackRecorder>, public WebMediaStreamSink { USING_PRE_FINALIZER(VideoTrackRecorder, Prefinalize);
diff --git a/third_party/blink/renderer/modules/mediasource/source_buffer.cc b/third_party/blink/renderer/modules/mediasource/source_buffer.cc index c74de365..e6e82ed 100644 --- a/third_party/blink/renderer/modules/mediasource/source_buffer.cc +++ b/third_party/blink/renderer/modules/mediasource/source_buffer.cc
@@ -1149,6 +1149,16 @@ UseCounter::Count(source_->MediaElement()->GetDocument(), WebFeature::kMediaSourceMuxedSequenceMode); break; + case WebSourceBufferClient::kGroupEndTimestampDecreaseWithinMediaSegment: + // Report this problematic Media Segment structure usage to help inform + // follow-up work. + // TODO(wolenetz): Use the data to scope additional work. See + // https://crbug.com/920853 and + // https://github.com/w3c/media-source/issues/203. + UseCounter::Count( + source_->MediaElement()->GetDocument(), + WebFeature::kMediaSourceGroupEndTimestampDecreaseWithinMediaSegment); + break; } }
diff --git a/third_party/blink/renderer/modules/mediastream/apply_constraints_processor.h b/third_party/blink/renderer/modules/mediastream/apply_constraints_processor.h index cd6c6d1..76bc8fa 100644 --- a/third_party/blink/renderer/modules/mediastream/apply_constraints_processor.h +++ b/third_party/blink/renderer/modules/mediastream/apply_constraints_processor.h
@@ -28,7 +28,7 @@ // ApplyConstraintsProcessor must be created, called and destroyed on the main // render thread. There should be only one ApplyConstraintsProcessor per frame. class MODULES_EXPORT ApplyConstraintsProcessor final - : public GarbageCollectedFinalized<ApplyConstraintsProcessor> { + : public GarbageCollected<ApplyConstraintsProcessor> { public: using MediaDevicesDispatcherCallback = base::RepeatingCallback< blink::mojom::blink::MediaDevicesDispatcherHost*()>;
diff --git a/third_party/blink/renderer/modules/mediastream/apply_constraints_request.h b/third_party/blink/renderer/modules/mediastream/apply_constraints_request.h index ab72823..798e4032 100644 --- a/third_party/blink/renderer/modules/mediastream/apply_constraints_request.h +++ b/third_party/blink/renderer/modules/mediastream/apply_constraints_request.h
@@ -16,7 +16,7 @@ class ScriptPromiseResolver; class MODULES_EXPORT ApplyConstraintsRequest final - : public GarbageCollectedFinalized<ApplyConstraintsRequest> { + : public GarbageCollected<ApplyConstraintsRequest> { public: static ApplyConstraintsRequest* CreateForTesting(const WebMediaStreamTrack&, const WebMediaConstraints&);
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc index e5605bb..a1028f4 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc
@@ -34,22 +34,6 @@ using blink::AudioProcessingProperties; using EchoCancellationType = AudioProcessingProperties::EchoCancellationType; -// Test blink::Platform imlementation that overrides the known methods needed -// by the tests, including creation of WebRtcAudioDevice instances. -class WebRtcAudioDeviceTestingPlatformSupport - : public IOTaskRunnerTestingPlatformSupport { - public: - WebRtcAudioDeviceTestingPlatformSupport() - : webrtc_audio_device_( - new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()) {} - blink::WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() override { - return webrtc_audio_device_.get(); - } - - private: - scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device_; -}; - namespace { using BoolSetFunction = void (blink::BooleanConstraint::*)(bool); @@ -450,8 +434,7 @@ blink::WebString::FromASCII("system")}; private: - ScopedTestingPlatformSupport<WebRtcAudioDeviceTestingPlatformSupport> - platform_; + ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; }; class MediaStreamConstraintsUtilAudioTest
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory_impl.cc b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory_impl.cc index fdab8d4..57715ca 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory_impl.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory_impl.cc
@@ -11,6 +11,7 @@ #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/web_media_stream.h" #include "third_party/blink/public/web/modules/mediastream/media_stream_video_track.h" +#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h" #include "third_party/blink/public/web/modules/webrtc/webrtc_audio_device_impl.h" #include "third_party/blink/public/web/modules/webrtc/webrtc_audio_renderer.h" #include "third_party/blink/public/web/web_local_frame.h" @@ -32,7 +33,7 @@ // will not be able to pick an appropriate device and return 0. base::UnguessableToken GetSessionIdForWebRtcAudioRenderer() { WebRtcAudioDeviceImpl* audio_device = - Platform::Current()->GetWebRtcAudioDevice(); + PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice(); return audio_device ? audio_device->GetAuthorizedDeviceSessionIdForAudioRenderer() : base::UnguessableToken(); @@ -117,7 +118,7 @@ // This is a remote WebRTC media stream. WebRtcAudioDeviceImpl* audio_device = - Platform::Current()->GetWebRtcAudioDevice(); + PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice(); DCHECK(audio_device); // Share the existing renderer if any, otherwise create a new one.
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc index 7dee523..740459b9 100644 --- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc +++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
@@ -21,6 +21,7 @@ #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util.h" +#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h" #include "third_party/blink/public/web/modules/webrtc/webrtc_audio_device_impl.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_local_frame_wrapper.h" @@ -202,7 +203,7 @@ // Create the MediaStreamAudioProcessor, bound to the WebRTC audio device // module. WebRtcAudioDeviceImpl* const rtc_audio_device = - Platform::Current()->GetWebRtcAudioDevice(); + PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice(); if (!rtc_audio_device) { blink::WebRtcLogMessage( "ProcessedLocalAudioSource::EnsureSourceIsStarted() fails" @@ -326,7 +327,8 @@ scoped_refptr<media::AudioCapturerSource> source_to_stop(std::move(source_)); if (WebRtcAudioDeviceImpl* rtc_audio_device = - Platform::Current()->GetWebRtcAudioDevice()) { + PeerConnectionDependencyFactory::GetInstance() + ->GetWebRtcAudioDevice()) { rtc_audio_device->RemoveAudioCapturer(this); }
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc index 3a6d0a9e..9ea18522 100644 --- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc +++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc
@@ -69,14 +69,11 @@ MockAudioCapturerSource::~MockAudioCapturerSource() {} // Test Platform implementation that overrides the known methods needed -// by the tests, including creation of WebRtcAudioDevice and -// AudioCapturerSource instances. -class WebRtcAudioDeviceTestingPlatformSupport : public TestingPlatformSupport { +// by the tests, including creation of AudioCapturerSource instances. +class AudioCapturerSourceTestingPlatformSupport + : public TestingPlatformSupport { public: - WebRtcAudioDeviceTestingPlatformSupport() = default; - WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() override { - return audio_device_.get(); - } + AudioCapturerSourceTestingPlatformSupport() = default; scoped_refptr<media::AudioCapturerSource> NewAudioCapturerSource( WebLocalFrame* web_frame, @@ -91,8 +88,6 @@ } private: - scoped_refptr<blink::WebRtcAudioDeviceImpl> audio_device_ = - new rtc::RefCountedObject<blink::WebRtcAudioDeviceImpl>(); scoped_refptr<MockAudioCapturerSource> mock_audio_capturer_source_ = base::MakeRefCounted<MockAudioCapturerSource>(); }; @@ -188,7 +183,7 @@ } private: - ScopedTestingPlatformSupport<WebRtcAudioDeviceTestingPlatformSupport> + ScopedTestingPlatformSupport<AudioCapturerSourceTestingPlatformSupport> webrtc_audio_device_platform_support_; WebMediaStreamSource blink_audio_source_; WebMediaStreamTrack blink_audio_track_;
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_client.h b/third_party/blink/renderer/modules/mediastream/user_media_client.h index 389cd48..a4055e4 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_client.h +++ b/third_party/blink/renderer/modules/mediastream/user_media_client.h
@@ -34,7 +34,7 @@ // object. This includes getUserMedia and enumerateDevices. It must be created, // called and destroyed on the render thread. class MODULES_EXPORT UserMediaClient - : public GarbageCollectedFinalized<UserMediaClient> { + : public GarbageCollected<UserMediaClient> { public: // TODO(guidou): Make all constructors private and replace with Create methods // that return a std::unique_ptr. This class is intended for instantiation on @@ -62,7 +62,7 @@ media_devices_dispatcher); private: - class Request final : public GarbageCollectedFinalized<Request> { + class Request final : public GarbageCollected<Request> { public: explicit Request(std::unique_ptr<UserMediaRequestInfo> request); explicit Request(blink::ApplyConstraintsRequest* request);
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_controller.h b/third_party/blink/renderer/modules/mediastream/user_media_controller.h index a214acfe..d674cb72 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_controller.h +++ b/third_party/blink/renderer/modules/mediastream/user_media_controller.h
@@ -37,10 +37,9 @@ class MediaStreamComponent; class UserMediaRequest; -class UserMediaController final - : public GarbageCollectedFinalized<UserMediaController>, - public Supplement<LocalFrame>, - public ContextLifecycleObserver { +class UserMediaController final : public GarbageCollected<UserMediaController>, + public Supplement<LocalFrame>, + public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(UserMediaController); public:
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc index c5a0939..98fab95b 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc +++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
@@ -264,7 +264,7 @@ // Class for storing state of the the processing of getUserMedia requests. class UserMediaProcessor::RequestInfo final - : public GarbageCollectedFinalized<UserMediaProcessor::RequestInfo> { + : public GarbageCollected<UserMediaProcessor::RequestInfo> { public: using ResourcesReady = base::OnceCallback<void(RequestInfo* request_info,
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.h b/third_party/blink/renderer/modules/mediastream/user_media_processor.h index f1fad06..6cd0edd 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_processor.h +++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.h
@@ -57,7 +57,7 @@ // UserMediaProcessor must be created, called and destroyed on the main // render thread. There should be only one UserMediaProcessor per frame. class MODULES_EXPORT UserMediaProcessor - : public GarbageCollectedFinalized<UserMediaProcessor> { + : public GarbageCollected<UserMediaProcessor> { public: using MediaDevicesDispatcherCallback = base::RepeatingCallback< blink::mojom::blink::MediaDevicesDispatcherHost*()>;
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_request.h b/third_party/blink/renderer/modules/mediastream/user_media_request.h index ad9a974..59f35b6 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_request.h +++ b/third_party/blink/renderer/modules/mediastream/user_media_request.h
@@ -49,12 +49,12 @@ class UserMediaController; class MODULES_EXPORT UserMediaRequest final - : public GarbageCollectedFinalized<UserMediaRequest>, + : public GarbageCollected<UserMediaRequest>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(UserMediaRequest); public: - class Callbacks : public GarbageCollectedFinalized<Callbacks> { + class Callbacks : public GarbageCollected<Callbacks> { public: virtual ~Callbacks() = default;
diff --git a/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.cc b/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.cc index 2d69acc..c6f0a1b 100644 --- a/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.cc +++ b/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.cc
@@ -81,7 +81,7 @@ } class NativeFileSystemWriter::StreamWriterClient - : public GarbageCollectedFinalized<StreamWriterClient>, + : public GarbageCollected<StreamWriterClient>, public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(StreamWriterClient);
diff --git a/third_party/blink/renderer/modules/navigatorcontentutils/navigator_content_utils.h b/third_party/blink/renderer/modules/navigatorcontentutils/navigator_content_utils.h index 32a4bc3e..0abb5f1a 100644 --- a/third_party/blink/renderer/modules/navigatorcontentutils/navigator_content_utils.h +++ b/third_party/blink/renderer/modules/navigatorcontentutils/navigator_content_utils.h
@@ -41,7 +41,7 @@ // It is owned by Navigator, and an instance is created lazily by calling // NavigatorContentUtils::From() via [register/unregister]ProtocolHandler. class MODULES_EXPORT NavigatorContentUtils final - : public GarbageCollectedFinalized<NavigatorContentUtils>, + : public GarbageCollected<NavigatorContentUtils>, public Supplement<Navigator> { USING_GARBAGE_COLLECTED_MIXIN(NavigatorContentUtils);
diff --git a/third_party/blink/renderer/modules/navigatorcontentutils/navigator_content_utils_client.h b/third_party/blink/renderer/modules/navigatorcontentutils/navigator_content_utils_client.h index 98f1abb..0f299809 100644 --- a/third_party/blink/renderer/modules/navigatorcontentutils/navigator_content_utils_client.h +++ b/third_party/blink/renderer/modules/navigatorcontentutils/navigator_content_utils_client.h
@@ -15,7 +15,7 @@ class WebLocalFrameImpl; class MODULES_EXPORT NavigatorContentUtilsClient - : public GarbageCollectedFinalized<NavigatorContentUtilsClient> { + : public GarbageCollected<NavigatorContentUtilsClient> { public: explicit NavigatorContentUtilsClient(WebLocalFrameImpl*); virtual ~NavigatorContentUtilsClient() = default;
diff --git a/third_party/blink/renderer/modules/nfc/nfc_proxy.h b/third_party/blink/renderer/modules/nfc/nfc_proxy.h index 1362c6ec..9500909 100644 --- a/third_party/blink/renderer/modules/nfc/nfc_proxy.h +++ b/third_party/blink/renderer/modules/nfc/nfc_proxy.h
@@ -23,12 +23,11 @@ // This is a proxy class used by NFCWriter(s) and NFCReader(s) to connect // to implementation of device::mojom::blink::NFC interface. -class MODULES_EXPORT NFCProxy final - : public GarbageCollectedFinalized<NFCProxy>, - public PageVisibilityObserver, - public FocusChangedObserver, - public Supplement<Document>, - public device::mojom::blink::NFCClient { +class MODULES_EXPORT NFCProxy final : public GarbageCollected<NFCProxy>, + public PageVisibilityObserver, + public FocusChangedObserver, + public Supplement<Document>, + public device::mojom::blink::NFCClient { USING_GARBAGE_COLLECTED_MIXIN(NFCProxy); USING_PRE_FINALIZER(NFCProxy, Dispose);
diff --git a/third_party/blink/renderer/modules/notifications/notification_manager.h b/third_party/blink/renderer/modules/notifications/notification_manager.h index f43f45ac..da9fb1f 100644 --- a/third_party/blink/renderer/modules/notifications/notification_manager.h +++ b/third_party/blink/renderer/modules/notifications/notification_manager.h
@@ -25,9 +25,8 @@ // connecting and communicating with the Mojo notification service. // // TODO(peter): Make the NotificationManager responsible for resource loading. -class NotificationManager final - : public GarbageCollectedFinalized<NotificationManager>, - public Supplement<ExecutionContext> { +class NotificationManager final : public GarbageCollected<NotificationManager>, + public Supplement<ExecutionContext> { USING_GARBAGE_COLLECTED_MIXIN(NotificationManager); public:
diff --git a/third_party/blink/renderer/modules/notifications/notification_resources_loader.h b/third_party/blink/renderer/modules/notifications/notification_resources_loader.h index c9a70fa..f676ac24 100644 --- a/third_party/blink/renderer/modules/notifications/notification_resources_loader.h +++ b/third_party/blink/renderer/modules/notifications/notification_resources_loader.h
@@ -26,7 +26,7 @@ // Fetches the resources specified in a given NotificationData. Uses a // callback to notify the caller when all fetches have finished. class MODULES_EXPORT NotificationResourcesLoader final - : public GarbageCollectedFinalized<NotificationResourcesLoader> { + : public GarbageCollected<NotificationResourcesLoader> { USING_PRE_FINALIZER(NotificationResourcesLoader, Stop); public:
diff --git a/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.h b/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.h index 253ce3d..92733d22 100644 --- a/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.h +++ b/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.h
@@ -17,7 +17,7 @@ class ServiceWorkerRegistration; class PaymentAppServiceWorkerRegistration final - : public GarbageCollectedFinalized<PaymentAppServiceWorkerRegistration>, + : public GarbageCollected<PaymentAppServiceWorkerRegistration>, public Supplement<ServiceWorkerRegistration> { USING_GARBAGE_COLLECTED_MIXIN(PaymentAppServiceWorkerRegistration);
diff --git a/third_party/blink/renderer/modules/payments/payment_instruments.cc b/third_party/blink/renderer/modules/payments/payment_instruments.cc index 533f068d..3c07032 100644 --- a/third_party/blink/renderer/modules/payments/payment_instruments.cc +++ b/third_party/blink/renderer/modules/payments/payment_instruments.cc
@@ -98,7 +98,7 @@ // can be prematurely destroyed. // TODO(keishi): Remove this conversion if IDLDictionaryBase situation changes. class PaymentInstrumentParameter final - : public GarbageCollectedFinalized<PaymentInstrumentParameter> { + : public GarbageCollected<PaymentInstrumentParameter> { public: explicit PaymentInstrumentParameter(const PaymentInstrument* instrument) : has_icons_(instrument->hasIcons()),
diff --git a/third_party/blink/renderer/modules/payments/payment_request_update_event_test.cc b/third_party/blink/renderer/modules/payments/payment_request_update_event_test.cc index e52fcb3..930831f 100644 --- a/third_party/blink/renderer/modules/payments/payment_request_update_event_test.cc +++ b/third_party/blink/renderer/modules/payments/payment_request_update_event_test.cc
@@ -21,7 +21,7 @@ namespace blink { namespace { -class MockPaymentRequest : public GarbageCollectedFinalized<MockPaymentRequest>, +class MockPaymentRequest : public GarbageCollected<MockPaymentRequest>, public PaymentRequestDelegate { USING_GARBAGE_COLLECTED_MIXIN(MockPaymentRequest);
diff --git a/third_party/blink/renderer/modules/payments/payment_response_test.cc b/third_party/blink/renderer/modules/payments/payment_response_test.cc index 38928418..211ca15 100644 --- a/third_party/blink/renderer/modules/payments/payment_response_test.cc +++ b/third_party/blink/renderer/modules/payments/payment_response_test.cc
@@ -25,7 +25,7 @@ namespace { class MockPaymentStateResolver final - : public GarbageCollectedFinalized<MockPaymentStateResolver>, + : public GarbageCollected<MockPaymentStateResolver>, public PaymentStateResolver { USING_GARBAGE_COLLECTED_MIXIN(MockPaymentStateResolver);
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc index 8db94a2..2f2b590 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -126,6 +126,13 @@ DCHECK(!pc_factory_); } +PeerConnectionDependencyFactory* +PeerConnectionDependencyFactory::GetInstance() { + DEFINE_STATIC_LOCAL(PeerConnectionDependencyFactory, instance, + (/*create_p2p_socket_dispatcher= */ true)); + return &instance; +} + std::unique_ptr<blink::WebRTCPeerConnectionHandler> PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler( blink::WebRTCPeerConnectionHandlerClient* client,
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h index c77b03a0..0e205e42 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h +++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h
@@ -372,7 +372,7 @@ GetTrackRemoveStreamAndGCWithPersistentStream); typedef base::OnceCallback<bool()> BoolFunction; - class EventWrapper final : public GarbageCollectedFinalized<EventWrapper> { + class EventWrapper final : public GarbageCollected<EventWrapper> { public: EventWrapper(Event*, BoolFunction); // Returns true if |m_setupFunction| returns true or it is null.
diff --git a/third_party/blink/renderer/modules/presentation/presentation_availability_callbacks.h b/third_party/blink/renderer/modules/presentation/presentation_availability_callbacks.h index 64ed0b16..022e6c45 100644 --- a/third_party/blink/renderer/modules/presentation/presentation_availability_callbacks.h +++ b/third_party/blink/renderer/modules/presentation/presentation_availability_callbacks.h
@@ -20,7 +20,7 @@ // TODO(crbug.com/749327): Consider removing this class and have // PresentationAvailabilityState use PresentationAvailabilityProperty directly. class MODULES_EXPORT PresentationAvailabilityCallbacks - : public GarbageCollectedFinalized<PresentationAvailabilityCallbacks> { + : public GarbageCollected<PresentationAvailabilityCallbacks> { public: PresentationAvailabilityCallbacks(PresentationAvailabilityProperty*, const WTF::Vector<KURL>&);
diff --git a/third_party/blink/renderer/modules/presentation/presentation_availability_state.h b/third_party/blink/renderer/modules/presentation/presentation_availability_state.h index d9acbd05..c85f912 100644 --- a/third_party/blink/renderer/modules/presentation/presentation_availability_state.h +++ b/third_party/blink/renderer/modules/presentation/presentation_availability_state.h
@@ -29,7 +29,7 @@ // this class by moving the multiple URL tracking logic to the former, and // consolidating this class's APIs to take repeating callbacks. class MODULES_EXPORT PresentationAvailabilityState final - : public GarbageCollectedFinalized<PresentationAvailabilityState> { + : public GarbageCollected<PresentationAvailabilityState> { public: explicit PresentationAvailabilityState(mojom::blink::PresentationService*); ~PresentationAvailabilityState(); @@ -61,7 +61,7 @@ // |availability_urls|. Shared with PresentationRequest objects with the same // set of URLs. class AvailabilityListener final - : public GarbageCollectedFinalized<AvailabilityListener> { + : public GarbageCollected<AvailabilityListener> { public: explicit AvailabilityListener(const Vector<KURL>& availability_urls); ~AvailabilityListener();
diff --git a/third_party/blink/renderer/modules/presentation/presentation_availability_state_test.cc b/third_party/blink/renderer/modules/presentation/presentation_availability_state_test.cc index 719c3026..02dbf0b 100644 --- a/third_party/blink/renderer/modules/presentation/presentation_availability_state_test.cc +++ b/third_party/blink/renderer/modules/presentation/presentation_availability_state_test.cc
@@ -20,7 +20,7 @@ using mojom::blink::ScreenAvailability; class MockPresentationAvailabilityObserver - : public GarbageCollectedFinalized<MockPresentationAvailabilityObserver>, + : public GarbageCollected<MockPresentationAvailabilityObserver>, public PresentationAvailabilityObserver { USING_GARBAGE_COLLECTED_MIXIN(MockPresentationAvailabilityObserver);
diff --git a/third_party/blink/renderer/modules/presentation/presentation_connection.cc b/third_party/blink/renderer/modules/presentation/presentation_connection.cc index 3068367..fae2d02 100644 --- a/third_party/blink/renderer/modules/presentation/presentation_connection.cc +++ b/third_party/blink/renderer/modules/presentation/presentation_connection.cc
@@ -100,7 +100,7 @@ } // namespace class PresentationConnection::Message final - : public GarbageCollectedFinalized<PresentationConnection::Message> { + : public GarbageCollected<PresentationConnection::Message> { public: Message(const String& text) : type(kMessageTypeText), text(text) {} @@ -119,7 +119,7 @@ }; class PresentationConnection::BlobLoader final - : public GarbageCollectedFinalized<PresentationConnection::BlobLoader>, + : public GarbageCollected<PresentationConnection::BlobLoader>, public FileReaderLoaderClient { public: BlobLoader(scoped_refptr<BlobDataHandle> blob_data_handle,
diff --git a/third_party/blink/renderer/modules/presentation/presentation_controller.h b/third_party/blink/renderer/modules/presentation/presentation_controller.h index 635f6da..0518081 100644 --- a/third_party/blink/renderer/modules/presentation/presentation_controller.h +++ b/third_party/blink/renderer/modules/presentation/presentation_controller.h
@@ -30,7 +30,7 @@ // Implements the PresentationController interface from the Presentation API // from which websites can implement the controlling side of a presentation. class MODULES_EXPORT PresentationController - : public GarbageCollectedFinalized<PresentationController>, + : public GarbageCollected<PresentationController>, public Supplement<LocalFrame>, public ContextLifecycleObserver, public mojom::blink::PresentationController {
diff --git a/third_party/blink/renderer/modules/push_messaging/push_messaging_bridge.h b/third_party/blink/renderer/modules/push_messaging/push_messaging_bridge.h index af26f9e..663392b 100644 --- a/third_party/blink/renderer/modules/push_messaging/push_messaging_bridge.h +++ b/third_party/blink/renderer/modules/push_messaging/push_messaging_bridge.h
@@ -24,9 +24,8 @@ // Registration. // // TODO(peter): Use the PushMessaging Mojo service directly from here. -class PushMessagingBridge final - : public GarbageCollectedFinalized<PushMessagingBridge>, - public Supplement<ServiceWorkerRegistration> { +class PushMessagingBridge final : public GarbageCollected<PushMessagingBridge>, + public Supplement<ServiceWorkerRegistration> { USING_GARBAGE_COLLECTED_MIXIN(PushMessagingBridge); public:
diff --git a/third_party/blink/renderer/modules/push_messaging/push_messaging_client.h b/third_party/blink/renderer/modules/push_messaging/push_messaging_client.h index 606d91e..a147866f 100644 --- a/third_party/blink/renderer/modules/push_messaging/push_messaging_client.h +++ b/third_party/blink/renderer/modules/push_messaging/push_messaging_client.h
@@ -26,9 +26,8 @@ class PushSubscriptionOptions; class ServiceWorkerRegistration; -class PushMessagingClient final - : public GarbageCollectedFinalized<PushMessagingClient>, - public Supplement<LocalFrame> { +class PushMessagingClient final : public GarbageCollected<PushMessagingClient>, + public Supplement<LocalFrame> { USING_GARBAGE_COLLECTED_MIXIN(PushMessagingClient); public:
diff --git a/third_party/blink/renderer/modules/push_messaging/push_provider.h b/third_party/blink/renderer/modules/push_messaging/push_provider.h index 64b942b..79e69841 100644 --- a/third_party/blink/renderer/modules/push_messaging/push_provider.h +++ b/third_party/blink/renderer/modules/push_messaging/push_provider.h
@@ -28,7 +28,7 @@ class PushSubscriptionOptions; -class PushProvider final : public GarbageCollectedFinalized<PushProvider>, +class PushProvider final : public GarbageCollected<PushProvider>, public Supplement<ServiceWorkerRegistration> { USING_GARBAGE_COLLECTED_MIXIN(PushProvider);
diff --git a/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.h b/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.h index 5cc313a0..1c72a139 100644 --- a/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.h +++ b/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.h
@@ -16,7 +16,7 @@ class ServiceWorkerRegistration; class ServiceWorkerRegistrationPush final - : public GarbageCollectedFinalized<ServiceWorkerRegistrationPush>, + : public GarbageCollected<ServiceWorkerRegistrationPush>, public Supplement<ServiceWorkerRegistration> { USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistrationPush);
diff --git a/third_party/blink/renderer/modules/remoteplayback/availability_callback_wrapper.h b/third_party/blink/renderer/modules/remoteplayback/availability_callback_wrapper.h index bcbb5c1a..1520f75 100644 --- a/third_party/blink/renderer/modules/remoteplayback/availability_callback_wrapper.h +++ b/third_party/blink/renderer/modules/remoteplayback/availability_callback_wrapper.h
@@ -20,7 +20,7 @@ // Wraps either a base::OnceClosure or RemotePlaybackAvailabilityCallback object // to be kept in the RemotePlayback's |availability_callbacks_| map. class AvailabilityCallbackWrapper final - : public GarbageCollectedFinalized<AvailabilityCallbackWrapper>, + : public GarbageCollected<AvailabilityCallbackWrapper>, public NameClient { public: explicit AvailabilityCallbackWrapper(V8RemotePlaybackAvailabilityCallback*);
diff --git a/third_party/blink/renderer/modules/screen_enumeration/navigator_screen_manager.cc b/third_party/blink/renderer/modules/screen_enumeration/navigator_screen_manager.cc index 273d1ed..cdf517b9 100644 --- a/third_party/blink/renderer/modules/screen_enumeration/navigator_screen_manager.cc +++ b/third_party/blink/renderer/modules/screen_enumeration/navigator_screen_manager.cc
@@ -19,7 +19,7 @@ template <typename T> class NavigatorScreenManagerImpl final - : public GarbageCollectedFinalized<NavigatorScreenManagerImpl<T>>, + : public GarbageCollected<NavigatorScreenManagerImpl<T>>, public Supplement<T> { USING_GARBAGE_COLLECTED_MIXIN(NavigatorScreenManagerImpl<T>);
diff --git a/third_party/blink/renderer/modules/sensor/sensor_provider_proxy.h b/third_party/blink/renderer/modules/sensor/sensor_provider_proxy.h index 4825cb21..c95b2e1 100644 --- a/third_party/blink/renderer/modules/sensor/sensor_provider_proxy.h +++ b/third_party/blink/renderer/modules/sensor/sensor_provider_proxy.h
@@ -18,9 +18,8 @@ // This class wraps 'SensorProvider' mojo interface and it manages // 'SensorProxy' instances. -class SensorProviderProxy final - : public GarbageCollectedFinalized<SensorProviderProxy>, - public Supplement<Document> { +class SensorProviderProxy final : public GarbageCollected<SensorProviderProxy>, + public Supplement<Document> { USING_GARBAGE_COLLECTED_MIXIN(SensorProviderProxy); public:
diff --git a/third_party/blink/renderer/modules/sensor/sensor_proxy.h b/third_party/blink/renderer/modules/sensor/sensor_proxy.h index 7357953..613e425 100644 --- a/third_party/blink/renderer/modules/sensor/sensor_proxy.h +++ b/third_party/blink/renderer/modules/sensor/sensor_proxy.h
@@ -21,7 +21,7 @@ // This class wraps 'Sensor' mojo interface and used by multiple // JS sensor instances of the same type (within a single frame). -class SensorProxy : public GarbageCollectedFinalized<SensorProxy>, +class SensorProxy : public GarbageCollected<SensorProxy>, public PageVisibilityObserver, public FocusChangedObserver { USING_GARBAGE_COLLECTED_MIXIN(SensorProxy);
diff --git a/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc b/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc index 6bc4517..ca0dd6e 100644 --- a/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc +++ b/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc
@@ -125,9 +125,8 @@ // Notifies the result of FetchDataLoader to |callback_|, the other endpoint // for which is passed to the browser process via // blink.mojom.ServiceWorkerFetchResponseCallback.OnResponseStream(). -class FetchLoaderClient final - : public GarbageCollectedFinalized<FetchLoaderClient>, - public FetchDataLoader::Client { +class FetchLoaderClient final : public GarbageCollected<FetchLoaderClient>, + public FetchDataLoader::Client { USING_GARBAGE_COLLECTED_MIXIN(FetchLoaderClient); public:
diff --git a/third_party/blink/renderer/modules/service_worker/respond_with_observer.h b/third_party/blink/renderer/modules/service_worker/respond_with_observer.h index 3e15f3af..d0cec6c 100644 --- a/third_party/blink/renderer/modules/service_worker/respond_with_observer.h +++ b/third_party/blink/renderer/modules/service_worker/respond_with_observer.h
@@ -25,7 +25,7 @@ // each event should implement the procedure of the three behaviors by // overriding onResponseFulfilled, onResponseRejected and onNoResponse. class MODULES_EXPORT RespondWithObserver - : public GarbageCollectedFinalized<RespondWithObserver>, + : public GarbageCollected<RespondWithObserver>, public ContextClient { USING_GARBAGE_COLLECTED_MIXIN(RespondWithObserver);
diff --git a/third_party/blink/renderer/modules/service_worker/wait_until_observer.h b/third_party/blink/renderer/modules/service_worker/wait_until_observer.h index 162abc3..13a009a 100644 --- a/third_party/blink/renderer/modules/service_worker/wait_until_observer.h +++ b/third_party/blink/renderer/modules/service_worker/wait_until_observer.h
@@ -20,7 +20,7 @@ // Created for each ExtendableEvent instance. class MODULES_EXPORT WaitUntilObserver final - : public GarbageCollectedFinalized<WaitUntilObserver>, + : public GarbageCollected<WaitUntilObserver>, public ContextClient { USING_GARBAGE_COLLECTED_MIXIN(WaitUntilObserver);
diff --git a/third_party/blink/renderer/modules/shapedetection/barcode_detector_statics.h b/third_party/blink/renderer/modules/shapedetection/barcode_detector_statics.h index 4baa785f..c6fcb737 100644 --- a/third_party/blink/renderer/modules/shapedetection/barcode_detector_statics.h +++ b/third_party/blink/renderer/modules/shapedetection/barcode_detector_statics.h
@@ -20,7 +20,7 @@ // This class owns the BarcodeDetectionProvider connection used to create the // BarcodeDetector instances for this ExecutionContext. class BarcodeDetectorStatics final - : public GarbageCollectedFinalized<BarcodeDetectorStatics>, + : public GarbageCollected<BarcodeDetectorStatics>, public Supplement<ExecutionContext> { USING_GARBAGE_COLLECTED_MIXIN(BarcodeDetectorStatics);
diff --git a/third_party/blink/renderer/modules/speech/speech_recognition_controller.h b/third_party/blink/renderer/modules/speech/speech_recognition_controller.h index b02b55c0..3a00e43 100644 --- a/third_party/blink/renderer/modules/speech/speech_recognition_controller.h +++ b/third_party/blink/renderer/modules/speech/speech_recognition_controller.h
@@ -39,7 +39,7 @@ class SpeechGrammarList; class SpeechRecognitionController final - : public GarbageCollectedFinalized<SpeechRecognitionController>, + : public GarbageCollected<SpeechRecognitionController>, public Supplement<LocalFrame> { USING_GARBAGE_COLLECTED_MIXIN(SpeechRecognitionController);
diff --git a/third_party/blink/renderer/modules/storage/storage_namespace.h b/third_party/blink/renderer/modules/storage/storage_namespace.h index d8091d6..2330d0f 100644 --- a/third_party/blink/renderer/modules/storage/storage_namespace.h +++ b/third_party/blink/renderer/modules/storage/storage_namespace.h
@@ -65,7 +65,7 @@ // The StorageNamespace for SessioStorage supplement the Page. |GetCachedArea| // is used to get the storage area for an origin. class MODULES_EXPORT StorageNamespace final - : public GarbageCollectedFinalized<StorageNamespace>, + : public GarbageCollected<StorageNamespace>, public Supplement<Page>, public CachedStorageArea::InspectorEventListener { USING_GARBAGE_COLLECTED_MIXIN(StorageNamespace);
diff --git a/third_party/blink/renderer/modules/storage/testing/fake_area_source.h b/third_party/blink/renderer/modules/storage/testing/fake_area_source.h index 3dd94dd..9d57e67 100644 --- a/third_party/blink/renderer/modules/storage/testing/fake_area_source.h +++ b/third_party/blink/renderer/modules/storage/testing/fake_area_source.h
@@ -11,7 +11,7 @@ namespace blink { -class FakeAreaSource : public GarbageCollectedFinalized<FakeAreaSource>, +class FakeAreaSource : public GarbageCollected<FakeAreaSource>, public CachedStorageArea::Source { USING_GARBAGE_COLLECTED_MIXIN(FakeAreaSource);
diff --git a/third_party/blink/renderer/modules/vibration/navigator_vibration.h b/third_party/blink/renderer/modules/vibration/navigator_vibration.h index 4c2fad0..c478a28 100644 --- a/third_party/blink/renderer/modules/vibration/navigator_vibration.h +++ b/third_party/blink/renderer/modules/vibration/navigator_vibration.h
@@ -46,7 +46,7 @@ }; class MODULES_EXPORT NavigatorVibration final - : public GarbageCollectedFinalized<NavigatorVibration>, + : public GarbageCollected<NavigatorVibration>, public Supplement<Navigator>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(NavigatorVibration);
diff --git a/third_party/blink/renderer/modules/vibration/vibration_controller.h b/third_party/blink/renderer/modules/vibration/vibration_controller.h index 613f45e4..a04ce9f 100644 --- a/third_party/blink/renderer/modules/vibration/vibration_controller.h +++ b/third_party/blink/renderer/modules/vibration/vibration_controller.h
@@ -36,7 +36,7 @@ class UnsignedLongOrUnsignedLongSequence; class MODULES_EXPORT VibrationController final - : public GarbageCollectedFinalized<VibrationController>, + : public GarbageCollected<VibrationController>, public ContextLifecycleObserver, public PageVisibilityObserver { USING_GARBAGE_COLLECTED_MIXIN(VibrationController);
diff --git a/third_party/blink/renderer/modules/vr/navigator_vr.h b/third_party/blink/renderer/modules/vr/navigator_vr.h index 7f79222..29f3602 100644 --- a/third_party/blink/renderer/modules/vr/navigator_vr.h +++ b/third_party/blink/renderer/modules/vr/navigator_vr.h
@@ -21,7 +21,7 @@ class VRController; class MODULES_EXPORT NavigatorVR final - : public GarbageCollectedFinalized<NavigatorVR>, + : public GarbageCollected<NavigatorVR>, public Supplement<Navigator>, public LocalDOMWindow::EventListenerObserver, public FocusChangedObserver {
diff --git a/third_party/blink/renderer/modules/vr/vr_controller.h b/third_party/blink/renderer/modules/vr/vr_controller.h index 68888f5..0ac1037 100644 --- a/third_party/blink/renderer/modules/vr/vr_controller.h +++ b/third_party/blink/renderer/modules/vr/vr_controller.h
@@ -22,7 +22,7 @@ class NavigatorVR; -class VRController final : public GarbageCollectedFinalized<VRController>, +class VRController final : public GarbageCollected<VRController>, public device::mojom::blink::VRServiceClient, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(VRController);
diff --git a/third_party/blink/renderer/modules/vr/vr_display.h b/third_party/blink/renderer/modules/vr/vr_display.h index 8fe18d5..481de2d 100644 --- a/third_party/blink/renderer/modules/vr/vr_display.h +++ b/third_party/blink/renderer/modules/vr/vr_display.h
@@ -45,9 +45,8 @@ // Wrapper class to allow the VRDisplay to distinguish between immersive and // non-immersive XRSession events. -class SessionClientBinding - : public GarbageCollectedFinalized<SessionClientBinding>, - public device::mojom::blink::XRSessionClient { +class SessionClientBinding : public GarbageCollected<SessionClientBinding>, + public device::mojom::blink::XRSessionClient { public: enum class SessionBindingType { kImmersive = 0,
diff --git a/third_party/blink/renderer/modules/wake_lock/wake_lock_controller.h b/third_party/blink/renderer/modules/wake_lock/wake_lock_controller.h index 4688fdd..2cc46bb 100644 --- a/third_party/blink/renderer/modules/wake_lock/wake_lock_controller.h +++ b/third_party/blink/renderer/modules/wake_lock/wake_lock_controller.h
@@ -27,7 +27,7 @@ // WakeLockController is used to track per-Document wake lock state and react to // Document changes appropriately. class MODULES_EXPORT WakeLockController final - : public GarbageCollectedFinalized<WakeLockController>, + : public GarbageCollected<WakeLockController>, public Supplement<ExecutionContext>, public ContextLifecycleObserver, public PageVisibilityObserver {
diff --git a/third_party/blink/renderer/modules/wake_lock/wake_lock_state_record.h b/third_party/blink/renderer/modules/wake_lock/wake_lock_state_record.h index 59e5900..9873b0c 100644 --- a/third_party/blink/renderer/modules/wake_lock/wake_lock_state_record.h +++ b/third_party/blink/renderer/modules/wake_lock/wake_lock_state_record.h
@@ -20,7 +20,7 @@ // https://w3c.github.io/wake-lock/#concepts-and-state-record // Per-document and per-wake lock type internal data. class MODULES_EXPORT WakeLockStateRecord final - : public GarbageCollectedFinalized<WakeLockStateRecord> { + : public GarbageCollected<WakeLockStateRecord> { public: WakeLockStateRecord(ExecutionContext*, WakeLockType);
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_processor_definition.h b/third_party/blink/renderer/modules/webaudio/audio_worklet_processor_definition.h index c5fa9ee..4ff7ca4 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_worklet_processor_definition.h +++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_processor_definition.h
@@ -25,7 +25,7 @@ // This is constructed and destroyed on a worker thread, and all methods also // must be called on the worker thread. class MODULES_EXPORT AudioWorkletProcessorDefinition final - : public GarbageCollectedFinalized<AudioWorkletProcessorDefinition>, + : public GarbageCollected<AudioWorkletProcessorDefinition>, public NameClient { public: static AudioWorkletProcessorDefinition* Create(
diff --git a/third_party/blink/renderer/modules/webdatabase/database_context.h b/third_party/blink/renderer/modules/webdatabase/database_context.h index c561e1c..cb56a46 100644 --- a/third_party/blink/renderer/modules/webdatabase/database_context.h +++ b/third_party/blink/renderer/modules/webdatabase/database_context.h
@@ -38,7 +38,7 @@ class ExecutionContext; class SecurityOrigin; -class DatabaseContext final : public GarbageCollectedFinalized<DatabaseContext>, +class DatabaseContext final : public GarbageCollected<DatabaseContext>, public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(DatabaseContext);
diff --git a/third_party/blink/renderer/modules/webdatabase/database_thread.h b/third_party/blink/renderer/modules/webdatabase/database_thread.h index 60ca9b00..3f5faf80 100644 --- a/third_party/blink/renderer/modules/webdatabase/database_thread.h +++ b/third_party/blink/renderer/modules/webdatabase/database_thread.h
@@ -43,7 +43,7 @@ class SQLTransactionClient; class SQLTransactionCoordinator; -class DatabaseThread final : public GarbageCollectedFinalized<DatabaseThread> { +class DatabaseThread final : public GarbageCollected<DatabaseThread> { public: DatabaseThread(); ~DatabaseThread();
diff --git a/third_party/blink/renderer/modules/webdatabase/inspector_database_resource.h b/third_party/blink/renderer/modules/webdatabase/inspector_database_resource.h index 947bfab..19490af 100644 --- a/third_party/blink/renderer/modules/webdatabase/inspector_database_resource.h +++ b/third_party/blink/renderer/modules/webdatabase/inspector_database_resource.h
@@ -40,7 +40,7 @@ class Database; class InspectorDatabaseResource final - : public GarbageCollectedFinalized<InspectorDatabaseResource> { + : public GarbageCollected<InspectorDatabaseResource> { public: InspectorDatabaseResource(Database*, const String& domain,
diff --git a/third_party/blink/renderer/modules/webdatabase/sql_statement.h b/third_party/blink/renderer/modules/webdatabase/sql_statement.h index e6d736a..dfe4573 100644 --- a/third_party/blink/renderer/modules/webdatabase/sql_statement.h +++ b/third_party/blink/renderer/modules/webdatabase/sql_statement.h
@@ -45,8 +45,7 @@ class SQLStatement final : public GarbageCollected<SQLStatement> { public: - class OnSuccessCallback - : public GarbageCollectedFinalized<OnSuccessCallback> { + class OnSuccessCallback : public GarbageCollected<OnSuccessCallback> { public: virtual ~OnSuccessCallback() = default; virtual void Trace(blink::Visitor*) {} @@ -73,7 +72,7 @@ Member<V8SQLStatementCallback> callback_; }; - class OnErrorCallback : public GarbageCollectedFinalized<OnErrorCallback> { + class OnErrorCallback : public GarbageCollected<OnErrorCallback> { public: virtual ~OnErrorCallback() = default; virtual void Trace(blink::Visitor*) {}
diff --git a/third_party/blink/renderer/modules/webdatabase/sql_statement_backend.h b/third_party/blink/renderer/modules/webdatabase/sql_statement_backend.h index cc1756d3..788633e 100644 --- a/third_party/blink/renderer/modules/webdatabase/sql_statement_backend.h +++ b/third_party/blink/renderer/modules/webdatabase/sql_statement_backend.h
@@ -42,8 +42,7 @@ class SQLResultSet; class SQLStatement; -class SQLStatementBackend final - : public GarbageCollectedFinalized<SQLStatementBackend> { +class SQLStatementBackend final : public GarbageCollected<SQLStatementBackend> { public: SQLStatementBackend(SQLStatement*, const String& statement,
diff --git a/third_party/blink/renderer/modules/webdatabase/sql_transaction.h b/third_party/blink/renderer/modules/webdatabase/sql_transaction.h index 916d3f1..ae3809a0 100644 --- a/third_party/blink/renderer/modules/webdatabase/sql_transaction.h +++ b/third_party/blink/renderer/modules/webdatabase/sql_transaction.h
@@ -56,8 +56,7 @@ DEFINE_WRAPPERTYPEINFO(); public: - class OnProcessCallback - : public GarbageCollectedFinalized<OnProcessCallback> { + class OnProcessCallback : public GarbageCollected<OnProcessCallback> { public: virtual ~OnProcessCallback() = default; virtual void Trace(blink::Visitor*) {} @@ -84,8 +83,7 @@ Member<V8SQLTransactionCallback> callback_; }; - class OnSuccessCallback - : public GarbageCollectedFinalized<OnSuccessCallback> { + class OnSuccessCallback : public GarbageCollected<OnSuccessCallback> { public: virtual ~OnSuccessCallback() = default; virtual void Trace(blink::Visitor*) {} @@ -111,7 +109,7 @@ Member<V8VoidCallback> callback_; }; - class OnErrorCallback : public GarbageCollectedFinalized<OnErrorCallback> { + class OnErrorCallback : public GarbageCollected<OnErrorCallback> { public: virtual ~OnErrorCallback() = default; virtual void Trace(blink::Visitor*) {}
diff --git a/third_party/blink/renderer/modules/webdatabase/sql_transaction_backend.h b/third_party/blink/renderer/modules/webdatabase/sql_transaction_backend.h index 3525a91..8c82b2ee 100644 --- a/third_party/blink/renderer/modules/webdatabase/sql_transaction_backend.h +++ b/third_party/blink/renderer/modules/webdatabase/sql_transaction_backend.h
@@ -47,8 +47,7 @@ class SQLTransactionBackend; class SQLValue; -class SQLTransactionWrapper - : public GarbageCollectedFinalized<SQLTransactionWrapper> { +class SQLTransactionWrapper : public GarbageCollected<SQLTransactionWrapper> { public: virtual ~SQLTransactionWrapper() = default; virtual void Trace(blink::Visitor* visitor) {} @@ -59,7 +58,7 @@ }; class SQLTransactionBackend final - : public GarbageCollectedFinalized<SQLTransactionBackend>, + : public GarbageCollected<SQLTransactionBackend>, public SQLTransactionStateMachine<SQLTransactionBackend> { public: SQLTransactionBackend(Database*,
diff --git a/third_party/blink/renderer/modules/webdatabase/sql_transaction_coordinator.h b/third_party/blink/renderer/modules/webdatabase/sql_transaction_coordinator.h index bec6d2f..593bc5b 100644 --- a/third_party/blink/renderer/modules/webdatabase/sql_transaction_coordinator.h +++ b/third_party/blink/renderer/modules/webdatabase/sql_transaction_coordinator.h
@@ -45,7 +45,7 @@ class SQLTransactionBackend; class SQLTransactionCoordinator final - : public GarbageCollectedFinalized<SQLTransactionCoordinator> { + : public GarbageCollected<SQLTransactionCoordinator> { public: SQLTransactionCoordinator(); void Trace(blink::Visitor*);
diff --git a/third_party/blink/renderer/modules/webshare/navigator_share.h b/third_party/blink/renderer/modules/webshare/navigator_share.h index af3c18e..23ff0e6 100644 --- a/third_party/blink/renderer/modules/webshare/navigator_share.h +++ b/third_party/blink/renderer/modules/webshare/navigator_share.h
@@ -24,7 +24,7 @@ class ShareData; class MODULES_EXPORT NavigatorShare final - : public GarbageCollectedFinalized<NavigatorShare>, + : public GarbageCollected<NavigatorShare>, public Supplement<Navigator> { USING_GARBAGE_COLLECTED_MIXIN(NavigatorShare);
diff --git a/third_party/blink/renderer/modules/websockets/dom_websocket.h b/third_party/blink/renderer/modules/websockets/dom_websocket.h index 1736f88..6fd0d78 100644 --- a/third_party/blink/renderer/modules/websockets/dom_websocket.h +++ b/third_party/blink/renderer/modules/websockets/dom_websocket.h
@@ -152,7 +152,7 @@ private: // FIXME: This should inherit blink::EventQueue. - class EventQueue final : public GarbageCollectedFinalized<EventQueue> { + class EventQueue final : public GarbageCollected<EventQueue> { public: static EventQueue* Create(EventTarget* target) { return MakeGarbageCollected<EventQueue>(target);
diff --git a/third_party/blink/renderer/modules/websockets/web_pepper_socket_channel_client_proxy.h b/third_party/blink/renderer/modules/websockets/web_pepper_socket_channel_client_proxy.h index 80159e0..bf525db6 100644 --- a/third_party/blink/renderer/modules/websockets/web_pepper_socket_channel_client_proxy.h +++ b/third_party/blink/renderer/modules/websockets/web_pepper_socket_channel_client_proxy.h
@@ -21,7 +21,7 @@ // WebPepperSocketImpl cannot be on Oilpan's heap. Thus we need to introduce a // proxy class to decouple WebPepperSocketImpl from WebSocketChannelClient. class WebPepperSocketChannelClientProxy final - : public GarbageCollectedFinalized<WebPepperSocketChannelClientProxy>, + : public GarbageCollected<WebPepperSocketChannelClientProxy>, public WebSocketChannelClient { USING_GARBAGE_COLLECTED_MIXIN(WebPepperSocketChannelClientProxy);
diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel.h b/third_party/blink/renderer/modules/websockets/websocket_channel.h index 5c90167..d2f1df6a 100644 --- a/third_party/blink/renderer/modules/websockets/websocket_channel.h +++ b/third_party/blink/renderer/modules/websockets/websocket_channel.h
@@ -47,7 +47,7 @@ class KURL; class MODULES_EXPORT WebSocketChannel - : public GarbageCollectedFinalized<WebSocketChannel> { + : public GarbageCollected<WebSocketChannel> { public: enum class SendResult { SENT_SYNCHRONOUSLY, CALLBACK_WILL_BE_CALLED };
diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc index e4aec08..4d58e824 100644 --- a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc +++ b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
@@ -81,7 +81,7 @@ } // namespace class WebSocketChannelImpl::BlobLoader final - : public GarbageCollectedFinalized<WebSocketChannelImpl::BlobLoader>, + : public GarbageCollected<WebSocketChannelImpl::BlobLoader>, public FileReaderLoaderClient { public: BlobLoader(scoped_refptr<BlobDataHandle>, @@ -105,7 +105,7 @@ }; class WebSocketChannelImpl::Message final - : public GarbageCollectedFinalized<WebSocketChannelImpl::Message> { + : public GarbageCollected<WebSocketChannelImpl::Message> { public: Message(const std::string&, base::OnceClosure completion_callback); explicit Message(scoped_refptr<BlobDataHandle>);
diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_impl_test.cc b/third_party/blink/renderer/modules/websockets/websocket_channel_impl_test.cc index b6516c1..d2712fae 100644 --- a/third_party/blink/renderer/modules/websockets/websocket_channel_impl_test.cc +++ b/third_party/blink/renderer/modules/websockets/websocket_channel_impl_test.cc
@@ -41,7 +41,7 @@ typedef testing::StrictMock<testing::MockFunction<void(int)>> Checkpoint; class MockWebSocketChannelClient - : public GarbageCollectedFinalized<MockWebSocketChannelClient>, + : public GarbageCollected<MockWebSocketChannelClient>, public WebSocketChannelClient { USING_GARBAGE_COLLECTED_MIXIN(MockWebSocketChannelClient);
diff --git a/third_party/blink/renderer/modules/xr/navigator_xr.h b/third_party/blink/renderer/modules/xr/navigator_xr.h index 988e4025..5ed2491 100644 --- a/third_party/blink/renderer/modules/xr/navigator_xr.h +++ b/third_party/blink/renderer/modules/xr/navigator_xr.h
@@ -15,9 +15,8 @@ class Document; class XR; -class MODULES_EXPORT NavigatorXR final - : public GarbageCollectedFinalized<NavigatorXR>, - public Supplement<Navigator> { +class MODULES_EXPORT NavigatorXR final : public GarbageCollected<NavigatorXR>, + public Supplement<Navigator> { USING_GARBAGE_COLLECTED_MIXIN(NavigatorXR); public:
diff --git a/third_party/blink/renderer/modules/xr/xr.h b/third_party/blink/renderer/modules/xr/xr.h index ab43dca..6b1818b1 100644 --- a/third_party/blink/renderer/modules/xr/xr.h +++ b/third_party/blink/renderer/modules/xr/xr.h
@@ -111,7 +111,7 @@ // ScriptPromiseResolver that allows us to add additional logic as certain // things related to promise's life cycle happen. class PendingRequestSessionQuery final - : public GarbageCollectedFinalized<PendingRequestSessionQuery> { + : public GarbageCollected<PendingRequestSessionQuery> { public: PendingRequestSessionQuery(int64_t ukm_source_id, ScriptPromiseResolver* resolver,
diff --git a/third_party/blink/renderer/modules/xr/xr_canvas_input_provider.h b/third_party/blink/renderer/modules/xr/xr_canvas_input_provider.h index 4f0d67b..3662b8d7 100644 --- a/third_party/blink/renderer/modules/xr/xr_canvas_input_provider.h +++ b/third_party/blink/renderer/modules/xr/xr_canvas_input_provider.h
@@ -19,9 +19,8 @@ class XRInputSource; class XRSession; -class XRCanvasInputProvider - : public GarbageCollectedFinalized<XRCanvasInputProvider>, - public NameClient { +class XRCanvasInputProvider : public GarbageCollected<XRCanvasInputProvider>, + public NameClient { public: XRCanvasInputProvider(XRSession*, HTMLCanvasElement*); virtual ~XRCanvasInputProvider();
diff --git a/third_party/blink/renderer/modules/xr/xr_frame_provider.h b/third_party/blink/renderer/modules/xr/xr_frame_provider.h index 41f7a06..394a019 100644 --- a/third_party/blink/renderer/modules/xr/xr_frame_provider.h +++ b/third_party/blink/renderer/modules/xr/xr_frame_provider.h
@@ -21,8 +21,7 @@ // This class manages requesting and dispatching frame updates, which includes // pose information for a given XRDevice. -class XRFrameProvider final - : public GarbageCollectedFinalized<XRFrameProvider> { +class XRFrameProvider final : public GarbageCollected<XRFrameProvider> { public: explicit XRFrameProvider(XR*);
diff --git a/third_party/blink/renderer/modules/xr/xr_frame_request_callback_collection.h b/third_party/blink/renderer/modules/xr/xr_frame_request_callback_collection.h index 5698febc..d5258abd 100644 --- a/third_party/blink/renderer/modules/xr/xr_frame_request_callback_collection.h +++ b/third_party/blink/renderer/modules/xr/xr_frame_request_callback_collection.h
@@ -17,7 +17,7 @@ class XRSession; class XRFrameRequestCallbackCollection final - : public GarbageCollectedFinalized<XRFrameRequestCallbackCollection>, + : public GarbageCollected<XRFrameRequestCallbackCollection>, public NameClient { public: explicit XRFrameRequestCallbackCollection(ExecutionContext*);
diff --git a/third_party/blink/renderer/platform/bindings/callback_function_base.h b/third_party/blink/renderer/platform/bindings/callback_function_base.h index 19054ad..65fe7e6 100644 --- a/third_party/blink/renderer/platform/bindings/callback_function_base.h +++ b/third_party/blink/renderer/platform/bindings/callback_function_base.h
@@ -23,7 +23,7 @@ // |Invoke| member function that performs "invoke" steps. Subclasses will // implement it. class PLATFORM_EXPORT CallbackFunctionBase - : public GarbageCollectedFinalized<CallbackFunctionBase>, + : public GarbageCollected<CallbackFunctionBase>, public NameClient { public: virtual ~CallbackFunctionBase() = default;
diff --git a/third_party/blink/renderer/platform/bindings/callback_interface_base.h b/third_party/blink/renderer/platform/bindings/callback_interface_base.h index 896a9fa..6176390d 100644 --- a/third_party/blink/renderer/platform/bindings/callback_interface_base.h +++ b/third_party/blink/renderer/platform/bindings/callback_interface_base.h
@@ -21,7 +21,7 @@ // As the signatures of callback interface's operations vary, this class does // not implement any operation. Subclasses will implement it. class PLATFORM_EXPORT CallbackInterfaceBase - : public GarbageCollectedFinalized<CallbackInterfaceBase>, + : public GarbageCollected<CallbackInterfaceBase>, public NameClient { public: // Whether the callback interface is a "single operation callback interface"
diff --git a/third_party/blink/renderer/platform/bindings/custom_wrappable.h b/third_party/blink/renderer/platform/bindings/custom_wrappable.h index 65a381f..f7a543b2 100644 --- a/third_party/blink/renderer/platform/bindings/custom_wrappable.h +++ b/third_party/blink/renderer/platform/bindings/custom_wrappable.h
@@ -13,7 +13,7 @@ // See the comment on CustomWrappableAdaptor. class PLATFORM_EXPORT CustomWrappable - : public GarbageCollectedFinalized<CustomWrappable>, + : public GarbageCollected<CustomWrappable>, public NameClient { public: virtual ~CustomWrappable() = default;
diff --git a/third_party/blink/renderer/platform/bindings/script_state.h b/third_party/blink/renderer/platform/bindings/script_state.h index 31a15ce..f4ba8ef 100644 --- a/third_party/blink/renderer/platform/bindings/script_state.h +++ b/third_party/blink/renderer/platform/bindings/script_state.h
@@ -73,8 +73,7 @@ // ScriptState is created when v8::Context is created. // ScriptState is destroyed when v8::Context is garbage-collected and // all V8 proxy objects that have references to the ScriptState are destructed. -class PLATFORM_EXPORT ScriptState final - : public GarbageCollectedFinalized<ScriptState> { +class PLATFORM_EXPORT ScriptState final : public GarbageCollected<ScriptState> { public: class Scope { STACK_ALLOCATED(); @@ -205,7 +204,7 @@ // ScriptState alive. You need to call Clear() once you no longer need the // context. Otherwise, the context will leak. class ScriptStateProtectingContext final - : public GarbageCollectedFinalized<ScriptStateProtectingContext> { + : public GarbageCollected<ScriptStateProtectingContext> { public: explicit ScriptStateProtectingContext(ScriptState* script_state) : script_state_(script_state) {
diff --git a/third_party/blink/renderer/platform/bindings/script_wrappable.h b/third_party/blink/renderer/platform/bindings/script_wrappable.h index 2a9c4cc..4ab3e0c7 100644 --- a/third_party/blink/renderer/platform/bindings/script_wrappable.h +++ b/third_party/blink/renderer/platform/bindings/script_wrappable.h
@@ -50,7 +50,7 @@ // The wrapper object for the main world is stored in ScriptWrappable. Wrapper // objects for other worlds are stored in DOMWrapperMap. class PLATFORM_EXPORT ScriptWrappable - : public GarbageCollectedFinalized<ScriptWrappable>, + : public GarbageCollected<ScriptWrappable>, public NameClient { public: virtual ~ScriptWrappable() = default;
diff --git a/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h b/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h index 97b2bc31f..6b5c64a 100644 --- a/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h +++ b/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h
@@ -102,7 +102,7 @@ // Pointers to core/ objects that are garbage collected. Receives callback // when V8PerIsolateData will be destroyed. class PLATFORM_EXPORT GarbageCollectedData - : public GarbageCollectedFinalized<GarbageCollectedData> { + : public GarbageCollected<GarbageCollectedData> { public: virtual ~GarbageCollectedData() = default; virtual void WillBeDestroyed() {}
diff --git a/third_party/blink/renderer/platform/content_decryption_module_result.h b/third_party/blink/renderer/platform/content_decryption_module_result.h index 620f8393..d9d0056 100644 --- a/third_party/blink/renderer/platform/content_decryption_module_result.h +++ b/third_party/blink/renderer/platform/content_decryption_module_result.h
@@ -17,7 +17,7 @@ // Used to notify completion of a CDM operation. class ContentDecryptionModuleResult - : public GarbageCollectedFinalized<ContentDecryptionModuleResult> { + : public GarbageCollected<ContentDecryptionModuleResult> { public: virtual ~ContentDecryptionModuleResult() = default;
diff --git a/third_party/blink/renderer/platform/crypto_result.h b/third_party/blink/renderer/platform/crypto_result.h index bd38608..2fc6b5aa 100644 --- a/third_party/blink/renderer/platform/crypto_result.h +++ b/third_party/blink/renderer/platform/crypto_result.h
@@ -49,8 +49,7 @@ }; // Receives notification of completion of the crypto operation. -class PLATFORM_EXPORT CryptoResult - : public GarbageCollectedFinalized<CryptoResult> { +class PLATFORM_EXPORT CryptoResult : public GarbageCollected<CryptoResult> { public: virtual ~CryptoResult() = default;
diff --git a/third_party/blink/renderer/platform/encrypted_media_request.h b/third_party/blink/renderer/platform/encrypted_media_request.h index 143f47c..25770c1 100644 --- a/third_party/blink/renderer/platform/encrypted_media_request.h +++ b/third_party/blink/renderer/platform/encrypted_media_request.h
@@ -18,8 +18,7 @@ template <typename T> class WebVector; -class EncryptedMediaRequest - : public GarbageCollectedFinalized<EncryptedMediaRequest> { +class EncryptedMediaRequest : public GarbageCollected<EncryptedMediaRequest> { public: virtual ~EncryptedMediaRequest() = default;
diff --git a/third_party/blink/renderer/platform/fonts/font_cache_client.h b/third_party/blink/renderer/platform/fonts/font_cache_client.h index d56df8c..2160fcb2 100644 --- a/third_party/blink/renderer/platform/fonts/font_cache_client.h +++ b/third_party/blink/renderer/platform/fonts/font_cache_client.h
@@ -37,7 +37,7 @@ namespace blink { class PLATFORM_EXPORT FontCacheClient - : public GarbageCollectedFinalized<FontCacheClient> { + : public GarbageCollected<FontCacheClient> { public: virtual ~FontCacheClient() = default;
diff --git a/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl_test.cc b/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl_test.cc index 26e5544..6537e49 100644 --- a/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl_test.cc +++ b/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl_test.cc
@@ -43,7 +43,7 @@ } class MockAnimationWorkletMutator - : public GarbageCollectedFinalized<MockAnimationWorkletMutator>, + : public GarbageCollected<MockAnimationWorkletMutator>, public AnimationWorkletMutator { USING_GARBAGE_COLLECTED_MIXIN(MockAnimationWorkletMutator);
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc b/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc index baece0b..b535b55 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc +++ b/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc
@@ -116,7 +116,7 @@ class BitmapImageTest : public testing::Test { public: - class FakeImageObserver : public GarbageCollectedFinalized<FakeImageObserver>, + class FakeImageObserver : public GarbageCollected<FakeImageObserver>, public ImageObserver { USING_GARBAGE_COLLECTED_MIXIN(FakeImageObserver);
diff --git a/third_party/blink/renderer/platform/graphics/filters/filter_effect.h b/third_party/blink/renderer/platform/graphics/filters/filter_effect.h index 688ad34..cec2f5c1 100644 --- a/third_party/blink/renderer/platform/graphics/filters/filter_effect.h +++ b/third_party/blink/renderer/platform/graphics/filters/filter_effect.h
@@ -48,9 +48,7 @@ kFilterEffectTypeSourceInput }; -class PLATFORM_EXPORT FilterEffect - : public GarbageCollectedFinalized<FilterEffect> { - +class PLATFORM_EXPORT FilterEffect : public GarbageCollected<FilterEffect> { public: virtual ~FilterEffect(); virtual void Trace(blink::Visitor*);
diff --git a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.h b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.h index bea81dfb..4a08050 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.h +++ b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.h
@@ -30,9 +30,8 @@ namespace blink { class PLATFORM_EXPORT ImageLayerBridge - : public GarbageCollectedFinalized<ImageLayerBridge>, + : public GarbageCollected<ImageLayerBridge>, public cc::TextureLayerClient { - public: ImageLayerBridge(OpacityMode); ~ImageLayerBridge() override;
diff --git a/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h b/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h index 1ffe2ab5..4bd1027 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h +++ b/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h
@@ -28,7 +28,7 @@ class Image; class PLATFORM_EXPORT XRFrameTransport final - : public GarbageCollectedFinalized<XRFrameTransport>, + : public GarbageCollected<XRFrameTransport>, public device::mojom::blink::XRPresentationClient { public: explicit XRFrameTransport();
diff --git a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc index 7a97f6b..b7643798 100644 --- a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc +++ b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc
@@ -49,7 +49,7 @@ }; class MockPaintWorkletPainter - : public GarbageCollectedFinalized<MockPaintWorkletPainter>, + : public GarbageCollected<MockPaintWorkletPainter>, public PaintWorkletPainter { USING_GARBAGE_COLLECTED_MIXIN(MockPaintWorkletPainter);
diff --git a/third_party/blink/renderer/platform/heap/finalizer_traits.h b/third_party/blink/renderer/platform/heap/finalizer_traits.h index 93f9497..d96e356 100644 --- a/third_party/blink/renderer/platform/heap/finalizer_traits.h +++ b/third_party/blink/renderer/platform/heap/finalizer_traits.h
@@ -31,7 +31,7 @@ : std::true_type {}; // The FinalizerTraitImpl specifies how to finalize objects. -template <typename T, bool isGarbageCollectedFinalized> +template <typename T, bool isFinalized> struct FinalizerTraitImpl; template <typename T>
diff --git a/third_party/blink/renderer/platform/heap/garbage_collected.h b/third_party/blink/renderer/platform/heap/garbage_collected.h index 6c6842d7..d0f4d27 100644 --- a/third_party/blink/renderer/platform/heap/garbage_collected.h +++ b/third_party/blink/renderer/platform/heap/garbage_collected.h
@@ -179,23 +179,11 @@ // Base class for objects allocated in the Blink garbage-collected heap. // -// Defines a 'new' operator that allocates the memory in the heap. 'delete' -// should not be called on objects that inherit from GarbageCollected. -// // Instances of GarbageCollected will be finalized if they are non-trivially // destructible. template <typename T> class GarbageCollected; -// TODO(bikineev): Remove this class after the clang plugin is updated. -template <typename T> -class GarbageCollectedFinalized : public GarbageCollected<T> { - protected: - GarbageCollectedFinalized() = default; - - DISALLOW_COPY_AND_ASSIGN(GarbageCollectedFinalized); -}; - template <typename T, bool = WTF::IsSubclassOfTemplate<typename std::remove_const<T>::type, GarbageCollected>::value>
diff --git a/third_party/blink/renderer/platform/heap/gc_info.h b/third_party/blink/renderer/platform/heap/gc_info.h index 9466d29..fa960e46 100644 --- a/third_party/blink/renderer/platform/heap/gc_info.h +++ b/third_party/blink/renderer/platform/heap/gc_info.h
@@ -25,7 +25,7 @@ namespace blink { // GCInfo contains metadata for objects that are instantiated from classes that -// inherit for GarbageCollected or GarbageCollectedFinalized. +// inherit from GarbageCollected. struct GCInfo { const TraceCallback trace; const FinalizationCallback finalize;
diff --git a/third_party/blink/renderer/platform/heap/heap_compact_test.cc b/third_party/blink/renderer/platform/heap/heap_compact_test.cc index 0d2ab96..e2eef4b7 100644 --- a/third_party/blink/renderer/platform/heap/heap_compact_test.cc +++ b/third_party/blink/renderer/platform/heap/heap_compact_test.cc
@@ -23,7 +23,7 @@ HashTablesAreCompacted, }; -class IntWrapper : public blink::GarbageCollectedFinalized<IntWrapper> { +class IntWrapper : public blink::GarbageCollected<IntWrapper> { public: static bool did_verify_at_least_once;
diff --git a/third_party/blink/renderer/platform/heap/heap_test.cc b/third_party/blink/renderer/platform/heap/heap_test.cc index dad0ca0..9fbcf444 100644 --- a/third_party/blink/renderer/platform/heap/heap_test.cc +++ b/third_party/blink/renderer/platform/heap/heap_test.cc
@@ -70,7 +70,7 @@ class HeapTest : public TestSupportingGC {}; -class IntWrapper : public GarbageCollectedFinalized<IntWrapper> { +class IntWrapper : public GarbageCollected<IntWrapper> { public: virtual ~IntWrapper() { destructor_calls_.fetch_add(1, std::memory_order_relaxed); @@ -415,8 +415,7 @@ char payload[64]; }; -class HeapTestSuperClass - : public GarbageCollectedFinalized<HeapTestSuperClass> { +class HeapTestSuperClass : public GarbageCollected<HeapTestSuperClass> { public: HeapTestSuperClass() = default; virtual ~HeapTestSuperClass() { ++destructor_calls_; } @@ -680,8 +679,7 @@ Persistent<PersistentChain> persistent_chain_; }; - class PersistentChain final - : public GarbageCollectedFinalized<PersistentChain> { + class PersistentChain final : public GarbageCollected<PersistentChain> { public: explicit PersistentChain(int count) { ref_counted_chain_ = base::AdoptRef(RefCountedChain::Create(count)); @@ -712,7 +710,7 @@ EXPECT_GE((intptr_t)expected + slack, (intptr_t)actual); } -class TraceCounter final : public GarbageCollectedFinalized<TraceCounter> { +class TraceCounter final : public GarbageCollected<TraceCounter> { public: TraceCounter() : trace_count_(0) {} @@ -747,7 +745,7 @@ }; class SimpleFinalizedObject final - : public GarbageCollectedFinalized<SimpleFinalizedObject> { + : public GarbageCollected<SimpleFinalizedObject> { public: SimpleFinalizedObject() = default; ~SimpleFinalizedObject() { ++destructor_calls_; } @@ -789,7 +787,7 @@ int value_; }; -class Bar : public GarbageCollectedFinalized<Bar> { +class Bar : public GarbageCollected<Bar> { public: Bar() : magic_(kMagic) { live_++; } @@ -878,8 +876,7 @@ Member<IntWrapper> int_wrapper_; }; -class LargeHeapObject final - : public GarbageCollectedFinalized<LargeHeapObject> { +class LargeHeapObject final : public GarbageCollected<LargeHeapObject> { public: LargeHeapObject() { int_wrapper_ = MakeGarbageCollected<IntWrapper>(23); } ~LargeHeapObject() { destructor_calls_++; } @@ -910,7 +907,7 @@ // ref-counting operations. // class RefCountedAndGarbageCollected final - : public GarbageCollectedFinalized<RefCountedAndGarbageCollected> { + : public GarbageCollected<RefCountedAndGarbageCollected> { public: RefCountedAndGarbageCollected() : keep_alive_(PERSISTENT_FROM_HERE) {} ~RefCountedAndGarbageCollected() { ++destructor_calls_; } @@ -945,7 +942,7 @@ class RefCountedAndGarbageCollected2 final : public HeapTestOtherSuperClass, - public GarbageCollectedFinalized<RefCountedAndGarbageCollected2> { + public GarbageCollected<RefCountedAndGarbageCollected2> { public: RefCountedAndGarbageCollected2() : keep_alive_(PERSISTENT_FROM_HERE) {} ~RefCountedAndGarbageCollected2() { ++destructor_calls_; } @@ -1019,7 +1016,7 @@ WeakMember<Bar> weak_bar_; }; -class Observable final : public GarbageCollectedFinalized<Observable> { +class Observable final : public GarbageCollected<Observable> { USING_PRE_FINALIZER(Observable, WillFinalize); public: @@ -1044,7 +1041,7 @@ bool Observable::will_finalize_was_called_ = false; class ObservableWithPreFinalizer final - : public GarbageCollectedFinalized<ObservableWithPreFinalizer> { + : public GarbageCollected<ObservableWithPreFinalizer> { USING_PRE_FINALIZER(ObservableWithPreFinalizer, Dispose); public: @@ -1067,7 +1064,7 @@ bool g_dispose_was_called_for_pre_finalizer_mixin = false; bool g_dispose_was_called_for_pre_finalizer_sub_class = false; -class PreFinalizerBase : public GarbageCollectedFinalized<PreFinalizerBase> { +class PreFinalizerBase : public GarbageCollected<PreFinalizerBase> { USING_PRE_FINALIZER(PreFinalizerBase, Dispose); public: @@ -1202,7 +1199,7 @@ class SuperClass; -class PointsBack final : public GarbageCollectedFinalized<PointsBack> { +class PointsBack final : public GarbageCollected<PointsBack> { public: PointsBack() : back_pointer_(nullptr) { ++alive_count_; } ~PointsBack() { --alive_count_; } @@ -1223,7 +1220,7 @@ int PointsBack::alive_count_ = 0; -class SuperClass : public GarbageCollectedFinalized<SuperClass> { +class SuperClass : public GarbageCollected<SuperClass> { public: explicit SuperClass(PointsBack* points_back) : points_back_(points_back) { points_back_->SetBackPointer(this); @@ -1250,7 +1247,7 @@ }; int SuperClass::alive_count_ = 0; -class SubData final : public GarbageCollectedFinalized<SubData> { +class SubData final : public GarbageCollected<SubData> { public: SubData() { ++alive_count_; } ~SubData() { --alive_count_; } @@ -1369,8 +1366,7 @@ namespace blink { -class OneKiloByteObject final - : public GarbageCollectedFinalized<OneKiloByteObject> { +class OneKiloByteObject final : public GarbageCollected<OneKiloByteObject> { public: ~OneKiloByteObject() { destructor_calls_++; } char* Data() { return data_; } @@ -1402,7 +1398,7 @@ }; class FinalizationAllocator final - : public GarbageCollectedFinalized<FinalizationAllocator> { + : public GarbageCollected<FinalizationAllocator> { public: FinalizationAllocator(Persistent<IntWrapper>* wrapper) : wrapper_(wrapper) {} @@ -1422,7 +1418,7 @@ }; class PreFinalizerBackingShrinkForbidden final - : public GarbageCollectedFinalized<PreFinalizerBackingShrinkForbidden> { + : public GarbageCollected<PreFinalizerBackingShrinkForbidden> { USING_PRE_FINALIZER(PreFinalizerBackingShrinkForbidden, Dispose); public: @@ -1479,8 +1475,7 @@ } class PreFinalizerVectorBackingExpandForbidden final - : public GarbageCollectedFinalized< - PreFinalizerVectorBackingExpandForbidden> { + : public GarbageCollected<PreFinalizerVectorBackingExpandForbidden> { USING_PRE_FINALIZER(PreFinalizerVectorBackingExpandForbidden, Dispose); public: @@ -1509,8 +1504,7 @@ } class PreFinalizerHashTableBackingExpandForbidden final - : public GarbageCollectedFinalized< - PreFinalizerHashTableBackingExpandForbidden> { + : public GarbageCollected<PreFinalizerHashTableBackingExpandForbidden> { USING_PRE_FINALIZER(PreFinalizerHashTableBackingExpandForbidden, Dispose); public: @@ -1540,7 +1534,7 @@ #endif // DCHECK_IS_ON() class PreFinalizerAllocationForbidden - : public GarbageCollectedFinalized<PreFinalizerAllocationForbidden> { + : public GarbageCollected<PreFinalizerAllocationForbidden> { USING_PRE_FINALIZER(PreFinalizerAllocationForbidden, Dispose); public: @@ -4275,7 +4269,7 @@ namespace blink { class InlinedVectorObjectWrapper final - : public GarbageCollectedFinalized<InlinedVectorObjectWrapper> { + : public GarbageCollected<InlinedVectorObjectWrapper> { public: InlinedVectorObjectWrapper() { InlinedVectorObject i1, i2; @@ -4300,7 +4294,7 @@ }; class InlinedVectorObjectWithVtableWrapper final - : public GarbageCollectedFinalized<InlinedVectorObjectWithVtableWrapper> { + : public GarbageCollected<InlinedVectorObjectWithVtableWrapper> { public: InlinedVectorObjectWithVtableWrapper() { InlinedVectorObjectWithVtable i1, i2; @@ -5312,7 +5306,7 @@ template <typename T> class TraceIfNeededTester final - : public GarbageCollectedFinalized<TraceIfNeededTester<T>> { + : public GarbageCollected<TraceIfNeededTester<T>> { public: TraceIfNeededTester() = default; explicit TraceIfNeededTester(const T& obj) : obj_(obj) {} @@ -5458,7 +5452,7 @@ } class AllocInSuperConstructorArgumentSuper - : public GarbageCollectedFinalized<AllocInSuperConstructorArgumentSuper> { + : public GarbageCollected<AllocInSuperConstructorArgumentSuper> { public: AllocInSuperConstructorArgumentSuper(bool value) : value_(value) {} virtual ~AllocInSuperConstructorArgumentSuper() = default; @@ -5486,7 +5480,7 @@ } class NonNodeAllocatingNodeInDestructor final - : public GarbageCollectedFinalized<NonNodeAllocatingNodeInDestructor> { + : public GarbageCollected<NonNodeAllocatingNodeInDestructor> { public: ~NonNodeAllocatingNodeInDestructor() { node_ = new Persistent<IntNode>(IntNode::Create(10)); @@ -5846,8 +5840,7 @@ }; class ThreadedClearOnShutdownTester::HeapObject final - : public GarbageCollectedFinalized< - ThreadedClearOnShutdownTester::HeapObject> { + : public GarbageCollected<ThreadedClearOnShutdownTester::HeapObject> { public: explicit HeapObject(bool test_destructor) : test_destructor_(test_destructor) {} @@ -5950,7 +5943,7 @@ static_assert(WTF::IsGarbageCollectedType<const SimpleObject>::value, "const GarbageCollected<>"); static_assert(WTF::IsGarbageCollectedType<IntWrapper>::value, - "GarbageCollectedFinalized<>"); + "GarbageCollected<>"); static_assert(WTF::IsGarbageCollectedType<GarbageCollectedMixin>::value, "GarbageCollectedMixin"); static_assert(WTF::IsGarbageCollectedType<const GarbageCollectedMixin>::value, @@ -6058,8 +6051,7 @@ PreciselyCollectGarbage(); } -struct HeapHashMapWrapper final - : GarbageCollectedFinalized<HeapHashMapWrapper> { +struct HeapHashMapWrapper final : GarbageCollected<HeapHashMapWrapper> { HeapHashMapWrapper() { for (int i = 0; i < 100; ++i) { map_.insert(MakeGarbageCollected<IntWrapper>(i),
diff --git a/third_party/blink/renderer/platform/heap/heap_thread_test.cc b/third_party/blink/renderer/platform/heap/heap_thread_test.cc index 0d411f4..b278208 100644 --- a/third_party/blink/renderer/platform/heap/heap_thread_test.cc +++ b/third_party/blink/renderer/platform/heap/heap_thread_test.cc
@@ -170,8 +170,7 @@ class MarkingSameThreadCheckTester : public AlternatingThreadTester { private: - class MainThreadObject final - : public GarbageCollectedFinalized<MainThreadObject> { + class MainThreadObject final : public GarbageCollected<MainThreadObject> { public: void Trace(blink::Visitor* visitor) { visitor->Trace(set_); } void AddToSet(Object* object) { set_.insert(42, object); } @@ -212,7 +211,7 @@ #endif class DestructorLockingObject - : public GarbageCollectedFinalized<DestructorLockingObject> { + : public GarbageCollected<DestructorLockingObject> { public: DestructorLockingObject() = default; virtual ~DestructorLockingObject() { ++destructor_calls_; }
diff --git a/third_party/blink/renderer/platform/heap/incremental_marking_test.cc b/third_party/blink/renderer/platform/heap/incremental_marking_test.cc index e6307cf..e30bbba 100644 --- a/third_party/blink/renderer/platform/heap/incremental_marking_test.cc +++ b/third_party/blink/renderer/platform/heap/incremental_marking_test.cc
@@ -1878,7 +1878,7 @@ driver.FinishGC(); } -class Destructed final : public GarbageCollectedFinalized<Destructed> { +class Destructed final : public GarbageCollected<Destructed> { public: ~Destructed() { n_destructed++; } @@ -1889,7 +1889,7 @@ size_t Destructed::n_destructed = 0; -class Wrapper final : public GarbageCollectedFinalized<Wrapper> { +class Wrapper final : public GarbageCollected<Wrapper> { public: using HashType = HeapLinkedHashSet<Member<Destructed>>;
diff --git a/third_party/blink/renderer/platform/instrumentation/memory_pressure_listener.h b/third_party/blink/renderer/platform/instrumentation/memory_pressure_listener.h index 9ed96d2f..c6cbeea 100644 --- a/third_party/blink/renderer/platform/instrumentation/memory_pressure_listener.h +++ b/third_party/blink/renderer/platform/instrumentation/memory_pressure_listener.h
@@ -26,7 +26,7 @@ // MemoryPressureListenerRegistry listens to some events which could be // opportunities for reducing memory consumption and notifies its clients. class PLATFORM_EXPORT MemoryPressureListenerRegistry final - : public GarbageCollectedFinalized<MemoryPressureListenerRegistry> { + : public GarbageCollected<MemoryPressureListenerRegistry> { public: static MemoryPressureListenerRegistry& Instance();
diff --git a/third_party/blink/renderer/platform/lifecycle_context_test.cc b/third_party/blink/renderer/platform/lifecycle_context_test.cc index 20f9b77..3f45f763 100644 --- a/third_party/blink/renderer/platform/lifecycle_context_test.cc +++ b/third_party/blink/renderer/platform/lifecycle_context_test.cc
@@ -39,7 +39,7 @@ class TestingObserver; class DummyContext final - : public GarbageCollectedFinalized<DummyContext>, + : public GarbageCollected<DummyContext>, public LifecycleNotifier<DummyContext, TestingObserver> { USING_GARBAGE_COLLECTED_MIXIN(DummyContext);
diff --git a/third_party/blink/renderer/platform/loader/allowed_by_nosniff_test.cc b/third_party/blink/renderer/platform/loader/allowed_by_nosniff_test.cc index 1f7940c..a676308 100644 --- a/third_party/blink/renderer/platform/loader/allowed_by_nosniff_test.cc +++ b/third_party/blink/renderer/platform/loader/allowed_by_nosniff_test.cc
@@ -22,7 +22,7 @@ using WebFeature = mojom::WebFeature; using ::testing::_; -class MockUseCounter : public GarbageCollectedFinalized<MockUseCounter>, +class MockUseCounter : public GarbageCollected<MockUseCounter>, public UseCounter { USING_GARBAGE_COLLECTED_MIXIN(MockUseCounter); @@ -35,7 +35,7 @@ MOCK_METHOD1(CountDeprecation, void(mojom::WebFeature)); }; -class MockConsoleLogger : public GarbageCollectedFinalized<MockConsoleLogger>, +class MockConsoleLogger : public GarbageCollected<MockConsoleLogger>, public ConsoleLogger { USING_GARBAGE_COLLECTED_MIXIN(MockConsoleLogger);
diff --git a/third_party/blink/renderer/platform/loader/fetch/bytes_consumer.h b/third_party/blink/renderer/platform/loader/fetch/bytes_consumer.h index 61ac0cd..c557ed14 100644 --- a/third_party/blink/renderer/platform/loader/fetch/bytes_consumer.h +++ b/third_party/blink/renderer/platform/loader/fetch/bytes_consumer.h
@@ -23,8 +23,7 @@ // BytesConsumer has four states: waiting, readable, closed and errored. Once // the state becomes closed or errored, it will never change. |readable| means // that the BytesConsumer is ready to read non-empty bytes synchronously. -class PLATFORM_EXPORT BytesConsumer - : public GarbageCollectedFinalized<BytesConsumer> { +class PLATFORM_EXPORT BytesConsumer : public GarbageCollected<BytesConsumer> { public: enum class Result { kOk,
diff --git a/third_party/blink/renderer/platform/loader/fetch/cached_metadata_handler.h b/third_party/blink/renderer/platform/loader/fetch/cached_metadata_handler.h index 8320f8b..4338460 100644 --- a/third_party/blink/renderer/platform/loader/fetch/cached_metadata_handler.h +++ b/third_party/blink/renderer/platform/loader/fetch/cached_metadata_handler.h
@@ -44,8 +44,7 @@ const ResourceResponse&); // Handler class for caching operations. -class CachedMetadataHandler - : public GarbageCollectedFinalized<CachedMetadataHandler> { +class CachedMetadataHandler : public GarbageCollected<CachedMetadataHandler> { public: enum CacheType { kSendToPlatform, // send cache data to blink::Platform::cacheMetadata
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h b/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h index 6c77652..44d9491 100644 --- a/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h +++ b/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h
@@ -31,7 +31,7 @@ // used together with them. // https://html.spec.whatwg.org/C/#fetch-a-module-worker-script-tree class PLATFORM_EXPORT FetchClientSettingsObject - : public GarbageCollectedFinalized<FetchClientSettingsObject> { + : public GarbageCollected<FetchClientSettingsObject> { public: virtual ~FetchClientSettingsObject() = default;
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_context.h b/third_party/blink/renderer/platform/loader/fetch/fetch_context.h index ee03ed3..6187411 100644 --- a/third_party/blink/renderer/platform/loader/fetch/fetch_context.h +++ b/third_party/blink/renderer/platform/loader/fetch/fetch_context.h
@@ -64,8 +64,7 @@ // Any processing that depends on components outside platform/loader/fetch/ // should be implemented on a subclass of this interface, and then exposed to // the ResourceFetcher via this interface. -class PLATFORM_EXPORT FetchContext - : public GarbageCollectedFinalized<FetchContext> { +class PLATFORM_EXPORT FetchContext : public GarbageCollected<FetchContext> { public: FetchContext() = default;
diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h b/third_party/blink/renderer/platform/loader/fetch/memory_cache.h index c7560a9..b3000a9 100644 --- a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h +++ b/third_party/blink/renderer/platform/loader/fetch/memory_cache.h
@@ -62,10 +62,9 @@ // This cache holds subresources used by Web pages: images, scripts, // stylesheets, etc. -class PLATFORM_EXPORT MemoryCache final - : public GarbageCollectedFinalized<MemoryCache>, - public MemoryCacheDumpClient, - public MemoryPressureListener { +class PLATFORM_EXPORT MemoryCache final : public GarbageCollected<MemoryCache>, + public MemoryCacheDumpClient, + public MemoryPressureListener { USING_GARBAGE_COLLECTED_MIXIN(MemoryCache); public:
diff --git a/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc b/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc index 4c0cec9..9e9914f 100644 --- a/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc +++ b/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc
@@ -111,7 +111,7 @@ } class RawResource::PreloadBytesConsumerClient final - : public GarbageCollectedFinalized<PreloadBytesConsumerClient>, + : public GarbageCollected<PreloadBytesConsumerClient>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(PreloadBytesConsumerClient);
diff --git a/third_party/blink/renderer/platform/loader/fetch/raw_resource_test.cc b/third_party/blink/renderer/platform/loader/fetch/raw_resource_test.cc index 6c161c6..4a1276b 100644 --- a/third_party/blink/renderer/platform/loader/fetch/raw_resource_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/raw_resource_test.cc
@@ -59,7 +59,7 @@ protected: class NoopResponseBodyLoaderClient - : public GarbageCollectedFinalized<NoopResponseBodyLoaderClient>, + : public GarbageCollected<NoopResponseBodyLoaderClient>, public ResponseBodyLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(NoopResponseBodyLoaderClient); @@ -96,7 +96,7 @@ Resource::MatchStatus::kOk); } -class DummyClient final : public GarbageCollectedFinalized<DummyClient>, +class DummyClient final : public GarbageCollected<DummyClient>, public RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(DummyClient); @@ -135,7 +135,7 @@ }; // This client adds another client when notified. -class AddingClient final : public GarbageCollectedFinalized<AddingClient>, +class AddingClient final : public GarbageCollected<AddingClient>, public RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(AddingClient); @@ -192,7 +192,7 @@ } // This client removes another client when notified. -class RemovingClient : public GarbageCollectedFinalized<RemovingClient>, +class RemovingClient : public GarbageCollected<RemovingClient>, public RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(RemovingClient);
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.h b/third_party/blink/renderer/platform/loader/fetch/resource.h index 0eb58ab3..b8ae4568 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource.h
@@ -98,7 +98,7 @@ // should derive from ResourceClient, to get the function calls in case the // requested data has arrived. This class also does the actual communication // with the loader to obtain the resource from the network. -class PLATFORM_EXPORT Resource : public GarbageCollectedFinalized<Resource>, +class PLATFORM_EXPORT Resource : public GarbageCollected<Resource>, public MemoryPressureListener { USING_GARBAGE_COLLECTED_MIXIN(Resource);
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h index dfbd91bf..8c060d7 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h
@@ -77,12 +77,12 @@ // keep a ResourceFetcher alive past detach if scripts still reference the // Document. class PLATFORM_EXPORT ResourceFetcher - : public GarbageCollectedFinalized<ResourceFetcher> { + : public GarbageCollected<ResourceFetcher> { USING_PRE_FINALIZER(ResourceFetcher, ClearPreloads); public: // An abstract interface for creating loaders. - class LoaderFactory : public GarbageCollectedFinalized<LoaderFactory> { + class LoaderFactory : public GarbageCollected<LoaderFactory> { public: virtual ~LoaderFactory() = default;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h index dc5ab3d..297508b4 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h
@@ -33,7 +33,7 @@ // FetchClientSettingsObject when the property is clearly defined in the spec. // Otherwise, put it to this class. class PLATFORM_EXPORT ResourceFetcherProperties - : public GarbageCollectedFinalized<ResourceFetcherProperties> { + : public GarbageCollected<ResourceFetcherProperties> { public: using ControllerServiceWorkerMode = mojom::ControllerServiceWorkerMode;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc index b2c4abb..58f00ce 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc
@@ -353,7 +353,7 @@ } class RequestSameResourceOnComplete - : public GarbageCollectedFinalized<RequestSameResourceOnComplete>, + : public GarbageCollected<RequestSameResourceOnComplete>, public RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete); @@ -440,7 +440,7 @@ } class ServeRequestsOnCompleteClient final - : public GarbageCollectedFinalized<ServeRequestsOnCompleteClient>, + : public GarbageCollected<ServeRequestsOnCompleteClient>, public RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(ServeRequestsOnCompleteClient);
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_observer.h b/third_party/blink/renderer/platform/loader/fetch/resource_load_observer.h index e2999eaa..16104ff 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_load_observer.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_observer.h
@@ -38,7 +38,7 @@ // All functions except for the destructor and the trace method must be pure // virtual, and must not be called when the associated fetcher is detached. class PLATFORM_EXPORT ResourceLoadObserver - : public GarbageCollectedFinalized<ResourceLoadObserver> { + : public GarbageCollected<ResourceLoadObserver> { public: virtual ~ResourceLoadObserver() = default;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h index 20e7d3d8..b951ecf 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h
@@ -82,7 +82,7 @@ // minutes, all throttleable resource loading requests are throttled // indefinitely (i.e., threshold is zero in such a circumstance). class PLATFORM_EXPORT ResourceLoadScheduler final - : public GarbageCollectedFinalized<ResourceLoadScheduler>, + : public GarbageCollected<ResourceLoadScheduler>, public FrameScheduler::Observer { public: // An option to use in calling Request(). If kCanNotBeStoppedOrThrottled is
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc index 91cfcfa..baf1d5c 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc
@@ -18,7 +18,7 @@ namespace blink { namespace { -class MockClient final : public GarbageCollectedFinalized<MockClient>, +class MockClient final : public GarbageCollected<MockClient>, public ResourceLoadSchedulerClient { USING_GARBAGE_COLLECTED_MIXIN(MockClient); @@ -70,9 +70,8 @@ class ResourceLoadSchedulerTest : public testing::Test { public: - class MockConsoleLogger final - : public GarbageCollectedFinalized<MockConsoleLogger>, - public ConsoleLogger { + class MockConsoleLogger final : public GarbageCollected<MockConsoleLogger>, + public ConsoleLogger { USING_GARBAGE_COLLECTED_MIXIN(MockConsoleLogger); public:
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.h b/third_party/blink/renderer/platform/loader/fetch/resource_loader.h index dcbcd3ca3..2b4ef5c 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.h
@@ -62,7 +62,7 @@ // WebURLLoader and loads the resource using it. Any per-load logic should be // implemented in this class basically. class PLATFORM_EXPORT ResourceLoader final - : public GarbageCollectedFinalized<ResourceLoader>, + : public GarbageCollected<ResourceLoader>, public ResourceLoadSchedulerClient, protected WebURLLoaderClient, protected mojom::blink::ProgressClient,
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc index aeb5d25..391301b 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc
@@ -298,7 +298,7 @@ // Helper class which stores a BytesConsumer passed by RawResource and reads the // bytes when ReadThroughBytesConsumer is called. class TestRawResourceClient final - : public GarbageCollectedFinalized<TestRawResourceClient>, + : public GarbageCollected<TestRawResourceClient>, public RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(TestRawResourceClient);
diff --git a/third_party/blink/renderer/platform/loader/fetch/response_body_loader.h b/third_party/blink/renderer/platform/loader/fetch/response_body_loader.h index ce64c55..e6d51e0 100644 --- a/third_party/blink/renderer/platform/loader/fetch/response_body_loader.h +++ b/third_party/blink/renderer/platform/loader/fetch/response_body_loader.h
@@ -26,7 +26,7 @@ // See ResponseBodyLoader for details. This is a virtual interface to expose // only Drain functions. class PLATFORM_EXPORT ResponseBodyLoaderDrainableInterface - : public GarbageCollectedFinalized<ResponseBodyLoaderDrainableInterface> { + : public GarbageCollected<ResponseBodyLoaderDrainableInterface> { public: virtual ~ResponseBodyLoaderDrainableInterface() = default;
diff --git a/third_party/blink/renderer/platform/loader/fetch/response_body_loader_test.cc b/third_party/blink/renderer/platform/loader/fetch/response_body_loader_test.cc index e7cc1ea..15b6cb9 100644 --- a/third_party/blink/renderer/platform/loader/fetch/response_body_loader_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/response_body_loader_test.cc
@@ -24,7 +24,7 @@ using Command = ReplayingBytesConsumer::Command; using PublicState = BytesConsumer::PublicState; using Result = BytesConsumer::Result; - class TestClient final : public GarbageCollectedFinalized<TestClient>, + class TestClient final : public GarbageCollected<TestClient>, public ResponseBodyLoaderClient { USING_GARBAGE_COLLECTED_MIXIN(TestClient); @@ -87,7 +87,7 @@ bool cancelled_ = false; }; - class ReadingClient final : public GarbageCollectedFinalized<ReadingClient>, + class ReadingClient final : public GarbageCollected<ReadingClient>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(ReadingClient);
diff --git a/third_party/blink/renderer/platform/loader/fetch/stale_revalidation_resource_client.h b/third_party/blink/renderer/platform/loader/fetch/stale_revalidation_resource_client.h index 6a7b729f..6ef734e 100644 --- a/third_party/blink/renderer/platform/loader/fetch/stale_revalidation_resource_client.h +++ b/third_party/blink/renderer/platform/loader/fetch/stale_revalidation_resource_client.h
@@ -14,7 +14,7 @@ // to revalidate the resource. When the request has been completed the original // resource will be removed from the memory cache. class StaleRevalidationResourceClient - : public GarbageCollectedFinalized<StaleRevalidationResourceClient>, + : public GarbageCollected<StaleRevalidationResourceClient>, public RawResourceClient { USING_GARBAGE_COLLECTED_MIXIN(StaleRevalidationResourceClient);
diff --git a/third_party/blink/renderer/platform/loader/fetch/worker_resource_timing_notifier.h b/third_party/blink/renderer/platform/loader/fetch/worker_resource_timing_notifier.h index 8907914c3..c7fdb96 100644 --- a/third_party/blink/renderer/platform/loader/fetch/worker_resource_timing_notifier.h +++ b/third_party/blink/renderer/platform/loader/fetch/worker_resource_timing_notifier.h
@@ -16,7 +16,7 @@ // appropriate Performance Timeline. // https://w3c.github.io/performance-timeline/#performance-timeline class WorkerResourceTimingNotifier - : public GarbageCollectedFinalized<WorkerResourceTimingNotifier> { + : public GarbageCollected<WorkerResourceTimingNotifier> { public: WorkerResourceTimingNotifier() = default; virtual ~WorkerResourceTimingNotifier() = default;
diff --git a/third_party/blink/renderer/platform/loader/testing/bytes_consumer_test_reader.h b/third_party/blink/renderer/platform/loader/testing/bytes_consumer_test_reader.h index 6fb4430..6a321b7 100644 --- a/third_party/blink/renderer/platform/loader/testing/bytes_consumer_test_reader.h +++ b/third_party/blink/renderer/platform/loader/testing/bytes_consumer_test_reader.h
@@ -16,7 +16,7 @@ } // namespace scheduler class BytesConsumerTestReader final - : public GarbageCollectedFinalized<BytesConsumerTestReader>, + : public GarbageCollected<BytesConsumerTestReader>, public BytesConsumer::Client { USING_GARBAGE_COLLECTED_MIXIN(BytesConsumerTestReader);
diff --git a/third_party/blink/renderer/platform/loader/testing/mock_resource_client.h b/third_party/blink/renderer/platform/loader/testing/mock_resource_client.h index a9fe3428..2b2f071a 100644 --- a/third_party/blink/renderer/platform/loader/testing/mock_resource_client.h +++ b/third_party/blink/renderer/platform/loader/testing/mock_resource_client.h
@@ -36,7 +36,7 @@ namespace blink { -class MockResourceClient : public GarbageCollectedFinalized<MockResourceClient>, +class MockResourceClient : public GarbageCollected<MockResourceClient>, public ResourceClient { USING_GARBAGE_COLLECTED_MIXIN(MockResourceClient);
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_component.h b/third_party/blink/renderer/platform/mediastream/media_stream_component.h index ade35b4..b4643ea7 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_component.h +++ b/third_party/blink/renderer/platform/mediastream/media_stream_component.h
@@ -52,7 +52,7 @@ // TODO(hta): Consider merging the two classes. class PLATFORM_EXPORT MediaStreamComponent final - : public GarbageCollectedFinalized<MediaStreamComponent> { + : public GarbageCollected<MediaStreamComponent> { USING_PRE_FINALIZER(MediaStreamComponent, Dispose); private:
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_descriptor.h b/third_party/blink/renderer/platform/mediastream/media_stream_descriptor.h index 3622f7f6..ea3e04c 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_descriptor.h +++ b/third_party/blink/renderer/platform/mediastream/media_stream_descriptor.h
@@ -55,7 +55,7 @@ }; class PLATFORM_EXPORT MediaStreamDescriptor final - : public GarbageCollectedFinalized<MediaStreamDescriptor> { + : public GarbageCollected<MediaStreamDescriptor> { private: static int GenerateUniqueId();
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_source.h b/third_party/blink/renderer/platform/mediastream/media_stream_source.h index fecbcc2..e17e94c 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_source.h +++ b/third_party/blink/renderer/platform/mediastream/media_stream_source.h
@@ -50,7 +50,7 @@ namespace blink { class PLATFORM_EXPORT MediaStreamSource final - : public GarbageCollectedFinalized<MediaStreamSource> { + : public GarbageCollected<MediaStreamSource> { USING_PRE_FINALIZER(MediaStreamSource, Dispose); public:
diff --git a/third_party/blink/renderer/platform/mhtml/archive_resource.h b/third_party/blink/renderer/platform/mhtml/archive_resource.h index 1939670..10b339e 100644 --- a/third_party/blink/renderer/platform/mhtml/archive_resource.h +++ b/third_party/blink/renderer/platform/mhtml/archive_resource.h
@@ -38,7 +38,7 @@ namespace blink { class PLATFORM_EXPORT ArchiveResource final - : public GarbageCollectedFinalized<ArchiveResource> { + : public GarbageCollected<ArchiveResource> { public: ArchiveResource(scoped_refptr<SharedBuffer>, const KURL&,
diff --git a/third_party/blink/renderer/platform/mhtml/mhtml_parser.cc b/third_party/blink/renderer/platform/mhtml/mhtml_parser.cc index 25ce7e4c..f08d30d 100644 --- a/third_party/blink/renderer/platform/mhtml/mhtml_parser.cc +++ b/third_party/blink/renderer/platform/mhtml/mhtml_parser.cc
@@ -91,7 +91,7 @@ // This class is a limited MIME parser used to parse the MIME headers of MHTML // files. -class MIMEHeader final : public GarbageCollectedFinalized<MIMEHeader> { +class MIMEHeader final : public GarbageCollected<MIMEHeader> { public: MIMEHeader();
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_session_description_request.h b/third_party/blink/renderer/platform/peerconnection/rtc_session_description_request.h index 0b72584..f13f8e9 100644 --- a/third_party/blink/renderer/platform/peerconnection/rtc_session_description_request.h +++ b/third_party/blink/renderer/platform/peerconnection/rtc_session_description_request.h
@@ -42,7 +42,7 @@ class WebRTCSessionDescription; class RTCSessionDescriptionRequest - : public GarbageCollectedFinalized<RTCSessionDescriptionRequest> { + : public GarbageCollected<RTCSessionDescriptionRequest> { public: virtual ~RTCSessionDescriptionRequest() = default;
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_stats_request.h b/third_party/blink/renderer/platform/peerconnection/rtc_stats_request.h index 0651cb8..8510fb96 100644 --- a/third_party/blink/renderer/platform/peerconnection/rtc_stats_request.h +++ b/third_party/blink/renderer/platform/peerconnection/rtc_stats_request.h
@@ -40,7 +40,7 @@ class MediaStreamComponent; class RTCStatsResponseBase; -class RTCStatsRequest : public GarbageCollectedFinalized<RTCStatsRequest> { +class RTCStatsRequest : public GarbageCollected<RTCStatsRequest> { public: virtual ~RTCStatsRequest() = default;
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_void_request.h b/third_party/blink/renderer/platform/peerconnection/rtc_void_request.h index 590402c..173a1bdd 100644 --- a/third_party/blink/renderer/platform/peerconnection/rtc_void_request.h +++ b/third_party/blink/renderer/platform/peerconnection/rtc_void_request.h
@@ -37,7 +37,7 @@ namespace blink { -class RTCVoidRequest : public GarbageCollectedFinalized<RTCVoidRequest> { +class RTCVoidRequest : public GarbageCollected<RTCVoidRequest> { public: virtual ~RTCVoidRequest() = default;
diff --git a/third_party/blink/renderer/platform/prerender.h b/third_party/blink/renderer/platform/prerender.h index 753ee9a..06b32a45f 100644 --- a/third_party/blink/renderer/platform/prerender.h +++ b/third_party/blink/renderer/platform/prerender.h
@@ -47,8 +47,7 @@ class PrerenderClient; -class PLATFORM_EXPORT Prerender final - : public GarbageCollectedFinalized<Prerender> { +class PLATFORM_EXPORT Prerender final : public GarbageCollected<Prerender> { DISALLOW_COPY_AND_ASSIGN(Prerender); public:
diff --git a/third_party/blink/renderer/platform/timer_test.cc b/third_party/blink/renderer/platform/timer_test.cc index bb4adf31..32c6792 100644 --- a/third_party/blink/renderer/platform/timer_test.cc +++ b/third_party/blink/renderer/platform/timer_test.cc
@@ -87,8 +87,7 @@ base::test::TaskEnvironment task_environment_; }; -class OnHeapTimerOwner final - : public GarbageCollectedFinalized<OnHeapTimerOwner> { +class OnHeapTimerOwner final : public GarbageCollected<OnHeapTimerOwner> { public: class Record final : public RefCounted<Record> { public:
diff --git a/third_party/blink/renderer/platform/wtf/Allocator.md b/third_party/blink/renderer/platform/wtf/Allocator.md index b8c7ab1..2d7471c 100644 --- a/third_party/blink/renderer/platform/wtf/Allocator.md +++ b/third_party/blink/renderer/platform/wtf/Allocator.md
@@ -14,7 +14,7 @@ The lifetime of objects allocated by Oilpan is automatically managed. The following objects are allocated by Oilpan: -* Objects that inherit from GarbageCollected<T> or GarbageCollectedFinalized<T>. +* Objects that inherit from GarbageCollected<T>. * HeapVector<T>, HeapHashSet<T>, HeapHashMap<T, U> etc @@ -72,8 +72,7 @@ you should use when allocating a new object: * Use Oilpan if you want a GC to manage the lifetime of the object. -You need to make the object inherit from GarbageCollected<T> or -GarbageCollectedFinalized<T>. See +You need to make the object inherit from GarbageCollected<T>. See [BlinkGCAPIReference.md](../heap/BlinkGCAPIReference.md) to learn programming with Oilpan.
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests index 84c2aed5..9ceda36c 100644 --- a/third_party/blink/web_tests/NeverFixTests +++ b/third_party/blink/web_tests/NeverFixTests
@@ -983,63 +983,8 @@ external/wpt/css/css-transforms/external-styles/svg-external-styles-012.html [ WontFix ] external/wpt/css/css-transforms/external-styles/svg-external-styles-013.html [ WontFix ] external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-001.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-002.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-003.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-004.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-005.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-006.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-007.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-008.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-009.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-010.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-011.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-012.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-013.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-014.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-015.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-016.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-017.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-018.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-019.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-020.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-021.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-022.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-023.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-024.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-025.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-026.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-027.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-028.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-029.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-030.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-031.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-032.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-033.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-034.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-035.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-036.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-037.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-038.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-039.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-040.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-041.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-042.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-043.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-044.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-045.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-046.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-047.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-048.html [ WontFix ] external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-001.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-002.html [ WontFix ] external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-003.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-001.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-002.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-003.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-004.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-005.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-006.html [ WontFix ] -external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-003.html [ WontFix ] external/wpt/css/css-transforms/group/svg-transform-group-002.html [ WontFix ] external/wpt/css/css-transforms/group/svg-transform-group-003.html [ WontFix ] external/wpt/css/css-transforms/group/svg-transform-group-005.html [ WontFix ] @@ -1074,138 +1019,13 @@ external/wpt/css/css-transforms/inline-styles/svg-inline-styles-012.html [ WontFix ] external/wpt/css/css-transforms/inline-styles/svg-inline-styles-013.html [ WontFix ] external/wpt/css/css-transforms/patternTransform/svg-patternTransform-001.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-002.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-003.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-004.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-005.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-006.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-007.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-008.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-009.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-010.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-011.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-012.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-013.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-014.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-015.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-016.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-017.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-018.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-019.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-020.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-021.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-022.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-023.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-024.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-025.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-026.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-027.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-028.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-029.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-030.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-031.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-032.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-033.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-034.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-035.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-036.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-037.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-038.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-039.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-040.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-041.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-042.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-043.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-044.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-045.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-046.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-047.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-048.html [ WontFix ] external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-001.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-002.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-003.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-001.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-002.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-003.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-004.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-005.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-006.html [ WontFix ] -external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-003.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-001.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-003.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-004.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-005.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-006.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-007.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-008.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-009.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-010.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-011.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-012.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-013.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-014.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-015.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-016.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-017.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-018.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-019.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-020.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-021.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-022.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-3args-023.html [ WontFix ] external/wpt/css/css-transforms/rotate/svg-rotate-3args-invalid-001.html [ WontFix ] external/wpt/css/css-transforms/rotate/svg-rotate-3args-invalid-003.html [ WontFix ] external/wpt/css/css-transforms/rotate/svg-rotate-3args-invalid-004.html [ WontFix ] external/wpt/css/css-transforms/rotate/svg-rotate-3args-invalid-005.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-002.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-003.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-004.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-005.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-007.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-008.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-009.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-010.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-012.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-013.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-014.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-015.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-017.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-018.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-019.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-020.html [ WontFix ] external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-022.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-023.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-024.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-025.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-002.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-003.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-004.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-005.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-007.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-008.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-009.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-010.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-012.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-013.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-014.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-015.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-017.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-018.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-019.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-020.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-022.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-023.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-024.html [ WontFix ] -external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-025.html [ WontFix ] external/wpt/css/css-transforms/rotate_45deg.html [ WontFix ] -external/wpt/css/css-transforms/scale/svg-scalex-001.html [ WontFix ] -external/wpt/css/css-transforms/scale/svg-scalex-002.html [ WontFix ] -external/wpt/css/css-transforms/scale/svg-scalex-004.html [ WontFix ] -external/wpt/css/css-transforms/scale/svg-scalex-005.html [ WontFix ] -external/wpt/css/css-transforms/scale/svg-scaley-001.html [ WontFix ] -external/wpt/css/css-transforms/scale/svg-scaley-002.html [ WontFix ] -external/wpt/css/css-transforms/scale/svg-scaley-004.html [ WontFix ] -external/wpt/css/css-transforms/scale/svg-scaley-005.html [ WontFix ] external/wpt/css/css-transforms/scaley.html [ WontFix ] external/wpt/css/css-transforms/skew-test1.html [ WontFix ] external/wpt/css/css-transforms/skewX/svg-skewx-002.html [ WontFix ] @@ -1452,126 +1272,6 @@ external/wpt/css/css-transforms/translate/svg-translate-relative-006.html [ WontFix ] external/wpt/css/css-transforms/translate/svg-translate-relative-007.html [ WontFix ] external/wpt/css/css-transforms/translate/svg-translate-relative-008.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-001.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-002.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-003.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-004.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-005.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-006.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-007.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-008.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-009.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-010.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-011.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-012.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-013.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-014.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-015.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-016.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-017.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-018.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-019.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-020.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-021.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-022.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-023.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-024.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-025.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-026.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-027.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-028.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-029.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-030.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-031.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-032.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-033.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-034.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-035.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-036.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-037.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-038.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-039.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-040.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-041.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-042.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-043.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-044.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-045.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-046.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-047.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-048.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-combination-001.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-combination-002.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-combination-003.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-combination-004.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-001.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-002.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-003.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-004.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-005.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-006.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-relative-001.html [ WontFix ] -external/wpt/css/css-transforms/translateX/svg-translatex-relative-002.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-001.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-002.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-003.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-004.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-005.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-006.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-007.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-008.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-009.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-010.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-011.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-012.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-013.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-014.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-015.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-016.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-017.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-018.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-019.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-020.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-021.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-022.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-023.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-024.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-025.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-026.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-027.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-028.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-029.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-030.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-031.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-032.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-033.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-034.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-035.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-036.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-037.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-038.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-039.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-040.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-041.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-042.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-043.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-044.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-045.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-046.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-047.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-048.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-combination-001.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-combination-002.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-combination-003.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-combination-004.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-001.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-002.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-003.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-004.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-005.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-006.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-relative-001.html [ WontFix ] -external/wpt/css/css-transforms/translateY/svg-translatey-relative-002.html [ WontFix ] external/wpt/css/css-transforms/ttwf-transform-skewx-001.html [ WontFix ] external/wpt/css/css-transforms/ttwf-transform-skewy-001.html [ WontFix ] external/wpt/css/css-transforms/ttwf-transform-translatex-001.html [ WontFix ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 2f4847b..e8e27d0 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -3221,6 +3221,138 @@ crbug.com/1002514 external/wpt/web-share/share-sharePromise-internal-slot.https.html [ Failure Crash ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-normal-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-normal-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-normal-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-contain-003.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-contain-003.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-contain-003.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-007.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-007.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-007.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-005.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-005.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-005.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/line-names-004.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/line-names-004.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/line-names-004.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-005.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-005.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-005.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-contain-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-contain-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-contain-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-004.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-004.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-004.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-006.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-006.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-006.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-writing-modes/direction-upright-002.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-writing-modes/direction-upright-002.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-writing-modes/direction-upright-002.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/line-names-006.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/line-names-006.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/line-names-006.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-004.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-004.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-004.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-larger-002.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-larger-002.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-larger-002.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-003.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-003.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-003.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/abs-pos-002.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/abs-pos-002.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/abs-pos-002.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-contain-004.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-contain-004.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-contain-004.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/line-names-005.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/line-names-005.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/line-names-005.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-larger-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-larger-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-larger-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-003.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-003.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-003.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-smaller-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-smaller-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-smaller-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-writing-modes/direction-upright-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-writing-modes/direction-upright-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-writing-modes/direction-upright-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-006.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-006.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-006.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-007.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-007.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-007.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-008.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-008.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-008.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-002.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-002.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-002.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-contain-002.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-contain-002.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-contain-002.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-009.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-009.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-009.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-009.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-009.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-009.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/line-names-008.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/line-names-008.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/line-names-008.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-002.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-002.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-002.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/baseline-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/baseline-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/baseline-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/grid-gap-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/grid-gap-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/grid-gap-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-path-ray-contain-005.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-path-ray-contain-005.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/motion/offset-path-ray-contain-005.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/item-percentage-height-001.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/item-percentage-height-001.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/item-percentage-height-001.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-grid/subgrid/line-names-007.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-grid/subgrid/line-names-007.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-grid/subgrid/line-names-007.html [ Failure ] crbug.com/626703 [ Win7 ] virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] crbug.com/626703 [ Mac10.10 ] virtual/omt-worker-fetch/external/wpt/resource-timing/resource_timing_buffer_full_eventually.html [ Timeout ] crbug.com/626703 [ Retina ] virtual/omt-worker-fetch/external/wpt/resource-timing/resource_timing_buffer_full_eventually.html [ Timeout ] @@ -3850,8 +3982,8 @@ crbug.com/626703 [ Win10 ] external/wpt/fetch/api/redirect/redirect-count.any.html [ Timeout ] crbug.com/626703 external/wpt/css/cssom-view/scroll-behavior-smooth.html [ Timeout Crash ] -crbug.com/626703 external/wpt/websockets/Create-Secure-extensions-empty.any.html [ Timeout ] -crbug.com/626703 external/wpt/websockets/Create-Secure-extensions-empty.any.worker.html [ Timeout ] +crbug.com/626703 [ IOS ] external/wpt/websockets/Create-Secure-extensions-empty.any.html [ Timeout ] +crbug.com/626703 [ IOS ] external/wpt/websockets/Create-Secure-extensions-empty.any.worker.html [ Timeout ] crbug.com/626703 virtual/streaming-preload/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.sub.html [ Skip ] crbug.com/626703 virtual/streaming-preload/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.sub.html [ Skip ] crbug.com/626703 external/wpt/html/browsers/history/joint-session-history/joint-session-history-remove-iframe.html [ Timeout ]
diff --git a/third_party/blink/web_tests/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png b/third_party/blink/web_tests/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png index 5e261ae..ab83797 100644 --- a/third_party/blink/web_tests/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png +++ b/third_party/blink/web_tests/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png Binary files differ
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 5e343a43..64c5d32e 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
@@ -6199,6 +6199,12 @@ {} ] ], + "payment-handler/supports-shipping-contact-delegation-manual.https.html": [ + [ + "payment-handler/supports-shipping-contact-delegation-manual.https.html", + {} + ] + ], "payment-method-basic-card/empty-data-manual.https.html": [ [ "payment-method-basic-card/empty-data-manual.https.html", @@ -15115,6 +15121,18 @@ {} ] ], + "css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html": [ + [ + "css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/CSS2/normal-flow/dynamic-percentage-height.html": [ [ "css/CSS2/normal-flow/dynamic-percentage-height.html", @@ -46315,6 +46333,18 @@ {} ] ], + "css/css-flexbox/percentage-heights-007.html": [ + [ + "css/css-flexbox/percentage-heights-007.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/percentage-size-subitems-001.html": [ [ "css/css-flexbox/percentage-size-subitems-001.html", @@ -48329,6 +48359,18 @@ {} ] ], + "css/css-fonts/variations/variable-opsz.html": [ + [ + "css/css-fonts/variations/variable-opsz.html", + [ + [ + "/css/css-fonts/variations/variable-opsz-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/abspos/absolute-positioning-changing-containing-block-001.html": [ [ "css/css-grid/abspos/absolute-positioning-changing-containing-block-001.html", @@ -49649,6 +49691,54 @@ {} ] ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html": [ + [ + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html", + [ + [ + "/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html": [ + [ + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html", + [ + [ + "/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html": [ + [ + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html", + [ + [ + "/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html": [ + [ + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html", + [ + [ + "/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/alignment/grid-self-alignment-stretch-input-range.html": [ [ "css/css-grid/alignment/grid-self-alignment-stretch-input-range.html", @@ -51617,6 +51707,30 @@ {} ] ], + "css/css-grid/subgrid/abs-pos-001.html": [ + [ + "css/css-grid/subgrid/abs-pos-001.html", + [ + [ + "/css/css-grid/subgrid/abs-pos-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/abs-pos-002.html": [ + [ + "css/css-grid/subgrid/abs-pos-002.html", + [ + [ + "/css/css-grid/subgrid/abs-pos-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/subgrid/auto-track-sizing-001.html": [ [ "css/css-grid/subgrid/auto-track-sizing-001.html", @@ -51629,6 +51743,342 @@ {} ] ], + "css/css-grid/subgrid/baseline-001.html": [ + [ + "css/css-grid/subgrid/baseline-001.html", + [ + [ + "/css/css-grid/subgrid/baseline-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-001.html": [ + [ + "css/css-grid/subgrid/grid-gap-001.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-002.html": [ + [ + "css/css-grid/subgrid/grid-gap-002.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-003.html": [ + [ + "css/css-grid/subgrid/grid-gap-003.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-004.html": [ + [ + "css/css-grid/subgrid/grid-gap-004.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-005.html": [ + [ + "css/css-grid/subgrid/grid-gap-005.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-006.html": [ + [ + "css/css-grid/subgrid/grid-gap-006.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-007.html": [ + [ + "css/css-grid/subgrid/grid-gap-007.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-008.html": [ + [ + "css/css-grid/subgrid/grid-gap-008.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-009.html": [ + [ + "css/css-grid/subgrid/grid-gap-009.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-larger-001.html": [ + [ + "css/css-grid/subgrid/grid-gap-larger-001.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-larger-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-larger-002.html": [ + [ + "css/css-grid/subgrid/grid-gap-larger-002.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-larger-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-normal-001.html": [ + [ + "css/css-grid/subgrid/grid-gap-normal-001.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-normal-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/grid-gap-smaller-001.html": [ + [ + "css/css-grid/subgrid/grid-gap-smaller-001.html", + [ + [ + "/css/css-grid/subgrid/grid-gap-smaller-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/item-percentage-height-001.html": [ + [ + "css/css-grid/subgrid/item-percentage-height-001.html", + [ + [ + "/css/css-grid/subgrid/item-percentage-height-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/line-names-001.html": [ + [ + "css/css-grid/subgrid/line-names-001.html", + [ + [ + "/css/css-grid/subgrid/line-names-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/line-names-002.html": [ + [ + "css/css-grid/subgrid/line-names-002.html", + [ + [ + "/css/css-grid/subgrid/line-names-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/line-names-003.html": [ + [ + "css/css-grid/subgrid/line-names-003.html", + [ + [ + "/css/css-grid/subgrid/line-names-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/line-names-004.html": [ + [ + "css/css-grid/subgrid/line-names-004.html", + [ + [ + "/css/css-grid/subgrid/line-names-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/line-names-005.html": [ + [ + "css/css-grid/subgrid/line-names-005.html", + [ + [ + "/css/css-grid/subgrid/line-names-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/line-names-006.html": [ + [ + "css/css-grid/subgrid/line-names-006.html", + [ + [ + "/css/css-grid/subgrid/line-names-006-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/line-names-007.html": [ + [ + "css/css-grid/subgrid/line-names-007.html", + [ + [ + "/css/css-grid/subgrid/line-names-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/line-names-008.html": [ + [ + "css/css-grid/subgrid/line-names-008.html", + [ + [ + "/css/css-grid/subgrid/line-names-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/orthogonal-writing-mode-001.html": [ + [ + "css/css-grid/subgrid/orthogonal-writing-mode-001.html", + [ + [ + "/css/css-grid/subgrid/orthogonal-writing-mode-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/orthogonal-writing-mode-002.html": [ + [ + "css/css-grid/subgrid/orthogonal-writing-mode-002.html", + [ + [ + "/css/css-grid/subgrid/orthogonal-writing-mode-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/orthogonal-writing-mode-003.html": [ + [ + "css/css-grid/subgrid/orthogonal-writing-mode-003.html", + [ + [ + "/css/css-grid/subgrid/orthogonal-writing-mode-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/orthogonal-writing-mode-004.html": [ + [ + "css/css-grid/subgrid/orthogonal-writing-mode-004.html", + [ + [ + "/css/css-grid/subgrid/orthogonal-writing-mode-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/subgrid-item-block-size-001.html": [ + [ + "css/css-grid/subgrid/subgrid-item-block-size-001.html", + [ + [ + "/css/css-grid/subgrid/subgrid-item-block-size-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-images/css-image-fallbacks-and-annotations.html": [ [ "css/css-images/css-image-fallbacks-and-annotations.html", @@ -65093,6 +65543,30 @@ {} ] ], + "css/css-tables/row-group-margin-border-padding.html": [ + [ + "css/css-tables/row-group-margin-border-padding.html", + [ + [ + "/css/css-tables/row-group-margin-border-padding-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-tables/row-margin-border-padding.html": [ + [ + "css/css-tables/row-margin-border-padding.html", + [ + [ + "/css/css-tables/row-margin-border-padding-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-tables/subpixel-collapsed-borders-001.html": [ [ "css/css-tables/subpixel-collapsed-borders-001.html", @@ -73790,7 +74264,7 @@ "css/css-text/white-space/trailing-ideographic-space-002.html", [ [ - "/css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html", + "/css/css-text/white-space/reference/trailing-ideographic-space-002-ref.html", "==" ] ], @@ -75701,582 +76175,6 @@ {} ] ], - "css/css-transforms/gradientTransform/svg-gradientTransform-002.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-002.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-003.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-003.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-004.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-004.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-005.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-005.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-006.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-006.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-007.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-007.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-008.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-008.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-009.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-009.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-010.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-010.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-011.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-011.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-012.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-012.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-013.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-013.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-014.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-014.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-015.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-015.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-016.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-016.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-017.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-017.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-018.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-018.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-019.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-019.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-020.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-020.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-021.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-021.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-022.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-022.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-023.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-023.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-024.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-024.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-025.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-025.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-026.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-026.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-027.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-027.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-028.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-028.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-029.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-029.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-030.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-030.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-031.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-031.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-032.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-032.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-033.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-033.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-034.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-034.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-035.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-035.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-036.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-036.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-037.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-037.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-038.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-038.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-039.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-039.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-040.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-040.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-041.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-041.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-042.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-042.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-043.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-043.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-044.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-044.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-045.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-045.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-046.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-046.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-047.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-047.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-048.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-048.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-049.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-049.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-transform-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/gradientTransform/svg-gradientTransform-combination-001.html": [ [ "css/css-transforms/gradientTransform/svg-gradientTransform-combination-001.html", @@ -76289,18 +76187,6 @@ {} ] ], - "css/css-transforms/gradientTransform/svg-gradientTransform-combination-002.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-combination-002.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-combination-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/gradientTransform/svg-gradientTransform-combination-003.html": [ [ "css/css-transforms/gradientTransform/svg-gradientTransform-combination-003.html", @@ -76313,114 +76199,6 @@ {} ] ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-001.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-001.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-002.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-002.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-003.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-003.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-004.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-004.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-005.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-005.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-006.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-006.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-001.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-001.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-relative-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-002.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-002.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-relative-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-003.html": [ - [ - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-003.html", - [ - [ - "/css/css-transforms/gradientTransform/reference/svg-gradientTransform-relative-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/group/svg-transform-group-001.html": [ [ "css/css-transforms/group/svg-transform-group-001.html", @@ -78017,582 +77795,6 @@ {} ] ], - "css/css-transforms/patternTransform/svg-patternTransform-002.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-002.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-003.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-003.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-004.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-004.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-005.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-005.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-006.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-006.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-007.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-007.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-008.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-008.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-009.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-009.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-010.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-010.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-011.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-011.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-012.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-012.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-013.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-013.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-014.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-014.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-015.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-015.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-016.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-016.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-017.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-017.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-018.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-018.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-019.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-019.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-020.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-020.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-021.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-021.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-022.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-022.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-023.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-023.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-024.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-024.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-025.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-025.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-026.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-026.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-027.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-027.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-028.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-028.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-029.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-029.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-030.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-030.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-031.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-031.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-032.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-032.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-033.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-033.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-034.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-034.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-035.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-035.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-036.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-036.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-037.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-037.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-038.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-038.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-039.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-039.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-040.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-040.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-041.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-041.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-042.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-042.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-043.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-043.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-044.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-044.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-045.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-045.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-046.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-046.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-047.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-047.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-048.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-048.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-049.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-049.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/patternTransform/svg-patternTransform-combination-001.html": [ [ "css/css-transforms/patternTransform/svg-patternTransform-combination-001.html", @@ -78605,138 +77807,6 @@ {} ] ], - "css/css-transforms/patternTransform/svg-patternTransform-combination-002.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-combination-002.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-combination-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-combination-003.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-combination-003.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-combination-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-001.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-001.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-002.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-002.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-003.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-003.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-004.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-004.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-005.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-005.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-006.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-006.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-relative-001.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-relative-001.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-relative-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-relative-002.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-relative-002.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-relative-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/patternTransform/svg-patternTransform-relative-003.html": [ - [ - "css/css-transforms/patternTransform/svg-patternTransform-relative-003.html", - [ - [ - "/css/css-transforms/patternTransform/reference/svg-patternTransform-relative-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/perspective-origin-001.html": [ [ "css/css-transforms/perspective-origin-001.html", @@ -78921,18 +77991,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-3args-001.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-001.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-3args-002.html": [ [ "css/css-transforms/rotate/svg-rotate-3args-002.html", @@ -78945,258 +78003,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-3args-003.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-003.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-004.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-004.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-005.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-005.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-006.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-006.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-007.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-007.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-008.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-008.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-009.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-009.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-010.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-010.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-011.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-011.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-012.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-012.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-013.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-013.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-014.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-014.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-015.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-015.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-016.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-016.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-017.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-017.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-018.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-018.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-019.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-019.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-020.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-020.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-021.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-021.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-022.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-022.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-3args-023.html": [ - [ - "css/css-transforms/rotate/svg-rotate-3args-023.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-3args-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-3args-invalid-001.html": [ [ "css/css-transforms/rotate/svg-rotate-3args-invalid-001.html", @@ -79269,114 +78075,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-angle-45-002.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-002.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-003.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-003.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-004.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-004.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-005.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-005.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-006.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-006.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-007.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-007.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-008.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-008.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-009.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-009.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-010.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-010.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-angle-45-011.html": [ [ "css/css-transforms/rotate/svg-rotate-angle-45-011.html", @@ -79389,126 +78087,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-angle-45-012.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-012.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-013.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-013.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-014.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-014.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-015.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-015.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-016.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-016.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-017.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-017.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-018.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-018.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-019.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-019.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-020.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-020.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-021.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-021.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-angle-45-022.html": [ [ "css/css-transforms/rotate/svg-rotate-angle-45-022.html", @@ -79521,42 +78099,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-angle-45-023.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-023.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-024.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-024.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-45-025.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-45-025.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-45-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-angle-90-001.html": [ [ "css/css-transforms/rotate/svg-rotate-angle-90-001.html", @@ -79569,54 +78111,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-angle-90-002.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-002.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-003.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-003.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-004.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-004.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-005.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-005.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-angle-90-006.html": [ [ "css/css-transforms/rotate/svg-rotate-angle-90-006.html", @@ -79629,54 +78123,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-angle-90-007.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-007.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-008.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-008.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-009.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-009.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-010.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-010.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-angle-90-011.html": [ [ "css/css-transforms/rotate/svg-rotate-angle-90-011.html", @@ -79689,54 +78135,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-angle-90-012.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-012.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-013.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-013.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-014.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-014.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-015.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-015.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-angle-90-016.html": [ [ "css/css-transforms/rotate/svg-rotate-angle-90-016.html", @@ -79749,54 +78147,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-angle-90-017.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-017.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-018.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-018.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-019.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-019.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-020.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-020.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotate/svg-rotate-angle-90-021.html": [ [ "css/css-transforms/rotate/svg-rotate-angle-90-021.html", @@ -79809,54 +78159,6 @@ {} ] ], - "css/css-transforms/rotate/svg-rotate-angle-90-022.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-022.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-023.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-023.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-024.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-024.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/rotate/svg-rotate-angle-90-025.html": [ - [ - "css/css-transforms/rotate/svg-rotate-angle-90-025.html", - [ - [ - "/css/css-transforms/rotate/reference/svg-rotate-angle-90-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/rotateY-180deg-with-overflow-scroll.html": [ [ "css/css-transforms/rotateY-180deg-with-overflow-scroll.html", @@ -79989,18 +78291,6 @@ {} ] ], - "css/css-transforms/scale/svg-scale-005.html": [ - [ - "css/css-transforms/scale/svg-scale-005.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/scale/svg-scale-006.html": [ [ "css/css-transforms/scale/svg-scale-006.html", @@ -80145,126 +78435,6 @@ {} ] ], - "css/css-transforms/scale/svg-scalex-001.html": [ - [ - "css/css-transforms/scale/svg-scalex-001.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scalex-002.html": [ - [ - "css/css-transforms/scale/svg-scalex-002.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scalex-003.html": [ - [ - "css/css-transforms/scale/svg-scalex-003.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scalex-004.html": [ - [ - "css/css-transforms/scale/svg-scalex-004.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scalex-005.html": [ - [ - "css/css-transforms/scale/svg-scalex-005.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scaley-001.html": [ - [ - "css/css-transforms/scale/svg-scaley-001.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scaley-002.html": [ - [ - "css/css-transforms/scale/svg-scaley-002.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scaley-003.html": [ - [ - "css/css-transforms/scale/svg-scaley-003.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scaley-004.html": [ - [ - "css/css-transforms/scale/svg-scaley-004.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/scale/svg-scaley-005.html": [ - [ - "css/css-transforms/scale/svg-scaley-005.html", - [ - [ - "/css/css-transforms/scale/reference/svg-scale-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/scalex.html": [ [ "css/css-transforms/scalex.html", @@ -86245,1446 +84415,6 @@ {} ] ], - "css/css-transforms/translateX/svg-translatex-001.html": [ - [ - "css/css-transforms/translateX/svg-translatex-001.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-002.html": [ - [ - "css/css-transforms/translateX/svg-translatex-002.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-003.html": [ - [ - "css/css-transforms/translateX/svg-translatex-003.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-004.html": [ - [ - "css/css-transforms/translateX/svg-translatex-004.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-005.html": [ - [ - "css/css-transforms/translateX/svg-translatex-005.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-006.html": [ - [ - "css/css-transforms/translateX/svg-translatex-006.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-007.html": [ - [ - "css/css-transforms/translateX/svg-translatex-007.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-008.html": [ - [ - "css/css-transforms/translateX/svg-translatex-008.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-009.html": [ - [ - "css/css-transforms/translateX/svg-translatex-009.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-010.html": [ - [ - "css/css-transforms/translateX/svg-translatex-010.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-011.html": [ - [ - "css/css-transforms/translateX/svg-translatex-011.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-012.html": [ - [ - "css/css-transforms/translateX/svg-translatex-012.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-013.html": [ - [ - "css/css-transforms/translateX/svg-translatex-013.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-014.html": [ - [ - "css/css-transforms/translateX/svg-translatex-014.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-015.html": [ - [ - "css/css-transforms/translateX/svg-translatex-015.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-016.html": [ - [ - "css/css-transforms/translateX/svg-translatex-016.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-017.html": [ - [ - "css/css-transforms/translateX/svg-translatex-017.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-018.html": [ - [ - "css/css-transforms/translateX/svg-translatex-018.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-019.html": [ - [ - "css/css-transforms/translateX/svg-translatex-019.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-020.html": [ - [ - "css/css-transforms/translateX/svg-translatex-020.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-021.html": [ - [ - "css/css-transforms/translateX/svg-translatex-021.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-022.html": [ - [ - "css/css-transforms/translateX/svg-translatex-022.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-023.html": [ - [ - "css/css-transforms/translateX/svg-translatex-023.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-024.html": [ - [ - "css/css-transforms/translateX/svg-translatex-024.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-025.html": [ - [ - "css/css-transforms/translateX/svg-translatex-025.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-026.html": [ - [ - "css/css-transforms/translateX/svg-translatex-026.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-027.html": [ - [ - "css/css-transforms/translateX/svg-translatex-027.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-028.html": [ - [ - "css/css-transforms/translateX/svg-translatex-028.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-029.html": [ - [ - "css/css-transforms/translateX/svg-translatex-029.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-030.html": [ - [ - "css/css-transforms/translateX/svg-translatex-030.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-031.html": [ - [ - "css/css-transforms/translateX/svg-translatex-031.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-032.html": [ - [ - "css/css-transforms/translateX/svg-translatex-032.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-033.html": [ - [ - "css/css-transforms/translateX/svg-translatex-033.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-034.html": [ - [ - "css/css-transforms/translateX/svg-translatex-034.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-035.html": [ - [ - "css/css-transforms/translateX/svg-translatex-035.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-036.html": [ - [ - "css/css-transforms/translateX/svg-translatex-036.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-037.html": [ - [ - "css/css-transforms/translateX/svg-translatex-037.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-038.html": [ - [ - "css/css-transforms/translateX/svg-translatex-038.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-039.html": [ - [ - "css/css-transforms/translateX/svg-translatex-039.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-040.html": [ - [ - "css/css-transforms/translateX/svg-translatex-040.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-041.html": [ - [ - "css/css-transforms/translateX/svg-translatex-041.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-042.html": [ - [ - "css/css-transforms/translateX/svg-translatex-042.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-043.html": [ - [ - "css/css-transforms/translateX/svg-translatex-043.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-044.html": [ - [ - "css/css-transforms/translateX/svg-translatex-044.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-045.html": [ - [ - "css/css-transforms/translateX/svg-translatex-045.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-046.html": [ - [ - "css/css-transforms/translateX/svg-translatex-046.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-047.html": [ - [ - "css/css-transforms/translateX/svg-translatex-047.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-048.html": [ - [ - "css/css-transforms/translateX/svg-translatex-048.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-combination-001.html": [ - [ - "css/css-transforms/translateX/svg-translatex-combination-001.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-combination-002.html": [ - [ - "css/css-transforms/translateX/svg-translatex-combination-002.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-combination-003.html": [ - [ - "css/css-transforms/translateX/svg-translatex-combination-003.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-combination-004.html": [ - [ - "css/css-transforms/translateX/svg-translatex-combination-004.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-001.html": [ - [ - "css/css-transforms/translateX/svg-translatex-ex-unit-001.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-002.html": [ - [ - "css/css-transforms/translateX/svg-translatex-ex-unit-002.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-003.html": [ - [ - "css/css-transforms/translateX/svg-translatex-ex-unit-003.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-004.html": [ - [ - "css/css-transforms/translateX/svg-translatex-ex-unit-004.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-005.html": [ - [ - "css/css-transforms/translateX/svg-translatex-ex-unit-005.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-006.html": [ - [ - "css/css-transforms/translateX/svg-translatex-ex-unit-006.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-relative-001.html": [ - [ - "css/css-transforms/translateX/svg-translatex-relative-001.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateX/svg-translatex-relative-002.html": [ - [ - "css/css-transforms/translateX/svg-translatex-relative-002.html", - [ - [ - "/css/css-transforms/translateX/reference/svg-translatex-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-001.html": [ - [ - "css/css-transforms/translateY/svg-translatey-001.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-002.html": [ - [ - "css/css-transforms/translateY/svg-translatey-002.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-003.html": [ - [ - "css/css-transforms/translateY/svg-translatey-003.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-004.html": [ - [ - "css/css-transforms/translateY/svg-translatey-004.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-005.html": [ - [ - "css/css-transforms/translateY/svg-translatey-005.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-006.html": [ - [ - "css/css-transforms/translateY/svg-translatey-006.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-007.html": [ - [ - "css/css-transforms/translateY/svg-translatey-007.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-008.html": [ - [ - "css/css-transforms/translateY/svg-translatey-008.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-009.html": [ - [ - "css/css-transforms/translateY/svg-translatey-009.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-010.html": [ - [ - "css/css-transforms/translateY/svg-translatey-010.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-011.html": [ - [ - "css/css-transforms/translateY/svg-translatey-011.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-012.html": [ - [ - "css/css-transforms/translateY/svg-translatey-012.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-013.html": [ - [ - "css/css-transforms/translateY/svg-translatey-013.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-014.html": [ - [ - "css/css-transforms/translateY/svg-translatey-014.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-015.html": [ - [ - "css/css-transforms/translateY/svg-translatey-015.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-016.html": [ - [ - "css/css-transforms/translateY/svg-translatey-016.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-017.html": [ - [ - "css/css-transforms/translateY/svg-translatey-017.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-018.html": [ - [ - "css/css-transforms/translateY/svg-translatey-018.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-019.html": [ - [ - "css/css-transforms/translateY/svg-translatey-019.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-020.html": [ - [ - "css/css-transforms/translateY/svg-translatey-020.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-021.html": [ - [ - "css/css-transforms/translateY/svg-translatey-021.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-022.html": [ - [ - "css/css-transforms/translateY/svg-translatey-022.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-023.html": [ - [ - "css/css-transforms/translateY/svg-translatey-023.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-024.html": [ - [ - "css/css-transforms/translateY/svg-translatey-024.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-025.html": [ - [ - "css/css-transforms/translateY/svg-translatey-025.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-026.html": [ - [ - "css/css-transforms/translateY/svg-translatey-026.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-027.html": [ - [ - "css/css-transforms/translateY/svg-translatey-027.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-028.html": [ - [ - "css/css-transforms/translateY/svg-translatey-028.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-029.html": [ - [ - "css/css-transforms/translateY/svg-translatey-029.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-030.html": [ - [ - "css/css-transforms/translateY/svg-translatey-030.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-031.html": [ - [ - "css/css-transforms/translateY/svg-translatey-031.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-032.html": [ - [ - "css/css-transforms/translateY/svg-translatey-032.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-033.html": [ - [ - "css/css-transforms/translateY/svg-translatey-033.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-034.html": [ - [ - "css/css-transforms/translateY/svg-translatey-034.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-035.html": [ - [ - "css/css-transforms/translateY/svg-translatey-035.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-036.html": [ - [ - "css/css-transforms/translateY/svg-translatey-036.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-037.html": [ - [ - "css/css-transforms/translateY/svg-translatey-037.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-038.html": [ - [ - "css/css-transforms/translateY/svg-translatey-038.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-039.html": [ - [ - "css/css-transforms/translateY/svg-translatey-039.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-040.html": [ - [ - "css/css-transforms/translateY/svg-translatey-040.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-041.html": [ - [ - "css/css-transforms/translateY/svg-translatey-041.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-042.html": [ - [ - "css/css-transforms/translateY/svg-translatey-042.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-043.html": [ - [ - "css/css-transforms/translateY/svg-translatey-043.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-044.html": [ - [ - "css/css-transforms/translateY/svg-translatey-044.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-045.html": [ - [ - "css/css-transforms/translateY/svg-translatey-045.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-046.html": [ - [ - "css/css-transforms/translateY/svg-translatey-046.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-047.html": [ - [ - "css/css-transforms/translateY/svg-translatey-047.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-048.html": [ - [ - "css/css-transforms/translateY/svg-translatey-048.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-combination-001.html": [ - [ - "css/css-transforms/translateY/svg-translatey-combination-001.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-combination-002.html": [ - [ - "css/css-transforms/translateY/svg-translatey-combination-002.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-combination-003.html": [ - [ - "css/css-transforms/translateY/svg-translatey-combination-003.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-combination-004.html": [ - [ - "css/css-transforms/translateY/svg-translatey-combination-004.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-001.html": [ - [ - "css/css-transforms/translateY/svg-translatey-ex-unit-001.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-002.html": [ - [ - "css/css-transforms/translateY/svg-translatey-ex-unit-002.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-003.html": [ - [ - "css/css-transforms/translateY/svg-translatey-ex-unit-003.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-004.html": [ - [ - "css/css-transforms/translateY/svg-translatey-ex-unit-004.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-005.html": [ - [ - "css/css-transforms/translateY/svg-translatey-ex-unit-005.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-006.html": [ - [ - "css/css-transforms/translateY/svg-translatey-ex-unit-006.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-relative-001.html": [ - [ - "css/css-transforms/translateY/svg-translatey-relative-001.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/translateY/svg-translatey-relative-002.html": [ - [ - "css/css-transforms/translateY/svg-translatey-relative-002.html", - [ - [ - "/css/css-transforms/translateY/reference/svg-translatey-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/transofrmed-preserve-3d-1.html": [ [ "css/css-transforms/transofrmed-preserve-3d-1.html", @@ -95871,6 +92601,30 @@ {} ] ], + "css/css-writing-modes/direction-upright-001.html": [ + [ + "css/css-writing-modes/direction-upright-001.html", + [ + [ + "/css/css-writing-modes/reference/direction-upright-001.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/direction-upright-002.html": [ + [ + "css/css-writing-modes/direction-upright-002.html", + [ + [ + "/css/css-writing-modes/reference/direction-upright-002.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/direction-vlr-003.xht": [ [ "css/css-writing-modes/direction-vlr-003.xht", @@ -96692,7 +93446,7 @@ "css/css-writing-modes/inline-block-alignment-007.xht", [ [ - "/css/css-writing-modes/inline-block-alignment-006-ref.xht", + "/css/css-writing-modes/inline-block-alignment-007-ref.xht", "==" ] ], @@ -102963,12 +99717,168 @@ {} ] ], - "css/motion/offset-path-ray.html": [ + "css/motion/offset-path-ray-001.html": [ [ - "css/motion/offset-path-ray.html", + "css/motion/offset-path-ray-001.html", [ [ - "/css/motion/offset-path-ray-ref.html", + "/css/motion/offset-path-ray-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-002.html": [ + [ + "css/motion/offset-path-ray-002.html", + [ + [ + "/css/motion/offset-path-ray-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-003.html": [ + [ + "css/motion/offset-path-ray-003.html", + [ + [ + "/css/motion/offset-path-ray-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-004.html": [ + [ + "css/motion/offset-path-ray-004.html", + [ + [ + "/css/motion/offset-path-ray-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-005.html": [ + [ + "css/motion/offset-path-ray-005.html", + [ + [ + "/css/motion/offset-path-ray-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-006.html": [ + [ + "css/motion/offset-path-ray-006.html", + [ + [ + "/css/motion/offset-path-ray-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-007.html": [ + [ + "css/motion/offset-path-ray-007.html", + [ + [ + "/css/motion/offset-path-ray-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-008.html": [ + [ + "css/motion/offset-path-ray-008.html", + [ + [ + "/css/motion/offset-path-ray-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-009.html": [ + [ + "css/motion/offset-path-ray-009.html", + [ + [ + "/css/motion/offset-path-ray-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-contain-001.html": [ + [ + "css/motion/offset-path-ray-contain-001.html", + [ + [ + "/css/motion/offset-path-ray-contain-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-contain-002.html": [ + [ + "css/motion/offset-path-ray-contain-002.html", + [ + [ + "/css/motion/offset-path-ray-contain-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-contain-003.html": [ + [ + "css/motion/offset-path-ray-contain-003.html", + [ + [ + "/css/motion/offset-path-ray-contain-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-contain-004.html": [ + [ + "css/motion/offset-path-ray-contain-004.html", + [ + [ + "/css/motion/offset-path-ray-contain-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/motion/offset-path-ray-contain-005.html": [ + [ + "css/motion/offset-path-ray-contain-005.html", + [ + [ + "/css/motion/offset-path-ray-contain-005-ref.html", "==" ] ], @@ -118159,6 +115069,18 @@ {} ] ], + "mathml/presentation-markup/fractions/frac-bar-002.html": [ + [ + "mathml/presentation-markup/fractions/frac-bar-002.html", + [ + [ + "/mathml/presentation-markup/fractions/frac-bar-002-ref.html", + "==" + ] + ], + {} + ] + ], "mathml/presentation-markup/fractions/frac-color-001.html": [ [ "mathml/presentation-markup/fractions/frac-color-001.html", @@ -118219,6 +115141,18 @@ {} ] ], + "mathml/presentation-markup/fractions/frac-default-padding.html": [ + [ + "mathml/presentation-markup/fractions/frac-default-padding.html", + [ + [ + "/mathml/presentation-markup/fractions/frac-default-padding-ref.html", + "==" + ] + ], + {} + ] + ], "mathml/presentation-markup/fractions/frac-linethickness-001.html": [ [ "mathml/presentation-markup/fractions/frac-linethickness-001.html", @@ -118375,6 +115309,30 @@ {} ] ], + "mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html": [ + [ + "mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html", + [ + [ + "/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html", + "==" + ] + ], + {} + ] + ], + "mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html": [ + [ + "mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html", + [ + [ + "/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html", + "==" + ] + ], + {} + ] + ], "mathml/presentation-markup/operators/mo-form-dynamic.html": [ [ "mathml/presentation-markup/operators/mo-form-dynamic.html", @@ -119119,6 +116077,18 @@ {} ] ], + "mathml/relations/html5-tree/display-2.html": [ + [ + "mathml/relations/html5-tree/display-2.html", + [ + [ + "/mathml/relations/html5-tree/display-2-ref.html", + "==" + ] + ], + {} + ] + ], "mathml/relations/html5-tree/dynamic-1.html": [ [ "mathml/relations/html5-tree/dynamic-1.html", @@ -126406,9 +123376,6 @@ "accelerometer/Accelerometer.https-expected.txt": [ [] ], - "accelerometer/LinearAccelerationSensor-shake-threshold-manual.https-expected.txt": [ - [] - ], "accelerometer/META.yml": [ [] ], @@ -129493,6 +126460,12 @@ "cookies/samesite/resources/echo-cookies.html": [ [] ], + "cookies/samesite/resources/iframe-navigate-report.html": [ + [] + ], + "cookies/samesite/resources/iframe-subresource-report.html": [ + [] + ], "cookies/samesite/resources/navigate.html": [ [] ], @@ -133381,7 +130354,7 @@ "css/css-color-adjust/inheritance-expected.txt": [ [] ], - "css/css-color-adjust/parsing/color-scheme-computed.tentative-expected.txt": [ + "css/css-color-adjust/parsing/color-scheme-computed-expected.txt": [ [] ], "css/css-color-adjust/parsing/color-scheme-valid-expected.txt": [ @@ -140116,6 +137089,9 @@ "css/css-fonts/variations/variable-gsub-ref.html": [ [] ], + "css/css-fonts/variations/variable-opsz-ref.html": [ + [] + ], "css/css-forced-color-adjust/inheritance-expected.txt": [ [] ], @@ -140254,6 +137230,9 @@ "css/css-grid/abspos/support/positioned-grid-descendants.js": [ [] ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html": [ + [] + ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009-expected.txt": [ [] ], @@ -140287,6 +137266,9 @@ "css/css-grid/animation/grid-template-rows-interpolation-expected.txt": [ [] ], + "css/css-grid/grid-definition/grid-auto-repeat-max-size-001-expected.txt": [ + [] + ], "css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html": [ [] ], @@ -140461,9 +137443,93 @@ "css/css-grid/reference/grid-text-green-margin-no-collapse-ref.html": [ [] ], + "css/css-grid/subgrid/abs-pos-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/abs-pos-002-ref.html": [ + [] + ], "css/css-grid/subgrid/auto-track-sizing-001-ref.html": [ [] ], + "css/css-grid/subgrid/baseline-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-002-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-003-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-004-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-005-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-006-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-007-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-008-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-009-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-larger-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-larger-002-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-normal-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/grid-gap-smaller-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/item-percentage-height-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/line-names-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/line-names-004-ref.html": [ + [] + ], + "css/css-grid/subgrid/line-names-005-ref.html": [ + [] + ], + "css/css-grid/subgrid/line-names-006-ref.html": [ + [] + ], + "css/css-grid/subgrid/line-names-007-ref.html": [ + [] + ], + "css/css-grid/subgrid/line-names-008-ref.html": [ + [] + ], + "css/css-grid/subgrid/orthogonal-writing-mode-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/orthogonal-writing-mode-002-ref.html": [ + [] + ], + "css/css-grid/subgrid/orthogonal-writing-mode-003-ref.html": [ + [] + ], + "css/css-grid/subgrid/orthogonal-writing-mode-004-ref.html": [ + [] + ], + "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [ + [] + ], "css/css-grid/test-plan/index.html": [ [] ], @@ -142459,9 +139525,6 @@ "css/css-scroll-snap/snap-inline-block-expected.txt": [ [] ], - "css/css-scroll-snap/snap-to-visible-areas-expected.txt": [ - [] - ], "css/css-scroll-snap/support/scroll-target-align-001-iframe.html": [ [] ], @@ -143215,6 +140278,12 @@ "css/css-tables/parsing/border-spacing-valid-expected.txt": [ [] ], + "css/css-tables/row-group-margin-border-padding-ref.html": [ + [] + ], + "css/css-tables/row-margin-border-padding-ref.html": [ + [] + ], "css/css-tables/subpixel-collapsed-borders-003-ref.html": [ [] ], @@ -145159,6 +142228,9 @@ "css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html": [ [] ], + "css/css-text/white-space/reference/trailing-ideographic-space-002-ref.html": [ + [] + ], "css/css-text/white-space/reference/trailing-ideographic-space-003-ref.html": [ [] ], @@ -146284,18 +143356,6 @@ "css/css-transforms/translate/reference/svg-translate-relative-ref.html": [ [] ], - "css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html": [ - [] - ], - "css/css-transforms/translateX/reference/svg-translatex-ref.html": [ - [] - ], - "css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html": [ - [] - ], - "css/css-transforms/translateY/reference/svg-translatey-ref.html": [ - [] - ], "css/css-transitions/AnimationEffect-getComputedTiming.tentative-expected.txt": [ [] ], @@ -146323,9 +143383,6 @@ "css/css-transitions/event-dispatch.tentative-expected.txt": [ [] ], - "css/css-transitions/idlharness-expected.txt": [ - [] - ], "css/css-transitions/no-transition-from-ua-to-blocking-stylesheet-ref.html": [ [] ], @@ -146590,9 +143647,6 @@ "css/css-typed-om/the-stylepropertymap/properties/font-language-override-expected.txt": [ [] ], - "css/css-typed-om/the-stylepropertymap/properties/font-optical-sizing-expected.txt": [ - [] - ], "css/css-typed-om/the-stylepropertymap/properties/font-palette-expected.txt": [ [] ], @@ -148168,6 +145222,9 @@ "css/css-writing-modes/inline-block-alignment-006-ref.xht": [ [] ], + "css/css-writing-modes/inline-block-alignment-007-ref.xht": [ + [] + ], "css/css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht": [ [] ], @@ -148552,6 +145609,12 @@ "css/css-writing-modes/reference/ch-units-vrl-005-ref.html": [ [] ], + "css/css-writing-modes/reference/direction-upright-001.html": [ + [] + ], + "css/css-writing-modes/reference/direction-upright-002.html": [ + [] + ], "css/css-writing-modes/reference/full-width-001-horizontal-notref.html": [ [] ], @@ -150523,7 +147586,37 @@ "css/motion/offset-distance-ref.html": [ [] ], - "css/motion/offset-path-ray-ref.html": [ + "css/motion/offset-path-ray-001-ref.html": [ + [] + ], + "css/motion/offset-path-ray-003-ref.html": [ + [] + ], + "css/motion/offset-path-ray-005-ref.html": [ + [] + ], + "css/motion/offset-path-ray-007-ref.html": [ + [] + ], + "css/motion/offset-path-ray-008-ref.html": [ + [] + ], + "css/motion/offset-path-ray-009-ref.html": [ + [] + ], + "css/motion/offset-path-ray-contain-001-ref.html": [ + [] + ], + "css/motion/offset-path-ray-contain-002-ref.html": [ + [] + ], + "css/motion/offset-path-ray-contain-003-ref.html": [ + [] + ], + "css/motion/offset-path-ray-contain-004-ref.html": [ + [] + ], + "css/motion/offset-path-ray-contain-005-ref.html": [ [] ], "css/motion/offset-path-string-ref.html": [ @@ -155725,6 +152818,9 @@ "fonts/math/mathvariant-tailed.woff": [ [] ], + "fonts/math/operators.woff": [ + [] + ], "fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff": [ [] ], @@ -161749,21 +158845,24 @@ "html/semantics/forms/autofocus/resources/child-autofocus.html": [ [] ], + "html/semantics/forms/autofocus/resources/child-iframe.html": [ + [] + ], "html/semantics/forms/autofocus/resources/erase-first.css": [ [] ], "html/semantics/forms/autofocus/resources/frame-with-autofocus-element.html": [ [] ], + "html/semantics/forms/autofocus/resources/grand-child-autofocus.html": [ + [] + ], "html/semantics/forms/autofocus/resources/moving-autofocus-to-parent.html": [ [] ], "html/semantics/forms/autofocus/resources/utils.js": [ [] ], - "html/semantics/forms/autofocus/supported-elements-expected.txt": [ - [] - ], "html/semantics/forms/constraints/form-validation-validity-valueMissing-expected.txt": [ [] ], @@ -162502,6 +159601,12 @@ "html/semantics/scripting-1/the-script-element/module/nested-missing-export.js": [ [] ], + "html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub-expected.txt": [ + [] + ], + "html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub-expected.txt": [ + [] + ], "html/semantics/scripting-1/the-script-element/module/resources/404-but-js.asis": [ [] ], @@ -162538,12 +159643,6 @@ "html/semantics/scripting-1/the-script-element/module/resources/import-remote-origin-referrer-checker.sub.js": [ [] ], - "html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js": [ - [] - ], - "html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js.headers": [ - [] - ], "html/semantics/scripting-1/the-script-element/module/resources/import-utf8-with-charset-header.js": [ [] ], @@ -164410,6 +161509,9 @@ "lifecycle/resources/beacon.py": [ [] ], + "lifecycle/resources/child.html": [ + [] + ], "lifecycle/resources/subframe.html": [ [] ], @@ -164548,6 +161650,9 @@ "mathml/presentation-markup/fractions/frac-bar-001-ref.html": [ [] ], + "mathml/presentation-markup/fractions/frac-bar-002-ref.html": [ + [] + ], "mathml/presentation-markup/fractions/frac-color-001-notref.html": [ [] ], @@ -164563,6 +161668,9 @@ "mathml/presentation-markup/fractions/frac-created-dynamically-ref.html": [ [] ], + "mathml/presentation-markup/fractions/frac-default-padding-ref.html": [ + [] + ], "mathml/presentation-markup/fractions/frac-linethickness-001-ref.html": [ [] ], @@ -164602,6 +161710,12 @@ "mathml/presentation-markup/fractions/frac-visibility-001-ref.html": [ [] ], + "mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html": [ + [] + ], + "mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html": [ + [] + ], "mathml/presentation-markup/operators/mo-form-dynamic-ref.html": [ [] ], @@ -164788,6 +161902,9 @@ "mathml/relations/html5-tree/css-inline-style-dynamic.tentative-ref.html": [ [] ], + "mathml/relations/html5-tree/display-2-ref.html": [ + [] + ], "mathml/relations/html5-tree/dynamic-1-ref.html": [ [] ], @@ -164842,6 +161959,12 @@ "mathml/support/mathml-fragments.js": [ [] ], + "mathml/support/operator-dictionary.js": [ + [] + ], + "mathml/support/operator-dictionary.json": [ + [] + ], "mathml/tools/axisheight.py": [ [] ], @@ -164860,6 +161983,12 @@ "mathml/tools/mathvariant-transforms.py": [ [] ], + "mathml/tools/operator-dictionary.py": [ + [] + ], + "mathml/tools/operator-dictionary.xsl": [ + [] + ], "mathml/tools/percentscaledown.py": [ [] ], @@ -166138,9 +163267,6 @@ "offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs-expected.txt": [ [] ], - "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt": [ - [] - ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transferrable-expected.txt": [ [] ], @@ -166306,6 +163432,9 @@ "payment-handler/app-change-payment-method.js": [ [] ], + "payment-handler/app-supports-shipping-contact-delegation.js": [ + [] + ], "payment-handler/basic-card.js": [ [] ], @@ -166345,6 +163474,9 @@ "payment-handler/register-and-activate-service-worker.js": [ [] ], + "payment-handler/supports-shipping-contact-delegation-manual.https-expected.txt": [ + [] + ], "payment-handler/untrusted-event.js": [ [] ], @@ -176935,9 +174067,6 @@ "web-animations/animation-model/animation-types/property-types.js": [ [] ], - "web-animations/animation-model/combining-effects/effect-composition-expected.txt": [ - [] - ], "web-animations/animation-model/keyframe-effects/computed-keyframes-shorthands-expected.txt": [ [] ], @@ -176983,9 +174112,6 @@ "web-animations/interfaces/KeyframeEffect/iterationComposite-expected.txt": [ [] ], - "web-animations/interfaces/KeyframeEffect/setKeyframes-expected.txt": [ - [] - ], "web-animations/interfaces/KeyframeEffect/style-change-events-expected.txt": [ [] ], @@ -177970,6 +175096,12 @@ "webrtc/tools/package.json": [ [] ], + "websockets/Create-Secure-extensions-empty.any-expected.txt": [ + [] + ], + "websockets/Create-Secure-extensions-empty.any.worker-expected.txt": [ + [] + ], "websockets/Create-Secure-url-with-space.any-expected.txt": [ [] ], @@ -180457,15 +177589,27 @@ "worklets/animation-worklet-credentials.https-expected.txt": [ [] ], + "worklets/animation-worklet-referrer.https-expected.txt": [ + [] + ], "worklets/audio-worklet-credentials.https-expected.txt": [ [] ], + "worklets/audio-worklet-referrer.https-expected.txt": [ + [] + ], "worklets/layout-worklet-credentials.https-expected.txt": [ [] ], + "worklets/layout-worklet-referrer.https-expected.txt": [ + [] + ], "worklets/paint-worklet-credentials.https-expected.txt": [ [] ], + "worklets/paint-worklet-referrer.https-expected.txt": [ + [] + ], "worklets/resources/addmodule-window.html": [ [] ], @@ -202753,6 +199897,12 @@ } ] ], + "cookies/samesite/about-blank-nested.https.html": [ + [ + "cookies/samesite/about-blank-nested.https.html", + {} + ] + ], "cookies/samesite/fetch.https.html": [ [ "cookies/samesite/fetch.https.html", @@ -202857,6 +200007,18 @@ } ] ], + "cookies/samesite/sandbox-iframe-nested.https.html": [ + [ + "cookies/samesite/sandbox-iframe-nested.https.html", + {} + ] + ], + "cookies/samesite/sandbox-iframe-subresource.https.html": [ + [ + "cookies/samesite/sandbox-iframe-subresource.https.html", + {} + ] + ], "cookies/samesite/setcookie-lax.https.html": [ [ "cookies/samesite/setcookie-lax.https.html", @@ -203334,6 +200496,24 @@ {} ] ], + "css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html": [ + [ + "css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html", + {} + ] + ], + "css/CSS2/positioning/relpos-percentage-left-in-scrollable.html": [ + [ + "css/CSS2/positioning/relpos-percentage-left-in-scrollable.html", + {} + ] + ], + "css/CSS2/positioning/relpos-percentage-top-in-scrollable.html": [ + [ + "css/CSS2/positioning/relpos-percentage-top-in-scrollable.html", + {} + ] + ], "css/css-align/animation/column-gap-interpolation.html": [ [ "css/css-align/animation/column-gap-interpolation.html", @@ -205254,9 +202434,9 @@ {} ] ], - "css/css-color-adjust/parsing/color-scheme-computed.tentative.html": [ + "css/css-color-adjust/parsing/color-scheme-computed.html": [ [ - "css/css-color-adjust/parsing/color-scheme-computed.tentative.html", + "css/css-color-adjust/parsing/color-scheme-computed.html", {} ] ], @@ -209904,9 +207084,9 @@ {} ] ], - "css/css-multicol/animation/column-rule-width.html": [ + "css/css-multicol/animation/column-rule-width-interpolation.html": [ [ - "css/css-multicol/animation/column-rule-width.html", + "css/css-multicol/animation/column-rule-width-interpolation.html", {} ] ], @@ -211170,6 +208350,12 @@ {} ] ], + "css/css-scroll-anchoring/image-001.html": [ + [ + "css/css-scroll-anchoring/image-001.html", + {} + ] + ], "css/css-scroll-anchoring/infinite-scroll-event.tentative.html": [ [ "css/css-scroll-anchoring/infinite-scroll-event.tentative.html", @@ -211182,6 +208368,12 @@ {} ] ], + "css/css-scroll-anchoring/inline-block-002.html": [ + [ + "css/css-scroll-anchoring/inline-block-002.html", + {} + ] + ], "css/css-scroll-anchoring/inline-block.html": [ [ "css/css-scroll-anchoring/inline-block.html", @@ -211506,9 +208698,39 @@ {} ] ], - "css/css-scroll-snap/snap-to-visible-areas.html": [ + "css/css-scroll-snap/snap-to-visible-areas-both.html": [ [ - "css/css-scroll-snap/snap-to-visible-areas.html", + "css/css-scroll-snap/snap-to-visible-areas-both.html", + {} + ] + ], + "css/css-scroll-snap/snap-to-visible-areas-margin-both.html": [ + [ + "css/css-scroll-snap/snap-to-visible-areas-margin-both.html", + {} + ] + ], + "css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html": [ + [ + "css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html", + {} + ] + ], + "css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html": [ + [ + "css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html", + {} + ] + ], + "css/css-scroll-snap/snap-to-visible-areas-x-axis.html": [ + [ + "css/css-scroll-snap/snap-to-visible-areas-x-axis.html", + {} + ] + ], + "css/css-scroll-snap/snap-to-visible-areas-y-axis.html": [ + [ + "css/css-scroll-snap/snap-to-visible-areas-y-axis.html", {} ] ], @@ -214734,12 +211956,24 @@ {} ] ], + "css/css-text/line-breaking/line-breaking-020.html": [ + [ + "css/css-text/line-breaking/line-breaking-020.html", + {} + ] + ], "css/css-text/overflow-wrap/overflow-wrap-anywhere-span-002.html": [ [ "css/css-text/overflow-wrap/overflow-wrap-anywhere-span-002.html", {} ] ], + "css/css-text/overflow-wrap/overflow-wrap-break-word-keep-all-001.html": [ + [ + "css/css-text/overflow-wrap/overflow-wrap-break-word-keep-all-001.html", + {} + ] + ], "css/css-text/overflow-wrap/overflow-wrap-break-word-long-crash.html": [ [ "css/css-text/overflow-wrap/overflow-wrap-break-word-long-crash.html", @@ -215238,6 +212472,18 @@ {} ] ], + "css/css-transforms/animation/perspective-interpolation.html": [ + [ + "css/css-transforms/animation/perspective-interpolation.html", + {} + ] + ], + "css/css-transforms/animation/perspective-origin-interpolation.html": [ + [ + "css/css-transforms/animation/perspective-origin-interpolation.html", + {} + ] + ], "css/css-transforms/animation/rotate-interpolation.html": [ [ "css/css-transforms/animation/rotate-interpolation.html", @@ -219506,6 +216752,12 @@ {} ] ], + "css/cssom-view/offsetTopLeft-border-box.html": [ + [ + "css/cssom-view/offsetTopLeft-border-box.html", + {} + ] + ], "css/cssom-view/offsetTopLeft-empty-inline-offset.html": [ [ "css/cssom-view/offsetTopLeft-empty-inline-offset.html", @@ -247116,6 +244368,12 @@ {} ] ], + "html/semantics/forms/autofocus/autofocus-in-not-fully-active-document.html": [ + [ + "html/semantics/forms/autofocus/autofocus-in-not-fully-active-document.html", + {} + ] + ], "html/semantics/forms/autofocus/autofocus-on-stable-document.html": [ [ "html/semantics/forms/autofocus/autofocus-on-stable-document.html", @@ -247178,6 +244436,14 @@ {} ] ], + "html/semantics/forms/autofocus/same-origin-autofocus.html": [ + [ + "html/semantics/forms/autofocus/same-origin-autofocus.html", + { + "testdriver": true + } + ] + ], "html/semantics/forms/autofocus/skip-another-top-level-browsing-context.html": [ [ "html/semantics/forms/autofocus/skip-another-top-level-browsing-context.html", @@ -255437,6 +252703,18 @@ {} ] ], + "largest-contentful-paint/image-inside-svg.html": [ + [ + "largest-contentful-paint/image-inside-svg.html", + {} + ] + ], + "largest-contentful-paint/image-not-fully-visible.html": [ + [ + "largest-contentful-paint/image-not-fully-visible.html", + {} + ] + ], "largest-contentful-paint/image-src-change.html": [ [ "largest-contentful-paint/image-src-change.html", @@ -255876,6 +253154,18 @@ {} ] ], + "mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html": [ + [ + "mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html", + {} + ] + ], + "mathml/presentation-markup/mrow/legacy-mstyle-attributes.html": [ + [ + "mathml/presentation-markup/mrow/legacy-mstyle-attributes.html", + {} + ] + ], "mathml/presentation-markup/operators/embellished-operator-001.html": [ [ "mathml/presentation-markup/operators/embellished-operator-001.html", @@ -255894,6 +253184,14 @@ {} ] ], + "mathml/presentation-markup/operators/operator-dictionary-001.html": [ + [ + "mathml/presentation-markup/operators/operator-dictionary-001.html", + { + "timeout": "long" + } + ] + ], "mathml/presentation-markup/radicals/root-parameters-1.html": [ [ "mathml/presentation-markup/radicals/root-parameters-1.html", @@ -256056,6 +253354,12 @@ {} ] ], + "mathml/relations/css-styling/ignored-properties-001.html": [ + [ + "mathml/relations/css-styling/ignored-properties-001.html", + {} + ] + ], "mathml/relations/css-styling/lengths-2.html": [ [ "mathml/relations/css-styling/lengths-2.html", @@ -326066,11 +323370,11 @@ "testharness" ], "2dcontext/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html": [ - "72c64b10663866026d35c1daf73714d18f8ea90b", + "1fe8ac5eaebbe3e93387220d7a58f8ed8fdb1e29", "testharness" ], "2dcontext/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html": [ - "ea21d33563ba20187a5424a68885297061fdb10e", + "87f8d6d7f150bef803b700f2d8ff9f518b52aec0", "testharness" ], "2dcontext/wide-gamut-canvas/canvas-colorspace-arguments.html": [ @@ -326086,7 +323390,7 @@ "testharness" ], "2dcontext/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html": [ - "7d443817cb67c88abecb989bd30205128961e3aa", + "e7a83fc1f75711e107b45065a76eebf98eb04296", "testharness" ], "2dcontext/wide-gamut-canvas/canvas-drawImage-e_srgb.html": [ @@ -328889,10 +326193,6 @@ "ff1f0832c31088bd0a85c99f9ad158f7c62d62a6", "testharness" ], - "accelerometer/LinearAccelerationSensor-shake-threshold-manual.https-expected.txt": [ - "6cc9b56e286762e783b30cde06b49c3899892f77", - "support" - ], "accelerometer/LinearAccelerationSensor-shake-threshold-manual.https.html": [ "c0746e5ebd54439ff9ad085d103aab5adbfec0bf", "manual" @@ -329850,7 +327150,7 @@ "support" ], "bluetooth/generate_test.py": [ - "8cb61dda8fa43ac677998ee212006fda25dd6927", + "c0ff8a78e956e395428c5756c8aa3b3e3545991b", "support" ], "bluetooth/idl/idl-Bluetooth.https.html": [ @@ -330926,7 +328226,7 @@ "support" ], "common/security-features/resources/common.sub.js": [ - "64d2b9ffb4e3b2231f3b90313c4376ba2f4d867a", + "12776b1a4b55dc76415ea63abc4a93dab2fedd2a", "support" ], "common/security-features/resources/common.sub.js.headers": [ @@ -331050,7 +328350,7 @@ "support" ], "common/security-features/tools/spec_validator.py": [ - "dae5c6e35a3fe978571e9976c6aaaf1c5d3c1076", + "06a5acce23a41ad0157871bc2d5de26d307a1c53", "support" ], "common/security-features/tools/template/disclaimer.template": [ @@ -331586,7 +328886,7 @@ "support" ], "content-security-policy/embedded-enforcement/support/echo-required-csp.py": [ - "6063cc046ba7a22f7a5eaad35715106df8b09a55", + "03f7ca1eb29a4f7882dc3a3b02a1b0992691be05", "support" ], "content-security-policy/embedded-enforcement/support/testharness-helper.sub.js": [ @@ -336362,7 +333662,7 @@ "testharness" ], "cookies/resources/cookie-helper.sub.js": [ - "668d0afdba47f2e03257498cc391fc80277ad5f5", + "4257f8f2be835e3ae0c50806436edae71bc68451", "support" ], "cookies/resources/drop.py": [ @@ -336402,7 +333702,7 @@ "support" ], "cookies/resources/postToParent.py": [ - "68e85d3f5f193adb0eac24b71467e89b56097e2d", + "cbbadca0133985fa7c26e7b2107469d8274a9a8b", "support" ], "cookies/resources/redirectWithCORSHeaders.py": [ @@ -336437,6 +333737,10 @@ "18cf0516e64ec2c416b013b232d4247b5647b22c", "testharness" ], + "cookies/samesite/about-blank-nested.https.html": [ + "d5c9b8ada3f1bce6ebfe35efd0d6f288aa5ca5e3", + "testharness" + ], "cookies/samesite/fetch.https.html": [ "4daf357004a71cea5b0e58a44bf8919d96ad7ce8", "testharness" @@ -336473,6 +333777,14 @@ "9b8b286015f2adff3721faeeeeba13c6a645357c", "support" ], + "cookies/samesite/resources/iframe-navigate-report.html": [ + "98ea469fdac5123bb2c7c733daecde1d7ad97e3c", + "support" + ], + "cookies/samesite/resources/iframe-subresource-report.html": [ + "fad80534f22bdc63e7a4827cef07b17335134b71", + "support" + ], "cookies/samesite/resources/navigate.html": [ "7d0f87d49439088dc78883e85cfc5c6bcc291d4e", "support" @@ -336481,6 +333793,14 @@ "6d36132d3a89abea2f707e520e83a41590dac67a", "support" ], + "cookies/samesite/sandbox-iframe-nested.https.html": [ + "310f86a44687d5b715106c382afcc246808f5fc7", + "testharness" + ], + "cookies/samesite/sandbox-iframe-subresource.https.html": [ + "417089ef57deadfbd9ab993545e54c73c40ddac9", + "testharness" + ], "cookies/samesite/setcookie-lax.https.html": [ "0c09577373fd9c7ace1218577209d6d8dd9e1e09", "testharness" @@ -341881,6 +339201,10 @@ "b3a7420c630ad4c84e5593ad48f48f3072a88b98", "visual" ], + "css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html": [ + "6c075f7ac779ef735705aa06e4418a863c2ac1d7", + "reftest" + ], "css/CSS2/normal-flow/containing-block-percent-margin-bottom.html": [ "9dfc1963ac8a3bbccdd317e2b21613d08db21452", "testharness" @@ -347345,6 +344669,18 @@ "49c73248613c45a607b0688059a569ea6913165d", "reftest" ], + "css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html": [ + "0c7584d040524c8b14ca21d57ab9a28503cf46cd", + "testharness" + ], + "css/CSS2/positioning/relpos-percentage-left-in-scrollable.html": [ + "54856e729010b9590619c670870837d26a6f1ed5", + "testharness" + ], + "css/CSS2/positioning/relpos-percentage-top-in-scrollable.html": [ + "f4e7e2a839ffbebed02959c9b6318396ab34a215", + "testharness" + ], "css/CSS2/positioning/right-004-ref.xht": [ "14d8891062692018a70551cb09c6a5ce5a1a6b46", "support" @@ -351766,7 +349102,7 @@ "testharness" ], "css/css-animations/Element-getAnimations.tentative-expected.txt": [ - "ab7c1c8c984164536cb52269217c78ab6bd28cdf", + "820d14a85363b64fd7102a314ba96c77dfa7effd", "support" ], "css/css-animations/Element-getAnimations.tentative.html": [ @@ -356485,11 +353821,11 @@ "f7f6529349bf1ba0436e2d1165a81552de95ffaa", "testharness" ], - "css/css-color-adjust/parsing/color-scheme-computed.tentative-expected.txt": [ + "css/css-color-adjust/parsing/color-scheme-computed-expected.txt": [ "0aa58bb90e191bef42d9077a4bd8ea8949527c15", "support" ], - "css/css-color-adjust/parsing/color-scheme-computed.tentative.html": [ + "css/css-color-adjust/parsing/color-scheme-computed.html": [ "80b9803981f7123d22c637ee9056c04ba3108818", "testharness" ], @@ -362377,6 +359713,10 @@ "5633dba3bdb63188d5ce10112d22b69bb5eb21a3", "reftest" ], + "css/css-flexbox/percentage-heights-007.html": [ + "1318933952c99e9bb142f74110cbc388e6dda6c4", + "reftest" + ], "css/css-flexbox/percentage-size-subitems-001.html": [ "70f3953052a3a770c6cd15ee169607a00fc452b0", "reftest" @@ -364286,7 +361626,7 @@ "testharness" ], "css/css-fonts/parsing/font-computed.html": [ - "b3f104e62439d48d167559cfd2aeb5e509991f82", + "ab2694d211468b62b7d82d8ec353005d058b4f24", "testharness" ], "css/css-fonts/parsing/font-family-computed-expected.txt": [ @@ -364322,7 +361662,7 @@ "testharness" ], "css/css-fonts/parsing/font-invalid.html": [ - "d6db9338aa2adf5945fd88e29bdd9376e2efe1d1", + "950747580e8bc0fb46c919669977681fe308d805", "testharness" ], "css/css-fonts/parsing/font-kerning-computed.html": [ @@ -364410,7 +361750,7 @@ "testharness" ], "css/css-fonts/parsing/font-valid.html": [ - "769e6b42eae37a864fec6577614917f7b1fd7667", + "896be89741bd14acd961398791f62db3ec876c8d", "testharness" ], "css/css-fonts/parsing/font-variant-caps-computed.html": [ @@ -370442,7 +367782,7 @@ "support" ], "css/css-fonts/support/fonts/makegsubfonts.py": [ - "cd39e91d462ccc9b94adb0bed7f83250a1283961", + "e519b4936de26e9819419d91d5cc8c3254a4f783", "support" ], "css/css-fonts/support/fonts/pass.woff": [ @@ -370862,7 +368202,7 @@ "support" ], "css/css-fonts/variations/resources/variabletest_box.ttf": [ - "53b5b24233d15a525203e82090bdf20785babf6f", + "0d5bf3e267fc663bc87835226000ac2a45867fd7", "support" ], "css/css-fonts/variations/variable-box-font-ref.html": [ @@ -370889,6 +368229,14 @@ "ed432f65ebf504fb6568f494affe8f8ea5dd4866", "reftest" ], + "css/css-fonts/variations/variable-opsz-ref.html": [ + "24080345ba03cc983685d6fe3ed1c1f6631ce254", + "support" + ], + "css/css-fonts/variations/variable-opsz.html": [ + "d274a478280018de975a74e2781d2ac96d1e97f5", + "reftest" + ], "css/css-forced-color-adjust/inheritance-expected.txt": [ "2711c744129ede7c728a1d955e91f5b29652942a", "support" @@ -372185,6 +369533,26 @@ "1ee19e439d839ced4021725c2a27655eac001fff", "testharness" ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html": [ + "df72a88262bb813963704773dd69c055e164e656", + "support" + ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html": [ + "19a26d8d6aa5509e81243ab431135676b3a18517", + "reftest" + ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html": [ + "a426f879c6e8cdc0ccdad6cc193c094ca58d63b5", + "reftest" + ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html": [ + "ed3bf30317fb278af487a090c51fba867289f1cc", + "reftest" + ], + "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html": [ + "5e20b88d356620c0883ff4ebda4bec3aaa1d5853", + "reftest" + ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html": [ "5f32149402d0dd0b0e4deac7a3f18c326375b5df", "testharness" @@ -372625,8 +369993,12 @@ "00ef5a5974423967dadf26a594539ab2eb65526c", "reftest" ], + "css/css-grid/grid-definition/grid-auto-repeat-max-size-001-expected.txt": [ + "b48bf64bfcb754024764772fc741b939e3538615", + "support" + ], "css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html": [ - "e14f37ade0d136c7a0bbe2c45c42f43ef258abe9", + "cb843624377b309c5a6288b6426cf107fe38ef7d", "testharness" ], "css/css-grid/grid-definition/grid-auto-repeat-max-size-002.html": [ @@ -373821,6 +371193,22 @@ "9dcba3f28fab37112a5bcb873228b66b1c7eb42b", "support" ], + "css/css-grid/subgrid/abs-pos-001-ref.html": [ + "fe316d5d3bf91110b9a2bc2ed7d26a4158868edf", + "support" + ], + "css/css-grid/subgrid/abs-pos-001.html": [ + "e524ec2d767c043516546733411d7e25e6eff05b", + "reftest" + ], + "css/css-grid/subgrid/abs-pos-002-ref.html": [ + "69e071c758b65724d49af23ecd7d3d77d1970e3c", + "support" + ], + "css/css-grid/subgrid/abs-pos-002.html": [ + "5d6833555eda6b06a2cc6497511130b1e6531576", + "reftest" + ], "css/css-grid/subgrid/auto-track-sizing-001-ref.html": [ "800f87e5d00a767f1cb5e5816ffd46110fbd4e80", "support" @@ -373829,6 +371217,222 @@ "0fdb9b0b7e2ed8855b02dcfb9baceeb61b7d05d3", "reftest" ], + "css/css-grid/subgrid/baseline-001-ref.html": [ + "c98740b4e5af28da380e28d19f905efcfce560d8", + "support" + ], + "css/css-grid/subgrid/baseline-001.html": [ + "995b1a8d2ae1aaa7c0230379e5b799b12ac9e93c", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-001-ref.html": [ + "e7909fc2064e4d3498ab90da179cf4ad0d0e9c79", + "support" + ], + "css/css-grid/subgrid/grid-gap-001.html": [ + "0bc8eed4d8e408b18211b38095eecc0d983a96f4", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-002-ref.html": [ + "db30524612074f8d04a2abb7a243943568eb7414", + "support" + ], + "css/css-grid/subgrid/grid-gap-002.html": [ + "bd4b74924bdf35380811e24a4e2de67c91d7d5d4", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-003-ref.html": [ + "44053f0505ae0498d0a74da825450f0f4c445adf", + "support" + ], + "css/css-grid/subgrid/grid-gap-003.html": [ + "f8ce8655cf9da0bbca9495d77a2a2403ef9c6801", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-004-ref.html": [ + "b1819d1eaa8747f977715a4a3003e0c90d80751b", + "support" + ], + "css/css-grid/subgrid/grid-gap-004.html": [ + "b46d22e1e39e7e61f85a19860582b11c58719d52", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-005-ref.html": [ + "88d8b34d935647077a361d14a22be29442a76320", + "support" + ], + "css/css-grid/subgrid/grid-gap-005.html": [ + "9afba90a52954abf08719d2c115658c51b2cdec2", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-006-ref.html": [ + "d94181ddc4f966a7bb9dae769c016098d6c929a2", + "support" + ], + "css/css-grid/subgrid/grid-gap-006.html": [ + "d79ced10c883359b66a77f1b4c5ed362f275d361", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-007-ref.html": [ + "84d4c00235378e7e369ff527e469fe7234a4a0cf", + "support" + ], + "css/css-grid/subgrid/grid-gap-007.html": [ + "5b94fe530233ddaf47def934da6924a92e2e47e9", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-008-ref.html": [ + "ca8d4b3f1eaa9c57b30dadbd93dbddc72f03cce5", + "support" + ], + "css/css-grid/subgrid/grid-gap-008.html": [ + "760bd92c3dfa301148eac13bfd768ef1ebd85409", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-009-ref.html": [ + "628e4988b5343c70b3da546d924133f8e7055b55", + "support" + ], + "css/css-grid/subgrid/grid-gap-009.html": [ + "4bbf5c6e81003e21f54eb98d5bae2d5c3719580b", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-larger-001-ref.html": [ + "0d3050f568bd0c7ce6ee295335b17bd7e29a3c5d", + "support" + ], + "css/css-grid/subgrid/grid-gap-larger-001.html": [ + "85725d52925b898f562329256cf60ea24486f517", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-larger-002-ref.html": [ + "7415de64cd5670ad433308be1e657f05f40b926b", + "support" + ], + "css/css-grid/subgrid/grid-gap-larger-002.html": [ + "4565be1b8008c83007a53cdeb27e4fee40cee50a", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-normal-001-ref.html": [ + "ee99c02410c303b378c5ef78b6052f5e24cee4cd", + "support" + ], + "css/css-grid/subgrid/grid-gap-normal-001.html": [ + "5edf1e0762141a126bf0ae777216acc7645d40f3", + "reftest" + ], + "css/css-grid/subgrid/grid-gap-smaller-001-ref.html": [ + "fcd6851e2f84c2ec33a76b86ba4b15a70d36f7e8", + "support" + ], + "css/css-grid/subgrid/grid-gap-smaller-001.html": [ + "7b59acd700b757826486916ada33ee56444b7309", + "reftest" + ], + "css/css-grid/subgrid/item-percentage-height-001-ref.html": [ + "44f0d443ffa96cfd025485c47de59d598be32b8f", + "support" + ], + "css/css-grid/subgrid/item-percentage-height-001.html": [ + "15e996ea3264e4147d8c3e37b464303647ac3e0e", + "reftest" + ], + "css/css-grid/subgrid/line-names-001-ref.html": [ + "04c5839596c9e5b09ecce284c8cc757b6d1ef87c", + "support" + ], + "css/css-grid/subgrid/line-names-001.html": [ + "9b49e623ad754760f2118474c86dc4f208f3dd84", + "reftest" + ], + "css/css-grid/subgrid/line-names-002.html": [ + "a10a4d019b92dd0e539eecbff3e28e53601b688e", + "reftest" + ], + "css/css-grid/subgrid/line-names-003.html": [ + "43afaf9414699cd4ce66fae02f2c3ce5293ef68a", + "reftest" + ], + "css/css-grid/subgrid/line-names-004-ref.html": [ + "6ceb9d49274bac4fc648e5c85afcad733f4e134b", + "support" + ], + "css/css-grid/subgrid/line-names-004.html": [ + "0d2a96873dad6e40d379692b5a505a7015a5b1c9", + "reftest" + ], + "css/css-grid/subgrid/line-names-005-ref.html": [ + "4c7f4b50fd16601480e32924e1eaaa76c81b70c6", + "support" + ], + "css/css-grid/subgrid/line-names-005.html": [ + "43bde0b37ad2f8159c38ea0892cad9d03fe1a05b", + "reftest" + ], + "css/css-grid/subgrid/line-names-006-ref.html": [ + "e2c2ec2085bb65f315ef9fa7065e1b9a46f46c4a", + "support" + ], + "css/css-grid/subgrid/line-names-006.html": [ + "0aa8c80b2e233c9e9227c1a52e5e330b5ab443f5", + "reftest" + ], + "css/css-grid/subgrid/line-names-007-ref.html": [ + "2b06d9c3812a716a5117e7a5c7dcd2d10677b360", + "support" + ], + "css/css-grid/subgrid/line-names-007.html": [ + "d70a86b6b1469dcc657012d2f1e0867d412c5cdf", + "reftest" + ], + "css/css-grid/subgrid/line-names-008-ref.html": [ + "262fa548ec53e13f7ee8da2505a6951a18945622", + "support" + ], + "css/css-grid/subgrid/line-names-008.html": [ + "7b959120c31b5b58abddbe665f87e45bea703f2f", + "reftest" + ], + "css/css-grid/subgrid/orthogonal-writing-mode-001-ref.html": [ + "4f0f6f962e633d8e3c7ddd78acf0247bd96e7715", + "support" + ], + "css/css-grid/subgrid/orthogonal-writing-mode-001.html": [ + "1cf99a73e2ef7b0e3fe42bbf8c188fa4d2733979", + "reftest" + ], + "css/css-grid/subgrid/orthogonal-writing-mode-002-ref.html": [ + "7c51c0282869d01d9c933f8dbeb7a73e1035febe", + "support" + ], + "css/css-grid/subgrid/orthogonal-writing-mode-002.html": [ + "20a4b0ccf37114e0975a2f508631caebdd17dadb", + "reftest" + ], + "css/css-grid/subgrid/orthogonal-writing-mode-003-ref.html": [ + "3026548c68a48adc4cebf75852f2cc4c1938d965", + "support" + ], + "css/css-grid/subgrid/orthogonal-writing-mode-003.html": [ + "2cd17d628b2021122320eafd7e9de6da5a0d215f", + "reftest" + ], + "css/css-grid/subgrid/orthogonal-writing-mode-004-ref.html": [ + "1de585bd6230172b9d43556c897d3270c78d9e82", + "support" + ], + "css/css-grid/subgrid/orthogonal-writing-mode-004.html": [ + "4a0edd7e6d5aefe06fc0d9989c84d3871ea61a14", + "reftest" + ], + "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [ + "d264a3455a6c580976d2519ab4e0eb206b1164bf", + "support" + ], + "css/css-grid/subgrid/subgrid-item-block-size-001.html": [ + "29e82197831fec5e996d0f682a8f42eca819a8ed", + "reftest" + ], "css/css-grid/test-plan/index.html": [ "039f3a87c1a7d042af4ac043b1a5c4c4cb6c0d1e", "support" @@ -376810,15 +374414,15 @@ "testharness" ], "css/css-masking/parsing/clip-path-invalid.html": [ - "129d403ed6b0d8b3a70b025c632ed6a831ab8ba6", + "cf8aa251c38c8888329843cdce0564d54d6f1d3f", "testharness" ], "css/css-masking/parsing/clip-path-valid-expected.txt": [ - "b2b37820d99e3ca84dde94fddb7b12e0f3f182b2", + "3e01d731ca0f4c67257a09fe9f59b6cd6d033e31", "support" ], "css/css-masking/parsing/clip-path-valid.html": [ - "e734b9027f6d8e4175848c62dc00009b5828bef9", + "895cdfacac6cc8ac56e67738aed53e55be7b2fcf", "testharness" ], "css/css-masking/parsing/clip-rule-computed.html": [ @@ -376882,14 +374486,14 @@ "testharness" ], "css/css-multicol/animation/column-count-interpolation.html": [ - "def34adc6c0ae83c3432b195663c877c28157a99", + "66a75132650e8922df1a9dec551f7fa545fffb17", "testharness" ], "css/css-multicol/animation/column-rule-color-interpolation.html": [ - "060c8416ffbe2e227ddde74bac415976a9337bdb", + "3aba9446b472172a7b090a99383d9b29ffc31719", "testharness" ], - "css/css-multicol/animation/column-rule-width.html": [ + "css/css-multicol/animation/column-rule-width-interpolation.html": [ "d600d68ff1aa57c5fcb7759e7d3f3af0f119439c", "testharness" ], @@ -380914,7 +378518,7 @@ "reftest" ], "css/css-pseudo/first-letter-property-whitelist.html": [ - "e3b3f532fefe0ed88b01e19457a747bd3013ac21", + "9ad7b31c3621b3c5fc7a9e2ec0eb35895c9f9eae", "testharness" ], "css/css-pseudo/first-letter-width-ref.html": [ @@ -381633,6 +379237,10 @@ "7fcbd983ed569025e5f46fe69002ca91e86fd21a", "testharness" ], + "css/css-scroll-anchoring/image-001.html": [ + "475c9170b846f60bd5143fa43a4f10680bae1ed7", + "testharness" + ], "css/css-scroll-anchoring/infinite-scroll-event.tentative.html": [ "80fcc4cca0c89cbfd6436cc00193e7943988b23a", "testharness" @@ -381641,6 +379249,10 @@ "035d4ffd2e2c8955d4e8f80af3aff5db9285c8ae", "testharness" ], + "css/css-scroll-anchoring/inline-block-002.html": [ + "9163d34b3b20e38bb32f6e8b2adba6bdf0f5e456", + "testharness" + ], "css/css-scroll-anchoring/inline-block.html": [ "881ff97de9ea97bd8dca6a64333a16502f4e11d4", "testharness" @@ -381937,12 +379549,28 @@ "2a4402579cf06ffb2f5611dfd6207fabcb8bdafe", "testharness" ], - "css/css-scroll-snap/snap-to-visible-areas-expected.txt": [ - "029b8eee7c4f3e31ae37474196f9591718e999d6", - "support" + "css/css-scroll-snap/snap-to-visible-areas-both.html": [ + "da10f982f1f2dc3a764291ede3c2f13560e36082", + "testharness" ], - "css/css-scroll-snap/snap-to-visible-areas.html": [ - "3e822db02e675a3a8799f69f86d2bc93507c7547", + "css/css-scroll-snap/snap-to-visible-areas-margin-both.html": [ + "f148036a1d5d7165ffc085b2c4f6d49ae64fe9af", + "testharness" + ], + "css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html": [ + "dea9225a4728e10288d1af607961db855dcff169", + "testharness" + ], + "css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html": [ + "60c548844500397631cae018b32033ea3cc302ae", + "testharness" + ], + "css/css-scroll-snap/snap-to-visible-areas-x-axis.html": [ + "b8b226f1afecc5f0b9c01ef462fb5267682b739f", + "testharness" + ], + "css/css-scroll-snap/snap-to-visible-areas-y-axis.html": [ + "80d2e9946de8827d9d53686f6c9b4abea2e27592", "testharness" ], "css/css-scroll-snap/support/scroll-target-align-001-iframe.html": [ @@ -384793,6 +382421,22 @@ "a24556aa0dedfab35ff7792f03b804f44c0f4160", "reftest" ], + "css/css-tables/row-group-margin-border-padding-ref.html": [ + "aa3e68e6ab2830a817f8612e240888c2cc6e7a6a", + "support" + ], + "css/css-tables/row-group-margin-border-padding.html": [ + "97c7a6e5b9ce29ab7143a5b0b06e57916097ce02", + "reftest" + ], + "css/css-tables/row-margin-border-padding-ref.html": [ + "68cbcfc9c1ec6aa1fb940f5b26735e3b2fa3587e", + "support" + ], + "css/css-tables/row-margin-border-padding.html": [ + "c6606d941e86f36f12216f28520f6dcb66ef7926", + "reftest" + ], "css/css-tables/subpixel-collapsed-borders-001.html": [ "a71f5cc698b74a518411e57974577b4f4c4dccda", "reftest" @@ -388933,6 +386577,10 @@ "e755eff38133b6db65e9902a94047b120cf81dd1", "reftest" ], + "css/css-text/line-breaking/line-breaking-020.html": [ + "7c8d0f119edb5ef768b37a5a41b8df9bb9e59600", + "testharness" + ], "css/css-text/line-breaking/line-breaking-atomic-001.html": [ "e071378c95fd436484a3056ecb2ba6ff35ddbaae", "reftest" @@ -389169,6 +386817,10 @@ "2c83c46aa50f6d51efbb4d05635d86f7c166042d", "reftest" ], + "css/css-text/overflow-wrap/overflow-wrap-break-word-keep-all-001.html": [ + "ec27b82b6bf6d55ba1d4c9c9d417ae7d7cd8f6fe", + "testharness" + ], "css/css-text/overflow-wrap/overflow-wrap-break-word-long-crash.html": [ "e318386ded5bd3d1d61cf876fe420c8f5ada799f", "testharness" @@ -390542,7 +388194,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html": [ - "d47cbf8abdb0713385fda7ac8b706fde0efa0474", + "f5f08f68b2ab8dbb515fbd19515d650fa4a3fc1f", "reftest" ], "css/css-text/text-transform/math/text-transform-math-auto-002.tentative-ref.html": [ @@ -390558,7 +388210,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html": [ - "613cee6dc2e74f45d3cd227eb5960c66b7b4fdab", + "06b9ea6f6fdf72746e3e2b87e325df996eb93c0c", "reftest" ], "css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative-ref.html": [ @@ -390566,7 +388218,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html": [ - "a90f22bfbd280fabe2d12df7bf5bd2d7cbe0063f", + "76de9454fe71de97447ad83385c2d1f75b0c3d1f", "reftest" ], "css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative-ref.html": [ @@ -390574,7 +388226,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html": [ - "2de6be10a70552dd61fdb3f5d2d17a3f81e7041e", + "9a03fc7f5480a47bb3e1fd8f34fcb7c11fea13ab", "reftest" ], "css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative-ref.html": [ @@ -390582,7 +388234,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html": [ - "53c6314a82b35dcb5ed113a822b61f9210d115be", + "3cbfdb96a60da3e011dac8cb332637e5a0b24d09", "reftest" ], "css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative-ref.html": [ @@ -390590,7 +388242,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html": [ - "7786fc4751469d4c3c476995b39609ccbbf15dfb", + "b61a573efc4c0f5978284a1ab615f3ce45545c38", "reftest" ], "css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative-ref.html": [ @@ -390598,7 +388250,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html": [ - "bfca421f86912ae7163ab065ed065cfd63b68b68", + "df656d684725dcec782fe60d8b8149b930ccf008", "reftest" ], "css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative-ref.html": [ @@ -390606,7 +388258,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html": [ - "16a7909164e72ea9f27f7b4c41d1ed76b9256f82", + "99310b8fafc799f808aa894fe58adcd7bc308a11", "reftest" ], "css/css-text/text-transform/math/text-transform-math-initial-001.tentative-ref.html": [ @@ -390614,7 +388266,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html": [ - "1de22315d0dfb4870d5ee218dfdc6312ca6cc8de", + "42f3be7a02feef42d7b50f04c02055d7eb7f6545", "reftest" ], "css/css-text/text-transform/math/text-transform-math-italic-001.tentative-ref.html": [ @@ -390622,7 +388274,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html": [ - "b98e353aed0f9c9eb18b00b12a4223542fc4c318", + "86e9a84ae2df4f636c822ec389da82af80c07093", "reftest" ], "css/css-text/text-transform/math/text-transform-math-looped-001.tentative-ref.html": [ @@ -390630,7 +388282,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html": [ - "e46fb3336cf50cc87120db6615b3359136f1be35", + "d46cbc163b09e936dca486900527f394060a3e4c", "reftest" ], "css/css-text/text-transform/math/text-transform-math-monospace-001.tentative-ref.html": [ @@ -390638,7 +388290,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html": [ - "6f6b44e4dde2390680e2952c5e85b0ecdafea68b", + "86a4d113b25859174ef60aee1521b602b42a31c4", "reftest" ], "css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative-ref.html": [ @@ -390646,7 +388298,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html": [ - "b73b81d68ce4a7604301a527f6392c43ba8b49a8", + "41a5cc9453a2b72ae56318ac4e5b0528089c5b97", "reftest" ], "css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative-ref.html": [ @@ -390654,7 +388306,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html": [ - "9a686d0ec77894f8551fb2690ff8c4506d8cf008", + "955c54ab38d8b84827b19d170601d3730cf1c673", "reftest" ], "css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative-ref.html": [ @@ -390662,7 +388314,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html": [ - "c312cf662f19c5b8933142c3765b8da9addb4333", + "03afa9a0d15740582089cc2015a41e4e8cb7ecb1", "reftest" ], "css/css-text/text-transform/math/text-transform-math-script-001.tentative-ref.html": [ @@ -390670,7 +388322,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-script-001.tentative.html": [ - "130d7a054a6c6da6488a72016e8d85c59fbbd54a", + "bd17ecca70c478a6d3d5d41f15fdcf54c2ca1150", "reftest" ], "css/css-text/text-transform/math/text-transform-math-stretched-001.tentative-ref.html": [ @@ -390678,7 +388330,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html": [ - "de0af7282ab664073af8103fa13f56280b25caad", + "87dd88e9d04db231c1b6c64ae1e2c9251cae1e41", "reftest" ], "css/css-text/text-transform/math/text-transform-math-tailed-001.tentative-ref.html": [ @@ -390686,7 +388338,7 @@ "support" ], "css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html": [ - "24fa40bed2a69a7032ed8c83f5a5336ef7778e47", + "f08c4657f123e4a6926f3dd4397ed25cc52d8e17", "reftest" ], "css/css-text/text-transform/reference/text-transform-capitalize-001-ref.html": [ @@ -391998,7 +389650,11 @@ "support" ], "css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html": [ - "d62252f8c54370b540e20271b07772db8c3e06ee", + "aa97e2bc8347a12b03eae593860f6403da311cd8", + "support" + ], + "css/css-text/white-space/reference/trailing-ideographic-space-002-ref.html": [ + "7563151d4d786c563ef5da50cd6cf4012f6864e3", "support" ], "css/css-text/white-space/reference/trailing-ideographic-space-003-ref.html": [ @@ -392014,7 +389670,7 @@ "support" ], "css/css-text/white-space/reference/trailing-other-space-separators-001-ref.html": [ - "34e60ff0721d9197b9d39bf98d3682deb6ac7aba", + "e406b86a3a4b32e0b3367ea26c6e3f3ca8e44338", "support" ], "css/css-text/white-space/reference/trailing-other-space-separators-002-ref.html": [ @@ -392302,11 +389958,11 @@ "reftest" ], "css/css-text/white-space/trailing-ideographic-space-001.html": [ - "241ca11a065727627c4d8e1c0158321e6bae5779", + "82a1d4ca20a18c41260d0c2ef2f2472465e59328", "reftest" ], "css/css-text/white-space/trailing-ideographic-space-002.html": [ - "8830da9643bf5a9ab8b172119259be407943122e", + "0caf6ce62fe99d011b4d68216b2dfd022e346b58", "reftest" ], "css/css-text/white-space/trailing-ideographic-space-003.html": [ @@ -392318,7 +389974,7 @@ "reftest" ], "css/css-text/white-space/trailing-other-space-separators-001.html": [ - "6b693f08494734678af27db97ac9022e13e28190", + "ce5740bd0ed3dc12d0f584048bb150de48835263", "reftest" ], "css/css-text/white-space/trailing-other-space-separators-002.html": [ @@ -392326,11 +389982,11 @@ "reftest" ], "css/css-text/white-space/trailing-other-space-separators-003.html": [ - "549c731f44d356212cf3e1cf93a65eb1b33a008e", + "dad554e98d552f9703d9ebe34d9775ce11300d00", "reftest" ], "css/css-text/white-space/trailing-other-space-separators-004.html": [ - "90a568a8c9d49154db4157fde3b93ed50cdefb76", + "0fce061b45560509acadfff3a98f53d125c96fa2", "reftest" ], "css/css-text/white-space/trailing-other-space-separators-break-spaces-001.html": [ @@ -392918,7 +390574,7 @@ "reftest_node" ], "css/css-transforms/META.yml": [ - "b948e3a31ed377091417bbf32d02791965b15a92", + "a6d5672c9dfe95c990c538f5596094eb2a9615bc", "support" ], "css/css-transforms/OWNERS": [ @@ -392941,6 +390597,14 @@ "a326e7c92f21aca39613c6964055b9592b35b034", "testharness" ], + "css/css-transforms/animation/perspective-interpolation.html": [ + "a27f84a11bdc3999eb5183dc3251878053c43bac", + "testharness" + ], + "css/css-transforms/animation/perspective-origin-interpolation.html": [ + "0a1e74cb8ec6d0539fe04f0be765ec67b3d78b7e", + "testharness" + ], "css/css-transforms/animation/rotate-interpolation.html": [ "911d8e38bd0bb6c3d5652d6824c64c58bd2233cf", "testharness" @@ -393170,7 +390834,7 @@ "reftest" ], "css/css-transforms/document-styles/svg-document-styles-003.html": [ - "c0da31af54f03aca062ef48cd633493d3214575c", + "c1fe39dba088ea3dc605420b1d00267ff63ea711", "reftest" ], "css/css-transforms/document-styles/svg-document-styles-004.html": [ @@ -393182,7 +390846,7 @@ "reftest" ], "css/css-transforms/document-styles/svg-document-styles-006.html": [ - "b45c256cde2feafb47a8dc288cc26dc1d5d1270a", + "71975eea1ce94e2b002a3514da4ea4a4c48f499b", "reftest" ], "css/css-transforms/document-styles/svg-document-styles-007.html": [ @@ -393198,7 +390862,7 @@ "reftest" ], "css/css-transforms/document-styles/svg-document-styles-010.html": [ - "fe73d9c9f4b16b2c4c2a136c6c7726b2b32822d5", + "47cba53a282f9573a986dcd01e7af4d9034f398d", "reftest" ], "css/css-transforms/document-styles/svg-document-styles-011.html": [ @@ -393242,11 +390906,11 @@ "reftest" ], "css/css-transforms/external-styles/svg-external-styles-003.html": [ - "afeebb500e92a47636582c979c1d3aa5e38614e3", + "564f230cc480a0b87b13f97f512afef3b9ca066b", "reftest" ], "css/css-transforms/external-styles/svg-external-styles-004.html": [ - "8401cbe1d0f5ab61373bf9b191fecbc5671169a0", + "ea51002ba28d46ddd9535bbcde0622983523c030", "reftest" ], "css/css-transforms/external-styles/svg-external-styles-005.html": [ @@ -393254,7 +390918,7 @@ "reftest" ], "css/css-transforms/external-styles/svg-external-styles-006.html": [ - "21064813e078488fc5fe243d3bc04845830a9190", + "d43e40a8141bbfe41783ab7e4c86778c9b1cd8ac", "reftest" ], "css/css-transforms/external-styles/svg-external-styles-007.html": [ @@ -393270,7 +390934,7 @@ "reftest" ], "css/css-transforms/external-styles/svg-external-styles-010.html": [ - "f20aed60d6445a7ab880e32cf07a43574a6b0a65", + "863278fafe1d309c110ac51be38c79ce0c15a608", "reftest" ], "css/css-transforms/external-styles/svg-external-styles-011.html": [ @@ -393282,7 +390946,7 @@ "reftest" ], "css/css-transforms/external-styles/svg-external-styles-013.html": [ - "4ccd14dc0c14989f1a19123b047ed6a1eea2ffde", + "f45639f8c6e2adf83830157f76a6588c059c0c3b", "reftest" ], "css/css-transforms/external-styles/svg-external-styles-014.html": [ @@ -393310,247 +390974,15 @@ "support" ], "css/css-transforms/gradientTransform/svg-gradientTransform-001.html": [ - "6c60b5066344d023d9e52913c64bd44a92a33ceb", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-002.html": [ - "b63b2dfebcda220aa4ed8b511fd16db947624a23", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-003.html": [ - "9a8445c18b23450ac66dc3594c0171a9a7cd3265", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-004.html": [ - "76640146cb522b18cf6242bf1539ba412f4d6d81", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-005.html": [ - "a14f64f338483ceca16b597e9f7dec63efc20822", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-006.html": [ - "22e5688b355f75275072003573ae45b807057bb9", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-007.html": [ - "61e3c18755ee97a3c7dfee6973cd74119fe15014", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-008.html": [ - "eca5b761de11de5e73141d6e4a005c43949f9acf", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-009.html": [ - "88a304c76f698c8d6f82119ed8abbbec729b8e2a", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-010.html": [ - "e1a7c340164c833521e1b2837be4769f76cd665d", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-011.html": [ - "672a8ba38e07db57581203d505a8c889b157029a", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-012.html": [ - "22d8939638ca83bad8af25306715dfa0df95274a", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-013.html": [ - "b87257a6266ae1ce73acbd724c7fddc28d0106ec", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-014.html": [ - "e91bd3fa8021950a0cd1782703d2118e259ee9ff", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-015.html": [ - "4d703943dd8859af418f5a99fa7a7d59c07f5361", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-016.html": [ - "873f8a3690425e0b46790bcfa880213404aeedfb", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-017.html": [ - "ea19abf462113efc038e87e4b62bee6106f3252b", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-018.html": [ - "cd83e08bbbae06f581298698116c472bcec2753b", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-019.html": [ - "ddb5581a71ca8aaf0a74e10f7302fe1d2170a656", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-020.html": [ - "043fd357a5a87854ef9b538f3e91407214983ccd", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-021.html": [ - "7319fecc2f32ff01069fed4b45fec02ea4619427", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-022.html": [ - "2db57f3a4b989d92821b1abc151d0dcf6875ffd9", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-023.html": [ - "2bc10f0c715f1a454e10476bf0385c9e2ce8d862", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-024.html": [ - "00f1c0ed02a466d59376ad525e7a837b9a31a4bc", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-025.html": [ - "ef3821befee927de83475023c0f9e3488ee27b4b", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-026.html": [ - "988fb49ee1e2d5671ec530cae089915f9be79b95", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-027.html": [ - "b33e5f403b2203136ee6d9d1e892fae5637a2256", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-028.html": [ - "bdd125cdf50001bad9ebbdce49fa45a015b7608a", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-029.html": [ - "8477f297346d4a460cc4bf7a96819640ebeaaaf2", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-030.html": [ - "c4ec7e9b0cc29bdd8e27fe3e3ec901b11ebe9933", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-031.html": [ - "945fa1ae9cf66e18a00ea9095f1adc7884ab2aba", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-032.html": [ - "ff6569417bbddf6a233912a9d0bbc91bb01a2e79", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-033.html": [ - "dc6dce76f3458307783deeded298af351e0ef4d2", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-034.html": [ - "431044f4165e2c39d8d2d8369e9a5241070c2fb1", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-035.html": [ - "06b5ff746bd262eeb5b69c93cb626cc79a0b6295", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-036.html": [ - "e5a75af51adec7346051f69dcc40cc6f87e7a159", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-037.html": [ - "42177555a6c4768a537e013a768cb2b86c8e0232", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-038.html": [ - "ec48308670b52e3cc5f7eb2ac67780ec9896ca2f", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-039.html": [ - "cb96e29726276d8ec904378d614b2bbba31245d0", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-040.html": [ - "13e542e0866e0460251295f3801ecdd6d9e8452f", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-041.html": [ - "ed9a6d31bfd5b4be04c28eb9d04424678e994ad7", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-042.html": [ - "916ca9b839009739b189c44fc3e94ea4f9a0d5f0", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-043.html": [ - "8a1043b5456fd2b229b67cf96a862e3a4910c018", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-044.html": [ - "120e46dc2abbec9acaf87c23bdcf3853f0654934", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-045.html": [ - "395c712fd13d146ddbe40d436b5c269ae820c0e2", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-046.html": [ - "551c854ba82e9993d572504496d0590fc494dfae", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-047.html": [ - "2b1417297e5e50f2c1569acd2b605df4622fafae", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-048.html": [ - "001750f82dbdd33d994b496acc6ae21bae98add9", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-049.html": [ - "bdf099864feaad381cd8752f275192f43beec10a", + "92e2e00ad7a927e1ca5e602a85818908a71ad050", "reftest" ], "css/css-transforms/gradientTransform/svg-gradientTransform-combination-001.html": [ - "87b61c088e9d8c8480603fb2df75ad9181e59634", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-combination-002.html": [ - "75832a3e9a20610766793893375365de794d8ef3", + "5e86e3c24b273b6f16e90ab91eb6c381fa4cb6da", "reftest" ], "css/css-transforms/gradientTransform/svg-gradientTransform-combination-003.html": [ - "6cbfd6fa49bb23921133332589bc0cf0073d959e", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-001.html": [ - "b1231ade848a7fae5b8555eff77597abdc21c142", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-002.html": [ - "ed0f336d5890e28abd816059bb39da9f19b9fbc8", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-003.html": [ - "5e9592d65b28d78dbf722b8692401ba71ab8d27f", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-004.html": [ - "193048c2d279410a8be8f1ca872481293a1cf8ed", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-005.html": [ - "01b5ed42e21b1a60fbdcf4bf0bae330adfa76165", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-006.html": [ - "96a9d02880925689f84cbc93073f25a7f432e7c0", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-001.html": [ - "bb31b58896512e3b1b8f63b46e2694a3d4571271", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-002.html": [ - "ca2e55caa3ea22a32a16fa05eeabde34aab5bc2a", - "reftest" - ], - "css/css-transforms/gradientTransform/svg-gradientTransform-relative-003.html": [ - "aa7d281e8e8ee1f5307eef4743babaf2789d9b97", + "5709eb22f871d8a4b00ae04a3b7ac1ca9dd960fb", "reftest" ], "css/css-transforms/group/reference/svg-green-square-250x250-ref.html": [ @@ -393566,11 +390998,11 @@ "reftest" ], "css/css-transforms/group/svg-transform-group-002.html": [ - "df0ce3faaf940ee92a9f9286f6cc4c9ed80c9976", + "5226c7acda866b472f063a5044e5a8b4771b37b5", "reftest" ], "css/css-transforms/group/svg-transform-group-003.html": [ - "cbf6622c5567b869266d4918051c2d63d0495251", + "6f21fe2c8835a76a1f33ca60bd04a176f019282c", "reftest" ], "css/css-transforms/group/svg-transform-group-004.html": [ @@ -393610,11 +391042,11 @@ "reftest" ], "css/css-transforms/group/svg-transform-nested-002.html": [ - "7dc4c464eb78656ab3104e7c1edeb2f9ee237dc2", + "37e897c14afb37510c348bae0eb98c1aca2ece5d", "reftest" ], "css/css-transforms/group/svg-transform-nested-003.html": [ - "e8717838d397fa836a7bdaac46959a2ef9b1f3b9", + "092946744a2c117cb841127790c2e7674c1799d7", "reftest" ], "css/css-transforms/group/svg-transform-nested-004.html": [ @@ -393650,11 +391082,11 @@ "reftest" ], "css/css-transforms/group/svg-transform-nested-012.html": [ - "5afe9732e6a87210a84cc5c7ceaf2a91edf7bcbb", + "ab2dff4f87429e55ff4636df01aeb2c783fda59d", "reftest" ], "css/css-transforms/group/svg-transform-nested-013.html": [ - "0a0edb705486e3fe4bfe60cc6e3ce2622cfd1e03", + "355746b1b55140885377533c7a09e00b6bda2837", "reftest" ], "css/css-transforms/group/svg-transform-nested-014.html": [ @@ -393666,11 +391098,11 @@ "reftest" ], "css/css-transforms/group/svg-transform-nested-016.html": [ - "f8bbc37be92d6178bbf7a32f4afabdd053def6d0", + "f83d9dae62fe8d4fde4c30c6d297f9e2046d43c7", "reftest" ], "css/css-transforms/group/svg-transform-nested-017.html": [ - "77c3bbd12afc7c43c563a91c1cef203fc6fd6342", + "3797318afa294c830a5d5584a7d3ddab9bdb1556", "reftest" ], "css/css-transforms/group/svg-transform-nested-018.html": [ @@ -393690,19 +391122,19 @@ "reftest" ], "css/css-transforms/group/svg-transform-nested-022.html": [ - "7f17d970f96c3c62aea8ee1a63b945fb27340f12", + "92444cf681b2b869d2a57c59bd5cf6a80e0b3b51", "reftest" ], "css/css-transforms/group/svg-transform-nested-023.html": [ - "33887182644c8d77eb7621c5cf76f130f12c307b", + "57f75277552eef5529a6b0108b453c2971d88391", "reftest" ], "css/css-transforms/group/svg-transform-nested-024.html": [ - "2f1f0e5f38381e3bf03d1b7dd256816d82bad0c5", + "2fd3feea26763373888cca45a62f1d194a930f91", "reftest" ], "css/css-transforms/group/svg-transform-nested-025.html": [ - "0a8cc6bacd0e728e05d7322376cbd706eb9cf4b0", + "b8836555db2a32c823733917ef3252ce2b857e92", "reftest" ], "css/css-transforms/group/svg-transform-nested-026.html": [ @@ -393710,11 +391142,11 @@ "reftest" ], "css/css-transforms/group/svg-transform-nested-027.html": [ - "71742374178d86962e787e97bfefa2cf9347797e", + "ec017a7e94e72059d901b4171fde6127e52f1450", "reftest" ], "css/css-transforms/group/svg-transform-nested-028.html": [ - "eff690ea813cce5ca36518404d6e9caa2e3515e1", + "cc806c0970166e9aa9a2ccb51a03410e72bffe13", "reftest" ], "css/css-transforms/group/svg-transform-nested-029.html": [ @@ -393790,11 +391222,11 @@ "reftest" ], "css/css-transforms/inline-styles/svg-inline-styles-003.html": [ - "45ac6e37a155f158b96b90733ba8823ad095807f", + "8d4714d81b86db53c11fba52d8833a256b918565", "reftest" ], "css/css-transforms/inline-styles/svg-inline-styles-004.html": [ - "a3ab826a915c441ffe43dbc0927e5a921e3e8657", + "b7e0a7d80cf9d69327da0e499d5b23798344a31d", "reftest" ], "css/css-transforms/inline-styles/svg-inline-styles-005.html": [ @@ -393802,7 +391234,7 @@ "reftest" ], "css/css-transforms/inline-styles/svg-inline-styles-006.html": [ - "f30848e84898b8bdbc2f4ae56c952864efb18346", + "2885cbc989c352143a397af2b35844ba2f60a4f2", "reftest" ], "css/css-transforms/inline-styles/svg-inline-styles-007.html": [ @@ -393818,7 +391250,7 @@ "reftest" ], "css/css-transforms/inline-styles/svg-inline-styles-010.html": [ - "f680a916b4e330776128135d98111fb4f9a9823f", + "f8d6ad35aeb316b07f5530753e88acf6f0d160fc", "reftest" ], "css/css-transforms/inline-styles/svg-inline-styles-011.html": [ @@ -394226,247 +391658,11 @@ "support" ], "css/css-transforms/patternTransform/svg-patternTransform-001.html": [ - "6d5263b8be08d28b9997cd90f26d4538f908df2a", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-002.html": [ - "b98059be2302951f3130b4e761214d5c53c4e695", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-003.html": [ - "de6972854bb5b53d6bec59d9475dfaa6d7eb749b", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-004.html": [ - "7ae3fcb092fa98f6bf85474e91f0128bd27c1355", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-005.html": [ - "c0e6bb4fed6f437c1b109a879398c78bc36f708d", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-006.html": [ - "08eda75bf7a2ea5b198af067b4671de9e590bfe9", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-007.html": [ - "f9547157b37c5f1ffa58860bcf0a5d4b48191c35", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-008.html": [ - "72cc8449e8b6bf37e4cbe92f6b9ca3a9f96b1fda", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-009.html": [ - "9eeb3fd3cb67dd75f91488f80d96602e2bdb7295", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-010.html": [ - "c40a4e512b5f74408d4c2011456c016472f65e43", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-011.html": [ - "e9b3f31c8b6bf0b3c9540b03b152aff55f01a7cb", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-012.html": [ - "df7d4000916cc1bf989c8f5af5fe26c55f161123", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-013.html": [ - "510861aa2bce38a097d5915c8a2f6f006ef872a0", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-014.html": [ - "0c351a8b8b8319c2e4f476ecd02a8700dd508d98", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-015.html": [ - "37eb564fc933706f4a088eb1b217f9652ca557f3", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-016.html": [ - "67a57da945e012cb267bc1aacc6a713355316f53", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-017.html": [ - "ca97b27be42ac9b8109200ae12731abcb8eab7ed", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-018.html": [ - "15ddfd225a9e9e5d93e5eb3a46f00222c4a690c9", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-019.html": [ - "d7cc9d69cfd1a16deec78c0fb6177da8363b3d79", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-020.html": [ - "d6c479370bf9a85d893380d24b66c85d56a8bbbc", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-021.html": [ - "125a408f801428d5dc5300d671cfc7a9d07da0f2", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-022.html": [ - "7e7ea219e131c501b3f920523d651c40282216e1", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-023.html": [ - "0a65d779b1dc3d07676f47ba896355ef9d58e2ec", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-024.html": [ - "cfc9a03139be634c610e8d2c92171f0d7b640d26", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-025.html": [ - "52201b710e939a24c590e28e92606b2588742cf9", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-026.html": [ - "56ad4977102cfe2e2947811adf6c81b003985efa", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-027.html": [ - "5db27eb4126e36aa6236860ca70c96da52690ff5", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-028.html": [ - "f6ff1364fdf91ce1cda83209e840c4720b3c0073", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-029.html": [ - "edcd7c2704059e10453a41bcd8f54059cec9fd6b", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-030.html": [ - "303900141fc69e03b69f03e7c5dfd19a77ea7d27", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-031.html": [ - "1fa3b22f712cbdf284405cf2e6ee2ab5e81d1b08", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-032.html": [ - "5a65ec9f9f64b4d8f2ba85d57c7a439adbb47461", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-033.html": [ - "8a71308ac51029f314beac8a7062b832c6929d8f", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-034.html": [ - "8895bd160b565a32a06686d2be38b565df87ac77", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-035.html": [ - "4b08b377661c0aadbc96ae21afed16a786e129c5", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-036.html": [ - "3bceb8f281e3d96316935bb5dff2170178095d9f", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-037.html": [ - "4e3596b1094fcb4647042ad8937d1e9e14c1354b", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-038.html": [ - "18599c98f0f47f7f49409dfed2678e5c6a19bd39", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-039.html": [ - "2ead567fb9c4156f46a985a3c7bfe71671887d4f", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-040.html": [ - "46a84b90ecd47b7729014ce97598f4c7420e87b3", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-041.html": [ - "de1a118639de79435424da9f10986b4e4237a9bb", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-042.html": [ - "fffbe5df868a3e38df8d9c837db705c68bea088a", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-043.html": [ - "f796923f4aed793a6115636ba4aa1089039f49db", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-044.html": [ - "d41f6467a0b4feafc557afaa8b3fbe92f49723aa", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-045.html": [ - "671b6326b0282efd300f9608fa57c257b7eb22b2", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-046.html": [ - "e0532bd98472a9b3ad3afa174d4d03a56f4094f7", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-047.html": [ - "c36abe2a92f21487ef8a815d7396d20b4f7ee524", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-048.html": [ - "fae34ea1a1a440e9046d7cb56ddf2a3969743984", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-049.html": [ - "bf7e2b280f04cb82cb7a5ab4f04c881f3153464e", + "70a208c00168009947249eea1748d756b8c00ba4", "reftest" ], "css/css-transforms/patternTransform/svg-patternTransform-combination-001.html": [ - "addd1c655602d70e9b40886f2116b252db92981e", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-combination-002.html": [ - "72e48731f0625eb7e1c4055fd685ed413c06b7e1", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-combination-003.html": [ - "41f908a541f477bf99347711c00fcfd06a1b2fda", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-001.html": [ - "b3198dce299c972da051837b2a9283e5c1a91e3e", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-002.html": [ - "9032f4a8aea12b10f5767c01b799b529a811e5f7", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-003.html": [ - "cc76d70467bc1703c5c2c3ed049cf0e66f60dfde", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-004.html": [ - "25b7540400c5f78b9f6e4b58d9982a67b30eb828", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-005.html": [ - "8e3fdc7d66fd940778d71cf73b7b73da9e8e21a3", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-ex-unit-006.html": [ - "1fafce57606e28ff3943d787d0c7e51328bd7eac", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-relative-001.html": [ - "c5c9a57926ff1a9a2fa71bfac8c7e66c6858e2cf", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-relative-002.html": [ - "552e93e1eef0670b1c2c745aebd1cfc101b1df20", - "reftest" - ], - "css/css-transforms/patternTransform/svg-patternTransform-relative-003.html": [ - "ef88e465538fee8171c79bff7c1526c012f3b42b", + "730f7691ab2e4a9520a70fc84e4cb4e630389108", "reftest" ], "css/css-transforms/perspective-origin-001.html": [ @@ -394733,98 +391929,10 @@ "dcd4f9aed90695a38185c23c82436e63435c008c", "support" ], - "css/css-transforms/rotate/svg-rotate-3args-001.html": [ - "cc80fd78c63de026eaabbea415aa7c1fc11a0967", - "reftest" - ], "css/css-transforms/rotate/svg-rotate-3args-002.html": [ "5906a2f4041319143b926f75af321b714f66d39b", "reftest" ], - "css/css-transforms/rotate/svg-rotate-3args-003.html": [ - "0c9af8a09c434446401d31b609b3f4ed2387308f", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-004.html": [ - "3636157921b14124aacb9c69a5d8f72ddb893e58", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-005.html": [ - "31154e49378570715860b0645139c0942c7033e3", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-006.html": [ - "95a8160aefc42c4a7bca2a525d84eb1252b605f1", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-007.html": [ - "50f67f873926c10c40601ff74ac9719721068019", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-008.html": [ - "7aba936ce0a2dbf4b39d530448b64a008c02b253", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-009.html": [ - "c5b37734b44424c06ba123ad37045520e7a30da2", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-010.html": [ - "57a6a5124643295fc82da33008fcd1bd09b32bca", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-011.html": [ - "7bbd2055dcc499d9ee55f4af9cfa2bd1e9505580", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-012.html": [ - "d21dd3888750740fe2b0a84da0c08083452fd981", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-013.html": [ - "a5261ddba735c9fe587dce5906f59becb0e00321", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-014.html": [ - "d64ee33f2098c29995a00fc49a3e0f32abd8ad39", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-015.html": [ - "37e2324c75881f78b905c7d251d7cf7bbc12a6b5", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-016.html": [ - "d377306f1c7439795417f1aee300b150ed4aaa4e", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-017.html": [ - "272fc0111fdf8ba4f917711c1a4a3767a14e65bd", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-018.html": [ - "da03e25367dc14775601bf1e1d289501b9db65d1", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-019.html": [ - "d2e67292c04c25dceb9e24d6ecdd896a02b4703c", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-020.html": [ - "aa3189ccbbb6bb8efa423f49b93514d1dfdc8e30", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-021.html": [ - "948e0ae39a4b59f91409a9964bceda3fc566ad43", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-022.html": [ - "b49d9580a8eca0c8e0c23254a4cc4ef1d9494505", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-3args-023.html": [ - "533fe6b653f255dea3cebaa27b6a83edb4022b74", - "reftest" - ], "css/css-transforms/rotate/svg-rotate-3args-invalid-001.html": [ "9bfab69b41f422cdb748cdf139f55d6cbc2f677a", "reftest" @@ -394849,202 +391957,34 @@ "fb5705380eb66784962537b79231f0bf7ea5d2b5", "reftest" ], - "css/css-transforms/rotate/svg-rotate-angle-45-002.html": [ - "786861738ff3072176bf98e7f30432188e5dfbf8", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-003.html": [ - "dafb5a5c7d08c69bb4d255ba230f11b172bcc311", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-004.html": [ - "7b4fffa012501426fcd0b76c2cc1760b0f35f914", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-005.html": [ - "3e4b69e3a0e163143b903ae4385d93f0adc45e54", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-006.html": [ - "f537221ad87bf1bafe1a18468aee4e808ae81e25", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-007.html": [ - "9f49983476066290c79a8facf22199246e044c43", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-008.html": [ - "8925d8c4203fc06d0b044de747312f8894f94606", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-009.html": [ - "c1fe86b1723512e41cb1327c15aa1c5c29bbadf8", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-010.html": [ - "8251e3ee91643f9ecab5793c8e47fcf2a7a4bd11", - "reftest" - ], "css/css-transforms/rotate/svg-rotate-angle-45-011.html": [ "f8511aeb9400535eaad72976520efa328536d516", "reftest" ], - "css/css-transforms/rotate/svg-rotate-angle-45-012.html": [ - "8a39a34b3474786b2302072bd17615834ddef2e1", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-013.html": [ - "d44d25b64000f8cfa5b2823ac08c62b36ff18dce", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-014.html": [ - "2110205dd17c1c1e69ec94c9f7055161448f3a33", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-015.html": [ - "6c80876305b1d29cc332abb19039236601f5c394", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-016.html": [ - "a4946510f7cef58a15b4a3f6db4fe4ec661e7765", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-017.html": [ - "9bdf8f71e3f6245dea4faaa4d22d19caae00a513", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-018.html": [ - "60b1c30d9abfabdad71eac593aa3117164e8d36f", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-019.html": [ - "7ef1e6d86ddc61cf9ed80c9673a60c176642fb04", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-020.html": [ - "2204e186053a917eefb523ded9a32e31529c6d6f", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-021.html": [ - "819359a6e91465fa32625974a2c13f35deed355b", - "reftest" - ], "css/css-transforms/rotate/svg-rotate-angle-45-022.html": [ - "7820b502af4dbb6d05d8823a93d10788627e7ff7", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-023.html": [ - "5bb3131e193860523b2e0b6f8ddadd3ea6f74143", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-024.html": [ - "253886b9f03df6b93bffa2d58bffb6fd9ffbc71c", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-45-025.html": [ - "03414eb9ed55edee7d9e5b71303d2e8c1244b76c", + "4fc5300631b375b4b50ded3ca2c375075ff80fcb", "reftest" ], "css/css-transforms/rotate/svg-rotate-angle-90-001.html": [ "87a1e774ccd19a22145fe73934eb2f0658873922", "reftest" ], - "css/css-transforms/rotate/svg-rotate-angle-90-002.html": [ - "2c79bc4301165df9cd3417a9dbd47c33cbf13af7", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-003.html": [ - "37ed4001f8df0f1bf65b5cac96385b9c9652f304", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-004.html": [ - "d527a431f72041e254bc803701de8275f7bc2807", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-005.html": [ - "5ca488f4d65c1ea8358065094d061ae3e6b2b85a", - "reftest" - ], "css/css-transforms/rotate/svg-rotate-angle-90-006.html": [ "0988c8a59f8ef9eba5f14b6f9bd96dfe24ca7856", "reftest" ], - "css/css-transforms/rotate/svg-rotate-angle-90-007.html": [ - "f217faeb14e2a895e5ae91a642a7c593dd41728f", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-008.html": [ - "1bd60f73a82c9515f57b54f8f52e299c765355ae", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-009.html": [ - "2647e055b04009ee473c7ce5e5b04b25b6e0bc23", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-010.html": [ - "52fe2e3fcb6e6524bd4d8f008fe7db2b5e10afbd", - "reftest" - ], "css/css-transforms/rotate/svg-rotate-angle-90-011.html": [ "97abe6536fbd5f98a8ee27c0de3fc8b9ccb8495a", "reftest" ], - "css/css-transforms/rotate/svg-rotate-angle-90-012.html": [ - "8e51fa99a61d158480bc620602095ace263f51a8", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-013.html": [ - "bdb3bd1b14ba98f36ee46b32397b397f37fa5cb6", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-014.html": [ - "b5b944d26fc1013f04a252da2c67b8105b24cdb0", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-015.html": [ - "0f64af4c081f146e04660e7cfdabc6a13cbec6dd", - "reftest" - ], "css/css-transforms/rotate/svg-rotate-angle-90-016.html": [ "8e92a2b7ae95ee69671e8c2acca187a79eed99c2", "reftest" ], - "css/css-transforms/rotate/svg-rotate-angle-90-017.html": [ - "8d66a226114ccb5193bb0410d87b66a08cfaa8c2", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-018.html": [ - "6d786b5cdc6878baf9bbda53f5dec2639fa550fc", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-019.html": [ - "0015eb0c0112608ff9ceecaa74c87dff8afe86d9", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-020.html": [ - "4b86b752706d3896b616b0a06cd3982eccc3e841", - "reftest" - ], "css/css-transforms/rotate/svg-rotate-angle-90-021.html": [ "963ef17debea36292ba51e330e12400227c5af1a", "reftest" ], - "css/css-transforms/rotate/svg-rotate-angle-90-022.html": [ - "45e1c12f015505412d8e739dcbf3cdad8118326a", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-023.html": [ - "fb543d31f30e4ca819cdcf5425a2365bfb5fd894", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-024.html": [ - "ef2693411de7bbb4bf087af91e0fa9952ff5d268", - "reftest" - ], - "css/css-transforms/rotate/svg-rotate-angle-90-025.html": [ - "863b89ea6ac49878d65a5ee75c99dfa06240abb8", - "reftest" - ], "css/css-transforms/rotateY-180deg-with-overflow-scroll-ref.html": [ "71b94d146b9547262c406aed229114e1e5b708cd", "support" @@ -395109,10 +392049,6 @@ "d9cae0c78d6e3fb135d5723e528f5e34144a86a7", "reftest" ], - "css/css-transforms/scale/svg-scale-005.html": [ - "e40f629f4743f47f6f842774fd9413148a702c85", - "reftest" - ], "css/css-transforms/scale/svg-scale-006.html": [ "0c62f81d3f3cad80e9cb5895ffd5f8f91e67e36a", "reftest" @@ -395161,46 +392097,6 @@ "6da4d34a0755fcc0ccb90ee46b51b392b2a5ebc7", "reftest" ], - "css/css-transforms/scale/svg-scalex-001.html": [ - "b7e42da5071c2fd9cd9b74e15a4952431e895b59", - "reftest" - ], - "css/css-transforms/scale/svg-scalex-002.html": [ - "54ecb064717a474f2ae26ef5d5693cb96b6ee0e3", - "reftest" - ], - "css/css-transforms/scale/svg-scalex-003.html": [ - "e62bbc357f0d2d304050e7382d00ce5e48c28a28", - "reftest" - ], - "css/css-transforms/scale/svg-scalex-004.html": [ - "bf80e1a19ecb2a4971277c2a81a9ea410c269dd3", - "reftest" - ], - "css/css-transforms/scale/svg-scalex-005.html": [ - "dc5e4354d9604bedbbd3dd48ae5545745650748a", - "reftest" - ], - "css/css-transforms/scale/svg-scaley-001.html": [ - "93825b2298c9b498967a0017900420c7c098d852", - "reftest" - ], - "css/css-transforms/scale/svg-scaley-002.html": [ - "f9d4ccd25d5ab27d042b909b5abec2ef6916042b", - "reftest" - ], - "css/css-transforms/scale/svg-scaley-003.html": [ - "418164d9eb39feac3f9bb9181d3b7873363ef362", - "reftest" - ], - "css/css-transforms/scale/svg-scaley-004.html": [ - "7e2e50aaa15bd066e17aa36ac9a8867c7c0dba61", - "reftest" - ], - "css/css-transforms/scale/svg-scaley-005.html": [ - "edb76d34b5d15e72beeca192e09b795a650fd074", - "reftest" - ], "css/css-transforms/scalex-ref.html": [ "72d37587bb5b8fd4f13ea4f6ab75eefe0112c94b", "support" @@ -396114,27 +393010,27 @@ "support" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-001.html": [ - "5267aef8c741a51f47c2c96e0059f811c8e4b4d5", + "0695de5c32a61f3861894d0cc53d00cd44d3c4d8", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-002.html": [ - "7b5bf2723262f751a0484a8327b5bd94c23156f8", + "948909c9b01fe350c56970f2ea54b6d508ff15b4", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-003.html": [ - "fe21d34a8fce20cddf952f7f49faaddfba8f2dac", + "916fc2f1ddc4674d7ecc813582c60a24d5c38781", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-004.html": [ - "73877c852c0e97491a999feed5f2084766cc7915", + "cceb47fcadbbb7e74f7908f1037134bed4ee6cd8", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-005.html": [ - "062b7359468b12fea99caf16ff2eb8e8494a8197", + "faef67c0b77a1e3e9e6866fab34b40a8b208afff", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-006.html": [ - "747e8bbd7d8f6bd6631fca673d301200ed9e7ba2", + "b52a0d597ba1e8bc63f40cb6f2fe179d00e87ee3", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-007.html": [ @@ -396142,19 +393038,19 @@ "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-008.html": [ - "1ce518bb3ec2f6155281787fd61ff6196a8ef869", + "22f5af766968a57964d100d9990b76fca1b137b8", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-009.html": [ - "2f730effa0a1dfd922ad1c6ac80be91477403883", + "9e91d4885641c32d3aee7da3fdb66887c0bcb85f", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-010.html": [ - "1683e17db2f8a2c880b4ca350909cda7fc117c31", + "3ab02766ea5d8f7780fc3970af2ad4f0f68fc4e7", "reftest" ], "css/css-transforms/transform-list-separation/svg-transform-list-separations-011.html": [ - "7edc86a03d3ab523f6db7d4f98b8afd6a5a28fca", + "726469350e272c227a7c1633bb9cad6761e694fb", "reftest" ], "css/css-transforms/transform-matrix-001-ref.html": [ @@ -397977,502 +394873,6 @@ "39b5f91d8b3cb2c2eadf6bee7ca1f56f2ce0a4ca", "reftest" ], - "css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html": [ - "d4d62c62863051e742f249b0f10a60ba5f7f4061", - "support" - ], - "css/css-transforms/translateX/reference/svg-translatex-ref.html": [ - "8f8020e5354a82dac3c7a4554778caf6aa93e4f5", - "support" - ], - "css/css-transforms/translateX/svg-translatex-001.html": [ - "b4f1608b45899f318802d4b50d88683875d82599", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-002.html": [ - "fa0ad7b820323167e0d27cdcc8d15e861695df1a", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-003.html": [ - "ec189e4eac4550b544a684e7f14ed97b04e84bf7", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-004.html": [ - "0af09da1b9414b71b581f8efd9ee27157ab1a32c", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-005.html": [ - "b587d5f33a5ee812273b057afd159276f9e20a64", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-006.html": [ - "f02d4b551cbc686e9333fe7eafb1c5a6f629076a", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-007.html": [ - "8b3bac41e2d0c43041078f7b07c3ea1e874a6203", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-008.html": [ - "78406b181f06f3ddac2e4519875fffddbe9456e9", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-009.html": [ - "5ac6d29e167188431f4f0f9a14eddba0c44323c5", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-010.html": [ - "13b95d4ab24b19399ae6424502c33d35ca8ebe38", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-011.html": [ - "91c6407b7400552d56cd550a203a97ba492156f2", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-012.html": [ - "fbc0b448e8b086df1b186e4cfd3a9ff0474981c0", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-013.html": [ - "b60ce70946dc7383209b346b39a12aa83ef7fd70", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-014.html": [ - "eaa98f409b1877452c850964fdcb3cebc1ec62d1", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-015.html": [ - "e2e877822ba175b58599a182f14381d6fc558318", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-016.html": [ - "fca43b0c1ddf23cc108e4ec43af2c43d8a531beb", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-017.html": [ - "1b374d0f255ff1668d4c541d9e981dfc3c21f224", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-018.html": [ - "7e38bcd54162a116606689c494138a08b14f53f1", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-019.html": [ - "863357d6e2a0e21441366d011ae6b4206704191f", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-020.html": [ - "2978ed3cd74312834b3f47cfdb3a1b322d3662db", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-021.html": [ - "c6e11cfe68a3538048bb69a05cf017b068a5a6d0", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-022.html": [ - "5256459bb52318e8b8b0bb31d3f9e42dff6c3b4c", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-023.html": [ - "3f699bec5e822fd3f76e192cc2e743edaf6d5f31", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-024.html": [ - "9be6a5d131e5fa988f2fe08fbc3f17144831862e", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-025.html": [ - "cded2bea09630624a9c10f20f4de490c70cfbc0e", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-026.html": [ - "0af2a64a8fa889fc28e9c1b995743fa3b46db5cc", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-027.html": [ - "b1138d4bc48926230bdb96cb1bb97281368a3ccb", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-028.html": [ - "3b4aefa59362fdbdeae28dd99f4fdc4cba26a1eb", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-029.html": [ - "66e0d46149c1c716f548c2bb2cb94316c373fe01", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-030.html": [ - "9c307b1ad133ad1a552354a6a006e7f790f551ee", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-031.html": [ - "8022e5d402156f96374ac1a6ce961bd164b80e8c", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-032.html": [ - "11e720082f95fb60c9b045ee853ec2f0cadeab98", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-033.html": [ - "66e97cb59c95882f713a1338f067b353bd76bd1d", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-034.html": [ - "de822156889a461bd616568006360a39cc8b1af3", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-035.html": [ - "78126b00149c5235b908c63d6a874f72f320f02d", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-036.html": [ - "2a091727367f45f7b116d58a17cb7e10c0d5aa95", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-037.html": [ - "9ecad21cb6e5e6e236c149e6a11912f1d8719b64", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-038.html": [ - "5fe878bb7aa27f29feaf79979040118400f62472", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-039.html": [ - "a74b935c811036b8b5e0f51df3a6ba3e7af12f17", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-040.html": [ - "eb825e6da1608f6086409478923ae208d87399e7", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-041.html": [ - "23c3ab5452693c146c7282ccfc26772f5fb6ccd2", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-042.html": [ - "092099f6a8008dbdd211587b165707d8f9046c3c", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-043.html": [ - "0f5ee9452b55904fe54299d6de382141c86ac441", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-044.html": [ - "a7d636997c09490e21b15991b61c6e4f96ede777", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-045.html": [ - "2eff68c90719daf48f087c668c59eef5d07c7bc4", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-046.html": [ - "84a39f7f1ba51d5aaa9d13b338f324e0324e0670", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-047.html": [ - "fb44dfaa9d2c9e9aa20e81c4afb675a789d0f160", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-048.html": [ - "5c3fbcbec9c4164dc13e9c67f2c0cc09519e3be9", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-combination-001.html": [ - "b3c1bbd3c17785231b96947d042c42f1d7e0fca4", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-combination-002.html": [ - "09e992cbf99dd96367dc8fe46202f99d07fcdb66", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-combination-003.html": [ - "58f440e60cb29be3090c3a9ccc2efe76414aedf3", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-combination-004.html": [ - "b528b07ec945a7ed0541d5266914d9316f887daa", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-001.html": [ - "76b330a3a5e82dcdbd9e461f11817c037ce7fc94", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-002.html": [ - "d00eab361f85aeffad7d88b80cd158b014a72359", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-003.html": [ - "2c6b52b5368723f79f392dfc20d1c9204f5bae92", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-004.html": [ - "42fa0b446b7e2b0370db9eb83996d63fd5ab50c0", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-005.html": [ - "0416979db366228d1cfea310e0f6b80059218c87", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-ex-unit-006.html": [ - "a972bcbbdaa886ca199b5b82356d0b732e68a66e", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-relative-001.html": [ - "95699556f97ae6ad09770e1984dfb036277df102", - "reftest" - ], - "css/css-transforms/translateX/svg-translatex-relative-002.html": [ - "2823b33eee10676369d481115d242f6a703cad2b", - "reftest" - ], - "css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html": [ - "5f1a9f312a6716b48d13872fd3d3d58c14caeb6f", - "support" - ], - "css/css-transforms/translateY/reference/svg-translatey-ref.html": [ - "d6144b771c9b78e7ae0367f241a19597af5b9793", - "support" - ], - "css/css-transforms/translateY/svg-translatey-001.html": [ - "fe579ff4bce66e8eccea5754d8fe8ea1b945bf2c", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-002.html": [ - "1f5c94ca4e1487d76fd627a3cb7d9b2554f65334", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-003.html": [ - "c74bf9ad3792341a423e6e1b2626d11cfb984321", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-004.html": [ - "6a7b220257eb2b756b4682951c6f9d545737c639", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-005.html": [ - "00556111e2f1bdda2d278652ce5e1e317fdb7e89", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-006.html": [ - "bb8cdca99775e5c7a3093593935a57cf871f93ec", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-007.html": [ - "5eb8d326f92272c08979d967e6c89bcd1c8b9192", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-008.html": [ - "939510f2bb53e6ada9586b51bc205c8fbe940997", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-009.html": [ - "fbac351383c1317b082d8aed497317c0b77483c2", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-010.html": [ - "fc130de2004d9bf8bb4cf0604e010aff88f19dfc", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-011.html": [ - "c050228a0314aab80f5a4f8823933da2986cb00d", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-012.html": [ - "282900f038e5c8f1003f5ee8492d8ba28109b717", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-013.html": [ - "f0d148c9428b19c09c660276537282256d7855c4", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-014.html": [ - "7d2ad7bc369d4e1b7b60b45d30666714c1a6e60b", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-015.html": [ - "5a497fd5c6473a8717c26bf719857522af7f6675", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-016.html": [ - "671d7ded4cca5b7c45407baed34930c47c7c72eb", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-017.html": [ - "c726caecd82e78c1eceb99cb551ae2213619bed0", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-018.html": [ - "2af490adefb17e0ddd8429bc388ab97161111202", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-019.html": [ - "ae2a8019d08fdb2ba373611e15d0d3fa86210a04", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-020.html": [ - "efb90281ff922a0b2ef4d338182b2f5510aa0209", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-021.html": [ - "b371de865f87c6b4ec98bf935b36a146687c1b8e", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-022.html": [ - "18a33b0b3164e4f2936983e5ee11d49a31315396", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-023.html": [ - "d3ea77422cf6deb06a95789c26f850502eae1746", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-024.html": [ - "e07a210cf2de6c41310b8390aa7fafbd619720e6", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-025.html": [ - "f7a46e41be6ddb69a96f3c0557888520a024245f", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-026.html": [ - "8b6b39e96c427c425e463376f59f7445e67e4eca", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-027.html": [ - "32d21a7aae7d77ffbfd865fdc9f302ff911a12c0", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-028.html": [ - "5e1eadf623d86bc8dc19341bd41e04f8a693fab9", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-029.html": [ - "a363d48ffad1b1e275d49442b48bf0b58002fe0c", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-030.html": [ - "bb383a92564a1dad8e746f3317c040e316c51ce7", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-031.html": [ - "7600e434458dbfe6116b096ac626893b82f8414c", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-032.html": [ - "a33442cdc38d072bec7c9461246bfded148db63a", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-033.html": [ - "0c5701a725428fbef5f1114d7d22e8d1d9be16ec", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-034.html": [ - "03240828b100a610dfc0875bda937fbf492a1fde", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-035.html": [ - "49f2125abaf028a9e3c130b828038d8aa9c9bb46", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-036.html": [ - "aa708f9a601c299129b14cb309fc880a1834b531", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-037.html": [ - "619795a53ae7e2ac7c9bd3dd6c7428b499d4e41f", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-038.html": [ - "06cf7a6e725f6a398c3121a861d97103ed71ad28", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-039.html": [ - "5fe03fe9278381f44aacafb6c74c8818ff60e390", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-040.html": [ - "c3504b732fe68407e9790c6224e4033007908bc7", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-041.html": [ - "10f8cedc0145e25684cf6f6dc9dca28b4434c6b9", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-042.html": [ - "464352a7330d794d9f37341b643a76892544c172", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-043.html": [ - "9e46214115b1f3b3d0e97a5fca1333b31e3363fa", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-044.html": [ - "3d89bee940e2293f690f9e9bb14da269e7bc79b7", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-045.html": [ - "91bbd0f6449ad3dc54c78a72c04543302a475038", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-046.html": [ - "3a92461427eeb2f2b68f6bdf4b566b31d8dedfe8", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-047.html": [ - "cf2abc80e7cdc023016aa95e1cde1da3d35a3db7", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-048.html": [ - "16bf16a15d804e68b488992f1431c174b27a59fa", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-combination-001.html": [ - "09e907c6aed04c76a8632d8125e5ab327cac0ab7", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-combination-002.html": [ - "2d83c9a8eafe4faea4b4c5dc9fb37eb50a76f2b1", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-combination-003.html": [ - "fd398866f063ab25df2a1c37da0dc8683f059788", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-combination-004.html": [ - "72081cccf859c6049d5c69d97a0492e32e507040", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-001.html": [ - "e4fb76f822afe368528b2731cc3411e52c7f9716", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-002.html": [ - "3cfbe2505412223f66f4f8f6cb0e798f758fbdaf", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-003.html": [ - "ac71f7707c3a44c447f814c1a9ea08be6f6dea09", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-004.html": [ - "9ce9821222d1f0fe9208e7b3e0016a4865c861cc", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-005.html": [ - "7bb9608823508d0771aec451f8dbdc145aa7843a", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-ex-unit-006.html": [ - "728c8d265a5131f1319b3921e1d1f8b93eddb60b", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-relative-001.html": [ - "078514ffebdadd7570261c10837f357b318af8c7", - "reftest" - ], - "css/css-transforms/translateY/svg-translatey-relative-002.html": [ - "aa79558bdee9e6bc41bd1c72d099c5d2cd3bab8b", - "reftest" - ], "css/css-transforms/transofrmed-preserve-3d-1.html": [ "b7e1f905bb8a680fba133bcd0224e44ea799e9c1", "reftest" @@ -398661,10 +395061,6 @@ "8d0360a8ecf7a37b81acb10917b63abc7c9543cc", "testharness" ], - "css/css-transitions/idlharness-expected.txt": [ - "3c9dbb02792fda31a8d3d92cda284d39e8876fa4", - "support" - ], "css/css-transitions/idlharness.html": [ "4cc7ee50eb4915fcf95843f7eeee266abfa7b81a", "testharness" @@ -400169,10 +396565,6 @@ "daf380389eb7a84a2d61be5bf94d5767259e5e4e", "testharness" ], - "css/css-typed-om/the-stylepropertymap/properties/font-optical-sizing-expected.txt": [ - "f0f962fa4f5afa0b55ef6122d9927a50f064b672", - "support" - ], "css/css-typed-om/the-stylepropertymap/properties/font-optical-sizing.html": [ "0018ef1390b6f5c0b7c9ebc22ec1ebd496b94220", "testharness" @@ -407069,6 +403461,14 @@ "a02095a546792f539910ed1f5719236ec92870dc", "reftest" ], + "css/css-writing-modes/direction-upright-001.html": [ + "c9999951ab2df17b723b6c2da37473dbbc3c91cb", + "reftest" + ], + "css/css-writing-modes/direction-upright-002.html": [ + "daa76c8ea61ceb41599a3bbb834278b59c347f72", + "reftest" + ], "css/css-writing-modes/direction-vlr-003-ref.xht": [ "f01f983898249c97ced81cff69f54e4d9042eef5", "support" @@ -407465,8 +403865,12 @@ "a3aad3ac175b56134a0e14084a4649e4721709ea", "reftest" ], + "css/css-writing-modes/inline-block-alignment-007-ref.xht": [ + "d5bb56da8e9c5ad7e628ca49c4b467a819186f23", + "support" + ], "css/css-writing-modes/inline-block-alignment-007.xht": [ - "76d7f79ecb85b2f81a821291bb473f74fd8be678", + "369141445463b3c0ecae67aa60926bdb6d51880a", "reftest" ], "css/css-writing-modes/inline-block-alignment-orthogonal-vlr-003.xht": [ @@ -408577,6 +404981,14 @@ "dcbe650864c7a1be62a44988312a6278c419c84e", "support" ], + "css/css-writing-modes/reference/direction-upright-001.html": [ + "b8768ba772458287f5dfcc1d1a9daff03abf673e", + "support" + ], + "css/css-writing-modes/reference/direction-upright-002.html": [ + "eac7ca9af922f56ff8e013467f49b8e456d3419c", + "support" + ], "css/css-writing-modes/reference/full-width-001-horizontal-notref.html": [ "2666f8236a77615c3381c31279c8b03e0f224803", "support" @@ -411649,6 +408061,10 @@ "c88b616986511b3220449c03421e827be0d2e534", "testharness" ], + "css/cssom-view/offsetTopLeft-border-box.html": [ + "8cabf6478f7afc158617914776548db528c3a7f5", + "testharness" + ], "css/cssom-view/offsetTopLeft-empty-inline-offset.html": [ "85abbb7c01cc95f46aeffb166fc8cd34669c85aa", "testharness" @@ -412390,7 +408806,7 @@ "testharness" ], "css/cssom/font-shorthand-serialization.html": [ - "6f6834a7509d0f58d37f40d6a6e45226f2e54092", + "29082f83eaf75a0831e5175b8b1217c4ecf4ebcd", "testharness" ], "css/cssom/getComputedStyle-detached-subtree-expected.txt": [ @@ -414326,7 +410742,7 @@ "testharness" ], "css/motion/animation/offset-interpolation.html": [ - "0d1ba1c8875ca1d76e52a01a655037cad6f8eff9", + "04f4d4b3bd78f95939c34aa098b85a7947d4fcbd", "testharness" ], "css/motion/animation/offset-path-interpolation-001.html": [ @@ -414437,12 +410853,104 @@ "653dd8b10516a08042a40a7dbdb8b31477a42df7", "support" ], - "css/motion/offset-path-ray-ref.html": [ - "fde97bd6b15cca64c06cd305822ad87dc008410f", + "css/motion/offset-path-ray-001-ref.html": [ + "63c0a2ea883b4e026c9f336a0fff75045514cd82", "support" ], - "css/motion/offset-path-ray.html": [ - "6c39e7b8f4cfafe05c07d166eb65570432912b7a", + "css/motion/offset-path-ray-001.html": [ + "26b3b11c4e25c1d0df8ebf912109e3f9af8ce98a", + "reftest" + ], + "css/motion/offset-path-ray-002.html": [ + "7c023657786ba73f9c905ba1290c773a9a39711c", + "reftest" + ], + "css/motion/offset-path-ray-003-ref.html": [ + "7261167cd7f0d66153eb97398b9d43d8ff7d9a3f", + "support" + ], + "css/motion/offset-path-ray-003.html": [ + "4dc27c47823294a7982470b0fed6abb58811460a", + "reftest" + ], + "css/motion/offset-path-ray-004.html": [ + "e6bf08f0a615edb4ed22fd80f7ff43119759c5bb", + "reftest" + ], + "css/motion/offset-path-ray-005-ref.html": [ + "525d747053c1e460c3d1e3b8aead48e823594999", + "support" + ], + "css/motion/offset-path-ray-005.html": [ + "a1aa8e110ef612127f6fdaf3c0d693df1db772f4", + "reftest" + ], + "css/motion/offset-path-ray-006.html": [ + "dbbd12bef0dcda91049e079dbbd4d59e0a7301b6", + "reftest" + ], + "css/motion/offset-path-ray-007-ref.html": [ + "a48d9f0a2a046c042aad1d484adc90a393b0ea3e", + "support" + ], + "css/motion/offset-path-ray-007.html": [ + "1e75771f48ed5f3fdffdaf5b7691e0e3f7596fcd", + "reftest" + ], + "css/motion/offset-path-ray-008-ref.html": [ + "2c3720c44ce8fe305ad384167daf1de163b3301f", + "support" + ], + "css/motion/offset-path-ray-008.html": [ + "97d9cfb274cdc618743561b35d7b90c85978bd03", + "reftest" + ], + "css/motion/offset-path-ray-009-ref.html": [ + "95b54368759342f3cf0611d256e06f9534b5562e", + "support" + ], + "css/motion/offset-path-ray-009.html": [ + "c4986eb5f3bc91bd2e89654e9cd2c0a6986633a3", + "reftest" + ], + "css/motion/offset-path-ray-contain-001-ref.html": [ + "24a823f9ca37c1edd1006fe8645c4c72791a4e11", + "support" + ], + "css/motion/offset-path-ray-contain-001.html": [ + "83e169298fa9f582e6c052c760a37a3b4cd66964", + "reftest" + ], + "css/motion/offset-path-ray-contain-002-ref.html": [ + "92ccb13af86a672ddc085809cbe36815a697e133", + "support" + ], + "css/motion/offset-path-ray-contain-002.html": [ + "db7710cb4386bcee22bd46039deb4b952ae69c40", + "reftest" + ], + "css/motion/offset-path-ray-contain-003-ref.html": [ + "3ad660eb2f2a2114d99a6d91a7a57146f6fece44", + "support" + ], + "css/motion/offset-path-ray-contain-003.html": [ + "08705ad9459e82413bf6b08faf8aff96a9495f83", + "reftest" + ], + "css/motion/offset-path-ray-contain-004-ref.html": [ + "38b0d44fb1f0026e39c5201852faed50e77d0a66", + "support" + ], + "css/motion/offset-path-ray-contain-004.html": [ + "9848259133f6d5557787e9bf8f5cf29a0284f5b4", + "reftest" + ], + "css/motion/offset-path-ray-contain-005-ref.html": [ + "c1dafc477d3b1fd6f3bfda1ea198ee8a6245cb0f", + "support" + ], + "css/motion/offset-path-ray-contain-005.html": [ + "0ec0c25fb887e1087797cc7fa11f698a150dbfad", "reftest" ], "css/motion/offset-path-serialization.html": [ @@ -423470,7 +419978,7 @@ "testharness" ], "dom/nodes/aria-element-reflection.tentative.html": [ - "974727f92aa315d727295fcf7b650bc24c507aab", + "848828810f160d5ac01f11bf41b27230b9738800", "testharness" ], "dom/nodes/attributes.html": [ @@ -430877,6 +427385,10 @@ "d612b1e06dbefef308a30ea8eccf0a3397ee5469", "support" ], + "fonts/math/operators.woff": [ + "bb747e06ba609d64d9ef6a583d43df25c00a6941", + "support" + ], "fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff": [ "6401070d44fed8d27c688a931d277bce2ef71517", "support" @@ -434878,7 +431390,7 @@ "support" ], "html/cross-origin-embedder-policy/require-corp.https.html": [ - "0bd6aab729533ba90ffaefccd4ea06e192b1e6b7", + "5f01022338c248b7a053f3b4918a0c3a564008a0", "testharness" ], "html/cross-origin-embedder-policy/require-corp.https.html.headers": [ @@ -435370,7 +431882,7 @@ "support" ], "html/dom/elements-forms.js": [ - "051bc2087f31558e009ab9c493dc77deed38c9c8", + "448a72f5ed60704c489ae7aace2a614c8a7a3831", "support" ], "html/dom/elements-grouping.js": [ @@ -435462,7 +431974,7 @@ "testharness" ], "html/dom/elements/global-attributes/dataset-set.html": [ - "722b17977e412a3c504fe708841ff273cf76e9e0", + "dbce5de309a1d0b4c70305b13540851a67c0ce91", "testharness" ], "html/dom/elements/global-attributes/dataset.html": [ @@ -436174,11 +432686,11 @@ "testharness" ], "html/dom/elements/the-innertext-idl-attribute/getter-expected.txt": [ - "7672a3766390a7e22580958d6359c5c994b7f1d3", + "5b67ab7687190566603c57f6471178a345faf075", "support" ], "html/dom/elements/the-innertext-idl-attribute/getter-tests.js": [ - "6e663ba943163244539d0d88eb78c46d2ad78244", + "34f3b0fa9c619fafb24cc14af6fef13e92891357", "support" ], "html/dom/elements/the-innertext-idl-attribute/getter.html": [ @@ -436210,7 +432722,7 @@ "testharness" ], "html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt": [ - "234075d837628a57d387b1c9527d6f1851c8561f", + "862e87da6505c90d8079255be9c3ce5fbba5a2d3", "support" ], "html/dom/idlharness.https_include=(Document_Window)-expected.txt": [ @@ -436218,7 +432730,7 @@ "support" ], "html/dom/idlharness.https_include=HTML._-expected.txt": [ - "579bca656dd4288b90a6f9d14bdb4e2759df5c39", + "6c354e7c79dfdca17f716eb6f3c865329880b609", "support" ], "html/dom/idlharness.worker-expected.txt": [ @@ -436258,7 +432770,7 @@ "support" ], "html/dom/reflection-embedded-expected.txt": [ - "1b843e36f6f3bc40d535adf15a42b5f600f8f5d1", + "969c1d2baa53cd695fff85a45bc2942d02426439", "support" ], "html/dom/reflection-embedded.html": [ @@ -436274,7 +432786,7 @@ "testharness" ], "html/dom/reflection-metadata-expected.txt": [ - "31c3689bc07d47a7b2326f5c5701f905d94bdf92", + "69f32cdec37f528dcb696d5f52a83a252bb6ec9e", "support" ], "html/dom/reflection-metadata.html": [ @@ -436282,7 +432794,7 @@ "testharness" ], "html/dom/reflection-misc-expected.txt": [ - "62173d5c95835b9b3c0ca767a4a7db37fc17cc7c", + "6456861b66798e7f04897ab4488769bba93b20a3", "support" ], "html/dom/reflection-misc.html": [ @@ -436306,7 +432818,7 @@ "testharness" ], "html/dom/reflection-text-expected.txt": [ - "fb690c53523b6c4ac7d6536da472dd83ed3db306", + "777c18aaa450b41e16bab89389d01d1ff70b878b", "support" ], "html/dom/reflection-text.html": [ @@ -436314,7 +432826,7 @@ "testharness" ], "html/dom/reflection.js": [ - "5209762660bb4650e09fc390da3e7575a9af3e5c", + "fca9e43f245a9796982685c66ef8ee892d6cd7eb", "support" ], "html/dom/resources/self-origin-subframe.html": [ @@ -445589,6 +442101,10 @@ "82798eaa84f533cdc675c653ef22fcb12b52137e", "testharness" ], + "html/semantics/forms/autofocus/autofocus-in-not-fully-active-document.html": [ + "a26a44dbfb6e8c3eb81c7b216f9aa1c0da8bb9ed", + "testharness" + ], "html/semantics/forms/autofocus/autofocus-on-stable-document.html": [ "47e3e3fd0abdc93e8447c099314935f8cdc31c42", "testharness" @@ -445633,6 +442149,10 @@ "afd5601a523ff0a1d60d37b171b2098a38600ace", "support" ], + "html/semantics/forms/autofocus/resources/child-iframe.html": [ + "2645a180e4866ed9d1f0a107fc912d53b7437247", + "support" + ], "html/semantics/forms/autofocus/resources/erase-first.css": [ "bbbcf799393fc047dae6d47836c3696868df8fb7", "support" @@ -445641,6 +442161,10 @@ "985cba41494919525031081d236e4409aace453c", "support" ], + "html/semantics/forms/autofocus/resources/grand-child-autofocus.html": [ + "88be6e0b04a99b8477925107e1f534024f021b5e", + "support" + ], "html/semantics/forms/autofocus/resources/moving-autofocus-to-parent.html": [ "fc6c298a46e376cf45089f168cf841cab59ffd5c", "support" @@ -445649,6 +442173,10 @@ "0eeb5a9f0adf1d09959227241cd71fe32ebb485c", "support" ], + "html/semantics/forms/autofocus/same-origin-autofocus.html": [ + "9cfcdb925cf16cc883ac37f126dc40673066a8b0", + "testharness" + ], "html/semantics/forms/autofocus/skip-another-top-level-browsing-context.html": [ "d392b903f075276a03189207e57d789608523de1", "testharness" @@ -445662,19 +442190,15 @@ "testharness" ], "html/semantics/forms/autofocus/skip-not-fully-active.html": [ - "32008b3019e905488c35ea432de396a2641cb61a", + "fa5b608d050de2b59e4f55bf9490d503844b1bcc", "testharness" ], "html/semantics/forms/autofocus/spin-by-blocking-style-sheet.html": [ "22a4c3573cccf909d3a5675db2aab97a4f366bc0", "testharness" ], - "html/semantics/forms/autofocus/supported-elements-expected.txt": [ - "ad7ebdf4030bb18050572fe331813b401393d905", - "support" - ], "html/semantics/forms/autofocus/supported-elements.html": [ - "398577e7d51edf10ea2571ec4e220394208f6931", + "761936715a3060ba4c6cca1068612c21c465ea02", "testharness" ], "html/semantics/forms/autofocus/update-the-rendering.html": [ @@ -448914,7 +445438,7 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html": [ - "2a879f38253eba6be27221e20dc7fb87dc1c6b95", + "fb512b4b30b2e9abfa8cf0a761153444ad931c54", "testharness" ], "html/semantics/scripting-1/the-script-element/module/nested-missing-export.js": [ @@ -448926,23 +445450,31 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/module/referrer-no-referrer.sub.html": [ - "e640fe468988b33bd992a07a195b7902c4d65d7a", + "e50c7b525b495dd8cb1ce3540396a14aecec86af", "testharness" ], + "html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub-expected.txt": [ + "cd990f903e1f91b67aff18d537ca62d3ab58ab9a", + "support" + ], "html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html": [ - "1ca6b1dfda33e5a5dd7fa2b423979cbee8844a31", + "3623ac2ccb2c5daa2a9f1294c1279083ddaa8ad5", "testharness" ], "html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html": [ - "a554fb4b0c465136d636839eb96b463bec4f5c2b", + "f512982a451b1d24d47965437162213dff919ec5", "testharness" ], + "html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub-expected.txt": [ + "6720439ba95b710d893477cdf946710ab7a38abb", + "support" + ], "html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html": [ - "1d470e668992ad546f721138441a80926dd630cb", + "67b055c217dd384fa66e27111254109957683960", "testharness" ], "html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html": [ - "443731c1b81375b737eeb9723a0c81d19ceab521", + "11f60c010f05971d90b9f0bd30b68bd03ee0bf7e", "testharness" ], "html/semantics/scripting-1/the-script-element/module/resources/404-but-js.asis": [ @@ -448993,14 +445525,6 @@ "45a2520b68c84febc2d2f10c5c968fa682462d19", "support" ], - "html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js": [ - "5a53bcd4d5ed92dc5ba9f035d96eed14fbca45a8", - "support" - ], - "html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js.headers": [ - "cb762eff806849df46dc758ef7b98b63f27f54c9", - "support" - ], "html/semantics/scripting-1/the-script-element/module/resources/import-utf8-with-charset-header.js": [ "c2ccab7c621c09bdd7d871e9326e70c8a86e9ce3", "support" @@ -453370,7 +449894,7 @@ "support" ], "interfaces/IndexedDB.idl": [ - "a8ef47e89ab707f037364afdccbbf572a6c1450a", + "9373f4e43bf8ab0fe51371839dd614b83c54cb9c", "support" ], "interfaces/InputDeviceCapabilities.idl": [ @@ -453446,7 +449970,7 @@ "support" ], "interfaces/cookie-store.idl": [ - "f5c44b60bd05dac2d54f6c36438aa0dd4a7d4471", + "533884fdb5865fc5fe87bd73d68983dd4b485676", "support" ], "interfaces/cors-rfc1918.idl": [ @@ -453590,7 +450114,7 @@ "support" ], "interfaces/geometry.idl": [ - "1b83959465cf5f76bf52d2f8db51426281c07470", + "ada6c0c302cdff87a78a0e8ec5ac25a8f0e64922", "support" ], "interfaces/gyroscope.idl": [ @@ -453722,7 +450246,7 @@ "support" ], "interfaces/performance-timeline.idl": [ - "d9362ea27516ac4e40caa7632d9aa1e2ed9edb11", + "3ce538c846c6285d791a8dde2ad1afba53110481", "support" ], "interfaces/permissions.idl": [ @@ -453738,7 +450262,7 @@ "support" ], "interfaces/pointerevents.idl": [ - "40364530d892757e8e1d23de7c3b00234f7a5bcf", + "85a25aa444e3dd420f14fb8c380c9f7ce16445f2", "support" ], "interfaces/pointerlock.idl": [ @@ -453766,7 +450290,7 @@ "support" ], "interfaces/reporting.idl": [ - "ef20b9844699b65bc51b8a78fc7ae5ba9fd6496f", + "ae24f7538f6ba1557f152624416b359b740a60f2", "support" ], "interfaces/requestidlecallback.idl": [ @@ -453862,7 +450386,7 @@ "support" ], "interfaces/web-animations.idl": [ - "72ac87f3e33633864b779632c85cb2fbb473ef4c", + "89993896508fa04e87ec965211b3152e24975934", "support" ], "interfaces/web-bluetooth.idl": [ @@ -453898,7 +450422,7 @@ "support" ], "interfaces/webmidi.idl": [ - "0dfcb7771a871ff9a3568afc99a564c1e06b71a2", + "aa3b1ac21c899d6030ceff49af7e672f34935bac", "support" ], "interfaces/webrtc-dscp.idl": [ @@ -453906,7 +450430,7 @@ "support" ], "interfaces/webrtc-stats.idl": [ - "621f146108bb735d0605155c90c88c7f56af7587", + "ab437ce0ee11eb83a6b74ab83fb3afcedf7675a2", "support" ], "interfaces/webrtc.idl": [ @@ -454397,6 +450921,14 @@ "41c8c748619aea00c2afe67dd5983ab7601121b0", "testharness" ], + "largest-contentful-paint/image-inside-svg.html": [ + "5fff9e47f6424284fd707e276a68fa1f302d781c", + "testharness" + ], + "largest-contentful-paint/image-not-fully-visible.html": [ + "cec488c1c899d3d8b7ad9fbd306ec6cd92ecc416", + "testharness" + ], "largest-contentful-paint/image-src-change.html": [ "5ec860fa06f3281fd421912298e7b2c93dae19bb", "testharness" @@ -454505,6 +451037,10 @@ "8718b84386b56bdaf2e189a5f12041aa8b62c555", "support" ], + "lifecycle/resources/child.html": [ + "708bbfe02dcefb1173a5b15df7627d01739a5e43", + "support" + ], "lifecycle/resources/subframe.html": [ "2f1d70a80a792401891d93f6ddebaea0876400b3", "support" @@ -454522,7 +451058,7 @@ "support" ], "lifecycle/resources/window.html": [ - "a7659af423d545683182ae750ecaadd195d273c0", + "58181f32da7337773a0c420ff929631d2ba9ad1d", "support" ], "lifecycle/set-composited-layer-position-ref.html": [ @@ -454538,7 +451074,7 @@ "testharness" ], "lint.whitelist": [ - "8b02cdce5496de59589f65fd6ff9aee675f773cc", + "74dfb99936f1d6b4df8456d67e953600e7a4a813", "support" ], "loading/lazyload/common.js": [ @@ -454818,7 +451354,7 @@ "support" ], "mathml/presentation-markup/direction/direction-006.html": [ - "904e7d3fed8c7ae6d1a19d522fe08a1e282a59c6", + "e4f3f711421c34ba48502a0592c8089d3ea4ad17", "reftest" ], "mathml/presentation-markup/direction/direction-007-ref.html": [ @@ -454826,7 +451362,7 @@ "support" ], "mathml/presentation-markup/direction/direction-007.html": [ - "7137e2640fa4ee76135f1d77f10ab329119c5332", + "97dec11b6c629da3d3f7ac0903980ba252d48c97", "reftest" ], "mathml/presentation-markup/direction/direction-008-ref.html": [ @@ -454834,7 +451370,7 @@ "support" ], "mathml/presentation-markup/direction/direction-008.html": [ - "5c98b07410079806fc0163e1f9c4a98bcfe4cc3d", + "d94a036be00f404bd4d51350a85f70c180e9c776", "reftest" ], "mathml/presentation-markup/direction/direction-009-ref.html": [ @@ -454842,7 +451378,7 @@ "support" ], "mathml/presentation-markup/direction/direction-009.html": [ - "bf8caf16aed28f2b55f5bdd96009f0cd9bfc1785", + "c0ca31d40a82e5af2e23a4c5dee83f9e2bb593cb", "reftest" ], "mathml/presentation-markup/direction/direction-010-ref.html": [ @@ -454850,7 +451386,7 @@ "support" ], "mathml/presentation-markup/direction/direction-010.html": [ - "6dc095ac1fd490ca3bcb869014c6e32428110f9e", + "4087630e4c998761c67a10f3299d3b4c80976831", "reftest" ], "mathml/presentation-markup/direction/direction-overall-ref.html": [ @@ -454885,6 +451421,14 @@ "9fc441230588216f5f5b20eab36b465c48cbb41b", "reftest" ], + "mathml/presentation-markup/fractions/frac-bar-002-ref.html": [ + "9d5eef896ab6cab04be090ce970cb7d2347a9fca", + "support" + ], + "mathml/presentation-markup/fractions/frac-bar-002.html": [ + "ccf1bd904e77bf04c71fcab760a708f5aaaeed04", + "reftest" + ], "mathml/presentation-markup/fractions/frac-color-001-notref.html": [ "498d6277a3258c70882e7b2ec92e82e974bf9ab0", "support" @@ -454925,6 +451469,14 @@ "b74338a8804ed4e71c99675035fa070159185905", "reftest" ], + "mathml/presentation-markup/fractions/frac-default-padding-ref.html": [ + "93d3e0162b6b634e012ac07915577bef38d46acb", + "support" + ], + "mathml/presentation-markup/fractions/frac-default-padding.html": [ + "b68bb873ced58ee1b4a349400b4e7520e5631d7d", + "reftest" + ], "mathml/presentation-markup/fractions/frac-linethickness-001-ref.html": [ "d4be8ea03bfc29506af0e26a3d94d5eeafaaf472", "support" @@ -455026,11 +451578,11 @@ "reftest" ], "mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html": [ - "1934bf4969adff014ec9e0d453b67687d08c84a0", + "71f1583fd9f1bbc2fdec4f087ffa5d12c9af58dd", "support" ], "mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html": [ - "8c92d665c738c322000bc76999ea92b3eac1585d", + "ac9576ffc4c1c1ffb40c11d6a1129aa655e54a10", "reftest" ], "mathml/presentation-markup/fractions/frac-visibility-001-ref.html": [ @@ -455041,6 +451593,14 @@ "140603b47f5af19e35df63ea176b460f4c7b6151", "reftest" ], + "mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html": [ + "f0b5bdd9f04e795400f2741b47ebb82d0d3a61cb", + "support" + ], + "mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html": [ + "d7f0627059ad9e400480d574b5e83cff9113b107", + "reftest" + ], "mathml/presentation-markup/mrow/inferred-mrow-baseline.html": [ "1541b2d6ce17c90a52c15f3ce5461a5c7d42920f", "testharness" @@ -455049,6 +451609,22 @@ "b6a51762dfda0b05cbcc272b9fb5cedad0c66a94", "testharness" ], + "mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html": [ + "ad9f2d2a47caa6477d6dfbf2c103af76aefb34a4", + "testharness" + ], + "mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html": [ + "0c26780c10f06cde8f7815a84f5fe22217907dfd", + "support" + ], + "mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html": [ + "7c350f9953462e5d26227bb4c1880fb1d0b11b2d", + "reftest" + ], + "mathml/presentation-markup/mrow/legacy-mstyle-attributes.html": [ + "0de9a90eed9de0b7a6b4ff9484db1c9d87376c24", + "testharness" + ], "mathml/presentation-markup/operators/embellished-operator-001.html": [ "31bdff2fd7c2c4e463adfba2c3768d678c5c7424", "testharness" @@ -455066,7 +451642,7 @@ "support" ], "mathml/presentation-markup/operators/mo-form-dynamic.html": [ - "fff3bd9ff336f52b7abb5efdf4b1fb767518ace7", + "72d6c67f7544c75587cf8a3133481c1c9d68b499", "reftest" ], "mathml/presentation-markup/operators/mo-form-fallback-ref.html": [ @@ -455074,7 +451650,7 @@ "support" ], "mathml/presentation-markup/operators/mo-form-fallback.html": [ - "b517dd574688fa0ab50dff4a120507de4a9797bf", + "2c3f3a42765f846fb3f81d952284ba2a818d7df2", "reftest" ], "mathml/presentation-markup/operators/mo-form-minus-plus-ref.html": [ @@ -455082,7 +451658,7 @@ "support" ], "mathml/presentation-markup/operators/mo-form-minus-plus.html": [ - "487bca25eaa61d6fb0a110124e962e48fe55dd20", + "06e75429cdd6622de38d72cb7145b8898b594d05", "reftest" ], "mathml/presentation-markup/operators/mo-form-ref.html": [ @@ -455090,7 +451666,7 @@ "support" ], "mathml/presentation-markup/operators/mo-form.html": [ - "4f651d1c9b7ce43dd9e159793b630aa3c44b69af", + "b67b389ec1c4aca155e1f29908325ade67f37e76", "reftest" ], "mathml/presentation-markup/operators/mo-movablelimits-default-ref.html": [ @@ -455098,7 +451674,7 @@ "support" ], "mathml/presentation-markup/operators/mo-movablelimits-default.html": [ - "a05bef47ee76914d190af18141c966a4c3e12ef7", + "503a57f25c7241d94a3bbae2e93d0c70684159f4", "reftest" ], "mathml/presentation-markup/operators/mo-movablelimits-dynamic-ref.html": [ @@ -455106,7 +451682,7 @@ "support" ], "mathml/presentation-markup/operators/mo-movablelimits-dynamic.html": [ - "53cf76c0588ff2dd664b3fb9e622c7e30b5c6eb7", + "33fe97a3fb31d3c12bfc20b66adc2074f49a7f00", "reftest" ], "mathml/presentation-markup/operators/mo-movablelimits-from-in-flow-ref.html": [ @@ -455114,7 +451690,7 @@ "support" ], "mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html": [ - "d50cac50de3700a54df2df480f412cc269104efc", + "b4f0326481e99ce7442b1df305523b48cb46d524", "reftest" ], "mathml/presentation-markup/operators/mo-movablelimits-ref.html": [ @@ -455122,7 +451698,7 @@ "support" ], "mathml/presentation-markup/operators/mo-movablelimits.html": [ - "ebb5cde6f1381cc5903b4780fd45bf922f33c26c", + "82709e42dbfaaa6068bc814e00e73b657c6d6217", "reftest" ], "mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html": [ @@ -455130,15 +451706,19 @@ "support" ], "mathml/presentation-markup/operators/mo-paint-lspace-rspace.html": [ - "8fb095b61240d93caa3289f68fe52c37069f14c9", + "0c387f5656505cdb74a35cc97358895cbda17e07", "reftest" ], + "mathml/presentation-markup/operators/operator-dictionary-001.html": [ + "ea3d5ae2b1cea077f32df23d9174600fbb19d27f", + "testharness" + ], "mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html": [ - "403a76f483e495fe085c26a7a94cc51ee0349555", + "e1b8c3d161079da854a3e8ef4a560bf7e18cc2c4", "support" ], "mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html": [ - "c49a899a0faafec345d9379d25c4f34e3e5d4583", + "44e449e8fddc7e70b2ac741bc9edf3cea975d739", "reftest" ], "mathml/presentation-markup/radicals/root-parameters-1.html": [ @@ -455246,7 +451826,7 @@ "testharness" ], "mathml/relations/css-styling/attribute-mapping-001.html": [ - "c0c91dc23d119f85f693d2ccc5ec97c28a1a1f78", + "e7c6391ebad2aad8b8d31db056a209ad1d7ebba5", "testharness" ], "mathml/relations/css-styling/attribute-mapping-002.html": [ @@ -455302,7 +451882,7 @@ "support" ], "mathml/relations/css-styling/displaystyle-011.html": [ - "9a85a17dd0f6bd0938199aaa6ce26fc216e11069", + "a73031aa3d85f2c174183cc90f37ec416f596a03", "reftest" ], "mathml/relations/css-styling/displaystyle-012-ref.html": [ @@ -455310,7 +451890,7 @@ "support" ], "mathml/relations/css-styling/displaystyle-012.html": [ - "150443f25276d7b5548523ae8912fef27ca1da30", + "7572361f63046dd39e2ad5b408a52200a83c37ac", "reftest" ], "mathml/relations/css-styling/displaystyle-013-ref.html": [ @@ -455318,7 +451898,7 @@ "support" ], "mathml/relations/css-styling/displaystyle-013.html": [ - "30be35c02471388e3b0d59a9cb22ec006ca74511", + "2ed4559908bc4e66aed227708eefb68646ddf517", "reftest" ], "mathml/relations/css-styling/displaystyle-014-ref.html": [ @@ -455326,7 +451906,7 @@ "support" ], "mathml/relations/css-styling/displaystyle-014.html": [ - "d54a8043788a343e2b415256f59d611b49c89102", + "1e70cb66f3f15a2e52b3b6006329f85e2ef93731", "reftest" ], "mathml/relations/css-styling/displaystyle-015-ref.html": [ @@ -455334,7 +451914,7 @@ "support" ], "mathml/relations/css-styling/displaystyle-015.html": [ - "df25171dbd621ae64ae537ceb256b0dd6f80d7f5", + "a288aac8196c5172068ac4f5cbd0b4c92c11d4f5", "reftest" ], "mathml/relations/css-styling/displaystyle-1.html": [ @@ -455353,6 +451933,10 @@ "d28f66c3d5f628dd6b3150251c818a3c7d11df8f", "reftest" ], + "mathml/relations/css-styling/ignored-properties-001.html": [ + "e3e38067d877837f92f3dde8c37a3ceca233bd9d", + "testharness" + ], "mathml/relations/css-styling/lengths-1-ref.html": [ "9fca6f49632ca080ee1b2a32a9ce2d251241dfcc", "support" @@ -455434,7 +452018,7 @@ "support" ], "mathml/relations/css-styling/mathsize-attribute-css-keywords.html": [ - "9b3852d0b379ef1959fe0f90d04bc27b78a1db5f", + "6390ebfabaf5cf5cf83590d86b3efd3231a55b00", "reftest" ], "mathml/relations/css-styling/mathsize-attribute-legacy-values-ref.html": [ @@ -455442,7 +452026,7 @@ "support" ], "mathml/relations/css-styling/mathsize-attribute-legacy-values.html": [ - "745b1033718fcbb6d7208eff98f762d4a5799b12", + "abddf52590ceeddb205504ca5d1bcd9179e8fe84", "reftest" ], "mathml/relations/css-styling/mathsize-attribute-ref.html": [ @@ -455458,7 +452042,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-auto.html": [ - "3390fc0f733789ef09444e2e131c724ae4388c3a", + "29b1de86b76a3c68479f6005681f56f39f7800bd", "reftest" ], "mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [ @@ -455466,7 +452050,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-bold-fraktur.html": [ - "2bfb8b7d201b3d2cad7c9d7ca1471cfdd3e0e60d", + "2837ab9703c79af5f1178380852c99dcbb61f176", "reftest" ], "mathml/relations/css-styling/mathvariant-bold-italic-ref.html": [ @@ -455474,7 +452058,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-bold-italic.html": [ - "5454b8623b93dacfb1ba80554688641da78817e1", + "90135f6ccfba0ad683ecd965751159e92e834266", "reftest" ], "mathml/relations/css-styling/mathvariant-bold-ref.html": [ @@ -455486,7 +452070,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-bold-sans-serif.html": [ - "112c29216b2558c10953b5143778bf0c3bf67373", + "241a44af979412c5f3adbb6635699e599883ec55", "reftest" ], "mathml/relations/css-styling/mathvariant-bold-script-ref.html": [ @@ -455494,11 +452078,11 @@ "support" ], "mathml/relations/css-styling/mathvariant-bold-script.html": [ - "47cf0160cef69eea82dfdd53daf428ef7315ff87", + "b974f82c62f7c59eadb9759c01627caf1c666842", "reftest" ], "mathml/relations/css-styling/mathvariant-bold.html": [ - "a14fadfdf7e408e204472aee047a08e86efaf03e", + "d6ea644edb66191adfa1f0f03f6c801fe2a7b8a6", "reftest" ], "mathml/relations/css-styling/mathvariant-case-sensitivity-ref.html": [ @@ -455514,7 +452098,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-double-struck.html": [ - "4650617f93ee61fb78c833f6a50edbf475cfd8f4", + "3a995153b83eba4bf56de2643b16a8ae747c684a", "reftest" ], "mathml/relations/css-styling/mathvariant-fraktur-ref.html": [ @@ -455522,7 +452106,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-fraktur.html": [ - "72f20b78c68e40428ddc2572edbdb973dc18f861", + "db6e21bb99b6fe5fcb9910898402f5aaea2af43e", "reftest" ], "mathml/relations/css-styling/mathvariant-initial-ref.html": [ @@ -455530,7 +452114,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-initial.html": [ - "4f35d3847b9bd649b54e21bb757a68e5c72b6754", + "efff6fd4de0e46c7edbaaf7f60fb50ae34d738e2", "reftest" ], "mathml/relations/css-styling/mathvariant-italic-ref.html": [ @@ -455538,7 +452122,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-italic.html": [ - "f30a2c7d84e7b555e876681c48d3d8cef96ca0c6", + "cd7eb5cc151e58d55eebd6f359f5a4422af0d93e", "reftest" ], "mathml/relations/css-styling/mathvariant-looped-ref.html": [ @@ -455546,7 +452130,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-looped.html": [ - "a6732249a03dd797d7665e7564ca5f39b19f0d28", + "f67bda582b360d51f482c6105bad0b2c93bee5f2", "reftest" ], "mathml/relations/css-styling/mathvariant-monospace-ref.html": [ @@ -455554,7 +452138,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-monospace.html": [ - "9e76b10e9dafe0298360acc3c687dd3387cf79ef", + "e39ea329e28677b1ada1bb8e3f45f9306db0354d", "reftest" ], "mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html": [ @@ -455562,7 +452146,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html": [ - "832fd15b7bd3b66ee86698bd7ff42757db4dd188", + "2f050ef52135ba10aabebb88cf1d9aef44261a98", "reftest" ], "mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html": [ @@ -455570,7 +452154,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-sans-serif-italic.html": [ - "77117986a384c5241c0dd891a5c9ff8a7449c854", + "c7418998b0da26db216704ea89514c1a00313efc", "reftest" ], "mathml/relations/css-styling/mathvariant-sans-serif-ref.html": [ @@ -455578,7 +452162,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-sans-serif.html": [ - "afceecf6cd38287d848e61ba315c060954a87d6d", + "744988c6ebc208c1525fdab2d9f578890a1c989f", "reftest" ], "mathml/relations/css-styling/mathvariant-script-ref.html": [ @@ -455586,7 +452170,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-script.html": [ - "c7f93a8d6a051ff859c2f534dec33fad500905ab", + "8ebcae1c461a666baa302d68338d4f925b54daa2", "reftest" ], "mathml/relations/css-styling/mathvariant-stretched-ref.html": [ @@ -455594,7 +452178,7 @@ "support" ], "mathml/relations/css-styling/mathvariant-stretched.html": [ - "e2c828615a2864266c6f8b4771f70b6c1c91d5d9", + "5752e2b5cedae988e0f65e774b88a635ced97b49", "reftest" ], "mathml/relations/css-styling/mathvariant-tailed-ref.html": [ @@ -455602,11 +452186,11 @@ "support" ], "mathml/relations/css-styling/mathvariant-tailed.html": [ - "fa8bea41f470bbe83441bdea2693cd16b9b01320", + "2d2c6eb1d826b9f4355b23680f8d3c17c9759ff5", "reftest" ], "mathml/relations/css-styling/not-participating-to-parent-layout.html": [ - "1caebf1e630de2fdc9c879aa76e0a4c666fbe841", + "52d41547ce2c5cad8ea831133f08bca572f03d5f", "testharness" ], "mathml/relations/css-styling/padding-border-margin/border-001.html": [ @@ -455614,7 +452198,7 @@ "testharness" ], "mathml/relations/css-styling/padding-border-margin/border-002.html": [ - "06a719de64071ce0c9ca388ccf98fc4c6559a983", + "38d89aa186e1b78e4f51944c02b37574ef9ac651", "testharness" ], "mathml/relations/css-styling/padding-border-margin/margin-001.html": [ @@ -455622,7 +452206,7 @@ "testharness" ], "mathml/relations/css-styling/padding-border-margin/margin-002.html": [ - "01c8f3e45f83e9f9ad5168de98dc60c63e213841", + "4853c8bee9c732187de150293785554c253f796c", "testharness" ], "mathml/relations/css-styling/padding-border-margin/padding-001.html": [ @@ -455630,7 +452214,7 @@ "testharness" ], "mathml/relations/css-styling/padding-border-margin/padding-002.html": [ - "565dfc43b566b0a3c019437111ce21db7885c426", + "e1425a0b1b92a26c38a8561fe742c3c5f69e4e6c", "testharness" ], "mathml/relations/css-styling/padding-border-margin/padding-border-margin-001-ref.html": [ @@ -455674,7 +452258,7 @@ "reftest" ], "mathml/relations/css-styling/width-height-001.html": [ - "8d52f48a2d95acd1c103a00694915331cbcfccb1", + "3947a938664882354648d78d7e32a021e2bd25c5", "testharness" ], "mathml/relations/css-styling/writing-mode/writing-mode-001.html": [ @@ -455698,7 +452282,7 @@ "testharness" ], "mathml/relations/html5-tree/clipboard-event-handlers.tentative.html": [ - "57ababb4a919d8a5ba876c9ecf7a72c7a113b676", + "82fda880887839b72ac8c683d076ea07a8525d80", "testharness" ], "mathml/relations/html5-tree/color-attributes-1-ref.html": [ @@ -455725,6 +452309,14 @@ "9ecd45f9a4087e41a98546d1afb6faca9d396403", "testharness" ], + "mathml/relations/html5-tree/display-2-ref.html": [ + "7864c0409914de319866ff86b19c8e423672fa69", + "support" + ], + "mathml/relations/html5-tree/display-2.html": [ + "d1c68e57c6ed6d03a06ea28fd5c5b49db8a60043", + "reftest" + ], "mathml/relations/html5-tree/dynamic-1-ref.html": [ "5fa90e9d2fe8bd44a506a8bffa4f1adec6374dda", "support" @@ -455786,7 +452378,7 @@ "testharness" ], "mathml/relations/html5-tree/math-global-event-handlers.tentative.html": [ - "b5b9c75dac1c6c09b4bc74c464f468c681b43b4e", + "e96feeaf0960641e4413b7b43b93e46490460ee7", "testharness" ], "mathml/relations/html5-tree/required-extensions-2-ref.html": [ @@ -455854,7 +452446,7 @@ "support" ], "mathml/support/feature-detection.js": [ - "50ca926d25ea810177068a5f5de29f39749db7e6", + "6f1d033b5b9ce7d8c2a6f9bfff589189719b586f", "support" ], "mathml/support/layout-comparison.js": [ @@ -455862,7 +452454,15 @@ "support" ], "mathml/support/mathml-fragments.js": [ - "7c7b003e9e683a2770520eeb82a42a0dd1307c9f", + "8376ccf375def30bec02e4226ea189140efcbe65", + "support" + ], + "mathml/support/operator-dictionary.js": [ + "b2f4a0d901ae77cbdc0a4ac1e6be9287ab7a9fea", + "support" + ], + "mathml/support/operator-dictionary.json": [ + "2e9abe73b39f2c44765b7a351a6964d093313f6a", "support" ], "mathml/tools/axisheight.py": [ @@ -455886,7 +452486,15 @@ "support" ], "mathml/tools/mathvariant-transforms.py": [ - "cb863398f6ec753a3286e62c80f2c9e01adcc7e8", + "dd2994dd5a77554016eaaa027164a6fdaef3b544", + "support" + ], + "mathml/tools/operator-dictionary.py": [ + "8af2bd677be0982afa4d5adbf48d6d11b91394ec", + "support" + ], + "mathml/tools/operator-dictionary.xsl": [ + "d00097555a4663f5cecc14fc7183600eedf96bf9", "support" ], "mathml/tools/percentscaledown.py": [ @@ -455926,7 +452534,7 @@ "support" ], "mathml/tools/utils/misc.py": [ - "e4d21d60cb09d979404b861a9a6b2787676a9752", + "d877a915e5294efcff292a730b142052f252fbb2", "support" ], "mathml/tools/xHeight.py": [ @@ -466325,12 +462933,8 @@ "36fef6f498f820ea44c4a0b3ea4d23f8064aea69", "testharness" ], - "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt": [ - "da44251045a85e022df4e8b0eb323667ca52da99", - "support" - ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html": [ - "530fa166cf5bb49fbc7c1068cae420f6ca70f41c", + "c1faecb853fd89a1b7acbd14d43688e9e2da5be2", "testharness" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfercontrol.to.offscreen.html": [ @@ -467185,6 +463789,10 @@ "0e5a4768e7626f666077e794e0731c9a1e3e9d35", "support" ], + "payment-handler/app-supports-shipping-contact-delegation.js": [ + "770e2de64f13eeef8a1ee21783c2997facc8ff0b", + "support" + ], "payment-handler/basic-card.js": [ "2db5d4b719fac4dbcfa65f4166c16a5b8d253097", "support" @@ -467285,6 +463893,14 @@ "b9a9dd82d247a80b00e4bc033eeea134d5f900c1", "testharness" ], + "payment-handler/supports-shipping-contact-delegation-manual.https-expected.txt": [ + "3a76dbf89699c771bd62376c0307a48373262caf", + "support" + ], + "payment-handler/supports-shipping-contact-delegation-manual.https.html": [ + "75b3668981c900ecced0b1ffdd40a95f15125003", + "manual" + ], "payment-handler/untrusted-event.https.html": [ "900ac79d0d21f698707f6efe13a07dd234ed1a30", "testharness" @@ -480414,7 +477030,7 @@ "support" ], "resources/chromium/nfc-mock.js": [ - "01a4e70d0c9730d1bf9d8ab93037549acfbee61b", + "d7829640cf470a8d20d6fe9eab39b6a24215fae6", "support" ], "resources/chromium/sensor.mojom.js": [ @@ -480474,7 +477090,7 @@ "support" ], "resources/chromium/webxr-test.js": [ - "f82073ae42ccb6be02d52b4fbf0e755ecb234e5a", + "eae4d64b446ecc53ac1ed5210b8ce2c783d08f9e", "support" ], "resources/chromium/webxr-test.js.headers": [ @@ -480726,7 +477342,7 @@ "support" ], "scroll-to-text-fragment/scroll-to-text-fragment.html": [ - "3e3cfcbbb5bdf9f9e7715f7c3c300211bfb1ab92", + "85f07f38229404e45f0afbb413ea950241238ff4", "testharness" ], "secure-contexts/META.yml": [ @@ -488766,7 +485382,7 @@ "reftest" ], "svg/struct/scripted/autofocus-attribute-expected.txt": [ - "653e39d7191c8b377d156bd403be4a873a5f0cac", + "63f63d1c612a08533245abc867b00b967e4e8a36", "support" ], "svg/struct/scripted/autofocus-attribute.svg": [ @@ -489694,7 +486310,7 @@ "support" ], "tools/pywebsocket/mod_pywebsocket/headerparserhandler.py": [ - "dda43c9d8197f217804331fb1be97065282e3646", + "06e7638597985a96a4c00ea0052a0d3717e4403c", "support" ], "tools/pywebsocket/mod_pywebsocket/http_header_util.py": [ @@ -489754,7 +486370,7 @@ "support" ], "tools/pywebsocket/test/client_for_testing.py": [ - "fb5a6cb21068b852b28bd6351e8f3f91d354b1c5", + "18d185712eea408a23d24fbcce1aaf493a5aa7e3", "support" ], "tools/pywebsocket/test/endtoend_with_external_server.py": [ @@ -489766,7 +486382,7 @@ "support" ], "tools/pywebsocket/test/mux_client_for_testing.py": [ - "dd5435a8cc0e2755c583c36d0ceaf3f3ff6021b0", + "304e7fc95d3fc5b3ee2d9e54f20782addae2040f", "support" ], "tools/pywebsocket/test/run_all.py": [ @@ -489778,11 +486394,11 @@ "support" ], "tools/pywebsocket/test/test_dispatch.py": [ - "9ca3d4f3ae1dbf5f97b27d84ec6e6422fd0ecaa4", + "e16d605609c8ab7b30d72063830ff434c1c56dc0", "support" ], "tools/pywebsocket/test/test_endtoend.py": [ - "5e5cf61573917d87d1365b16a58c2c4188a912ec", + "3680ec2eba6724a74905be4f1581f36a7a7f7713", "support" ], "tools/pywebsocket/test/test_extensions.py": [ @@ -489794,7 +486410,7 @@ "support" ], "tools/pywebsocket/test/test_handshake_hybi.py": [ - "d10667749e635ba1c96f8b23fb97fab5983052b9", + "d0aaf640a588e2b042f32a9c66a3697ad4dd10be", "support" ], "tools/pywebsocket/test/test_handshake_hybi00.py": [ @@ -489818,7 +486434,7 @@ "support" ], "tools/pywebsocket/test/test_mux.py": [ - "3ce45cf6b3fee0c0b9a914d0c247775b6f2499fb", + "0773decbfd66d0dffef0b4287bad87453fc1d644", "support" ], "tools/pywebsocket/test/test_stream.py": [ @@ -493802,7 +490418,7 @@ "support" ], "tools/wpt/run.py": [ - "b52137ec9fa4e7ced12982e4a8929392bb0c8b3b", + "bea36c7c24a80868980861466d8b962624446434", "support" ], "tools/wpt/testfiles.py": [ @@ -493922,7 +490538,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/android_webview.py": [ - "42ae8b64b142c95124fa392ccd7d0b632297a6db", + "168b7dec37c63c6917adcc0afc98dacb43966184", "support" ], "tools/wptrunner/wptrunner/browsers/base.py": [ @@ -493934,7 +490550,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/chrome_android.py": [ - "b8ebedef0487d267c0da59b488d159c776319316", + "b3e14791c4890647d53e88df7ba1c1006db72ac6", "support" ], "tools/wptrunner/wptrunner/browsers/chrome_ios.py": [ @@ -493986,7 +490602,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/servodriver.py": [ - "54a22b4f729e88a30a7fba8f231f83f1a2aa6ad2", + "ea345efa44fd4ec57cde5abc90c92d998c4a6c73", "support" ], "tools/wptrunner/wptrunner/browsers/webkit.py": [ @@ -494006,7 +490622,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/base.py": [ - "b1e86ff1fd07ee040ed7c905a2462053b9e30a62", + "f581c5cedb74e58ff415c19faf19f53ce50c7a9a", "support" ], "tools/wptrunner/wptrunner/executors/executorchrome.py": [ @@ -494026,7 +490642,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executormarionette.py": [ - "832bb8fb88b7184f6148f1d3b9263826266cebac", + "77fe297194012a6f1313cc2ef9b4382d30185d8b", "support" ], "tools/wptrunner/wptrunner/executors/executoropera.py": [ @@ -494038,7 +490654,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executorselenium.py": [ - "9a2d223f6495356859aec05035deec2f775a7f22", + "5246a26fcbf47917ced9ea52b6efa3271544f2d3", "support" ], "tools/wptrunner/wptrunner/executors/executorservo.py": [ @@ -494046,11 +490662,11 @@ "support" ], "tools/wptrunner/wptrunner/executors/executorservodriver.py": [ - "427d5b3f73b39cfebac41b62378e304892cb76e1", + "12a750fa0a34e6a74fe0e18671e5c85fe45a06e0", "support" ], "tools/wptrunner/wptrunner/executors/executorwebdriver.py": [ - "99d46108eb0ca8f21bed854a7c1fb3278e5e7351", + "65b6723cb82609fea5aa81e523d7639b610c92f4", "support" ], "tools/wptrunner/wptrunner/executors/executorwebkit.py": [ @@ -494062,7 +490678,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/protocol.py": [ - "7da592396096db85479dd65162ae63775856a937", + "77a705ffb4759c04c53ab3a8f045b50569f2598d", "support" ], "tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py": [ @@ -494138,11 +490754,11 @@ "support" ], "tools/wptrunner/wptrunner/manifestupdate.py": [ - "4753fde00834313337e6d78cd48f78cdaf27983f", + "a3d5581471a38e39483bd0ca31e55d58a64387b3", "support" ], "tools/wptrunner/wptrunner/metadata.py": [ - "c614cbaa888720699325be6c012ed42f13a90cbd", + "42f3b00dab5b926f918c23a352bef935f07bbf4c", "support" ], "tools/wptrunner/wptrunner/products.py": [ @@ -496386,7 +493002,7 @@ "support" ], "web-animations/animation-model/animation-types/accumulation-per-property-expected.txt": [ - "9e2090927c86d149fbfa25aa4ed30a0ac14d125a", + "0a22cfff3f8892426bcebed59b9748d5511d2463", "support" ], "web-animations/animation-model/animation-types/accumulation-per-property.html": [ @@ -496429,10 +493045,6 @@ "336115e5779837241b4316bff5e2fec7e857e518", "testharness" ], - "web-animations/animation-model/combining-effects/effect-composition-expected.txt": [ - "3292f15db2e5a56be711c8f37268f3a4bb26cc92", - "support" - ], "web-animations/animation-model/combining-effects/effect-composition.html": [ "02c2fe1b3b8c8b13158ab942f0d15143a6571a58", "testharness" @@ -496486,7 +493098,7 @@ "testharness" ], "web-animations/interfaces/Animatable/animate-expected.txt": [ - "9c1192054e58c15b31812eeb1bb3852b04cd8bbf", + "f6ee77bdfee98097baa3469b6df1734b0f45a873", "support" ], "web-animations/interfaces/Animatable/animate-no-browsing-context-expected.txt": [ @@ -496502,7 +493114,7 @@ "testharness" ], "web-animations/interfaces/Animatable/getAnimations-expected.txt": [ - "d39ae3520abbff3432efea2d982fc3366b78a24b", + "8450824bb96bd57f7d04601203b1f19488584fc4", "support" ], "web-animations/interfaces/Animatable/getAnimations.html": [ @@ -496542,7 +493154,7 @@ "testharness" ], "web-animations/interfaces/Animation/idlharness.window-expected.txt": [ - "75523c9b443df97e04b0b5359747a982d0773617", + "793616d3006a7360f2e2e17639acd3529042083a", "support" ], "web-animations/interfaces/Animation/idlharness.window.js": [ @@ -496634,7 +493246,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/constructor-expected.txt": [ - "3f9b9840c37070b7e080dea6c6ae1b66076e22c5", + "51e5f086363a0f40864298b93ede4a66a38a4825", "support" ], "web-animations/interfaces/KeyframeEffect/constructor.html": [ @@ -496650,7 +493262,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/idlharness.window-expected.txt": [ - "8c8f9cb96b8da5a3518e8f0305125c327f6fe392", + "461f7f2cf65778622d41016e16fddd79285bae8e", "support" ], "web-animations/interfaces/KeyframeEffect/idlharness.window.js": [ @@ -496673,10 +493285,6 @@ "8233dc07c5de8d17619489e0d759c75c4d2a059f", "testharness" ], - "web-animations/interfaces/KeyframeEffect/setKeyframes-expected.txt": [ - "6a5fee9431438e7fbd7901256e2e05bfebf37a45", - "support" - ], "web-animations/interfaces/KeyframeEffect/setKeyframes.html": [ "675a705891fa6c75c233179e59cc73cc516ff48c", "testharness" @@ -496986,7 +493594,7 @@ "testharness" ], "web-nfc/NFCReader_options.https.html": [ - "7c77045afb3ee53ec69a758ad8d0719998465505", + "8b38f558a0a8fb03afac573bd8f39820f37cc4fa", "testharness" ], "web-nfc/NFCReadingEvent_constructor.https.html": [ @@ -496994,7 +493602,7 @@ "testharness" ], "web-nfc/NFCWriter_push.https.html": [ - "dcd23307a2e4bab5677d07f6780fd6a339bc463e", + "cc8c94188d5bbe109fc3c395dc8fa36739b0cc62", "testharness" ], "web-nfc/OWNERS": [ @@ -497002,7 +493610,7 @@ "support" ], "web-nfc/README.md": [ - "8ae597e36fd10ee0af2e86059688cb001e326b4b", + "dd072174e056ec01c00e98505980768fff24e4c4", "support" ], "web-nfc/idlharness.https.window-expected.txt": [ @@ -497018,7 +493626,7 @@ "testharness" ], "web-nfc/resources/nfc-helpers.js": [ - "bffe10f80227fe0a7259fa975412a37e506fabd1", + "bace1b3752faea77e800493ec8c4385ee9aa851c", "support" ], "web-share/META.yml": [ @@ -500693,10 +497301,18 @@ "67bc9b219c13353104a7e3e1b93905f26b4a6523", "testharness" ], + "websockets/Create-Secure-extensions-empty.any-expected.txt": [ + "312acbc703d9ad242dd9b61239ad37a6a2d714e9", + "support" + ], "websockets/Create-Secure-extensions-empty.any.js": [ - "0a2d883d35b6f641d762163c4ab66f4c4fae9351", + "bff3d1a595e64a996a217be575beb30bb8b56e3f", "testharness" ], + "websockets/Create-Secure-extensions-empty.any.worker-expected.txt": [ + "312acbc703d9ad242dd9b61239ad37a6a2d714e9", + "support" + ], "websockets/Create-Secure-url-with-space.any-expected.txt": [ "a04297058f4b030d13dfa4e027a1e38de9bbc4dd", "support" @@ -505410,7 +502026,7 @@ "support" ], "webxr/resources/webxr_test_constants.js": [ - "e0330b80f53398a9ac0cff9edee7b82cc560a8b5", + "dc60f6739d417448c252a93de0f1f61c063e5a35", "support" ], "webxr/resources/webxr_util.js": [ @@ -505626,7 +502242,7 @@ "testharness" ], "webxr/xrView_oneframeupdate.https.html": [ - "4386433788c55dd13bc9a663b6796530e4852368", + "8edb2c0b265f18479644f312f91478d6029e3cd5", "testharness" ], "webxr/xrView_sameObject.https.html": [ @@ -507645,6 +504261,10 @@ "98b56d36250f2f02a38e6fb066b9abbe7b0cf902", "testharness" ], + "worklets/animation-worklet-referrer.https-expected.txt": [ + "d605c7563fa39501b27a0d574fc611c9a2084356", + "support" + ], "worklets/animation-worklet-referrer.https.html": [ "494e06a8472795016e2ee346397d7c227477809c", "testharness" @@ -507669,6 +504289,10 @@ "cff063a4361bd0244ee7a7a352be849f1b7118a6", "testharness" ], + "worklets/audio-worklet-referrer.https-expected.txt": [ + "d605c7563fa39501b27a0d574fc611c9a2084356", + "support" + ], "worklets/audio-worklet-referrer.https.html": [ "f258cd5a452d57002d041211cb44ee6f27f0b3aa", "testharness" @@ -507697,6 +504321,10 @@ "a2f57c221b7f6f020dda72bb9b2395cfd05d5c03", "testharness" ], + "worklets/layout-worklet-referrer.https-expected.txt": [ + "d605c7563fa39501b27a0d574fc611c9a2084356", + "support" + ], "worklets/layout-worklet-referrer.https.html": [ "cb383a935a2a6d154d804595e78275e289076a4c", "testharness" @@ -507721,6 +504349,10 @@ "68e926c8c18868b84069bf18eb0bae6a37a77ce4", "testharness" ], + "worklets/paint-worklet-referrer.https-expected.txt": [ + "d605c7563fa39501b27a0d574fc611c9a2084356", + "support" + ], "worklets/paint-worklet-referrer.https.html": [ "a4b5a6f498c2755d498fd22afc1ab7398fab56ec", "testharness"
diff --git a/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html b/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html index 72c64b1..1fe8ac5 100644 --- a/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html +++ b/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html
@@ -144,6 +144,8 @@ runConvertToBlobTest(testScenarioSet[i]); } -runAllTests(); +test(function() { + runAllTests(); +}, "Overall test"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html b/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html index ea21d33..87f8d6d 100644 --- a/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html +++ b/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-colorManaged-toBlob-toDataURL.html
@@ -140,6 +140,8 @@ runToDataURLTest(testScenarioSet[i]); } -runAllTests(); +test(function() { + runAllTests(); +}, "Overall test"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html b/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html index 7d44381..e7a83fc1 100644 --- a/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html +++ b/third_party/blink/web_tests/external/wpt/2dcontext/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html
@@ -23,7 +23,7 @@ var _16bitImage = new Image(); var t_image = async_test(testScenarioToString(testScenario)); _8bitImage.onload = t_image.step_func(function() { - _16bitImage.onload = function() { + _16bitImage.onload = t_image.step_func(function() { var refCanvas = document.createElement("canvas"); refCanvas.width = refCanvas.height = 2; var refCtx = refCanvas.getContext( @@ -41,7 +41,7 @@ assert_array_approx_equals(refPixels, testPixels, tolerance); t_image.done(); - }; + }); _16bitImage.src = _16bitImageSrc; }); _8bitImage.src = _8bitImageSrc; @@ -104,6 +104,8 @@ return str; } -runAllTests(); +test(function() { + runAllTests(); +}, "Overall test"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/generate_test.py b/third_party/blink/web_tests/external/wpt/bluetooth/generate_test.py index 8cb61dd..c0ff8a78 100755 --- a/third_party/blink/web_tests/external/wpt/bluetooth/generate_test.py +++ b/third_party/blink/web_tests/external/wpt/bluetooth/generate_test.py
@@ -31,7 +31,7 @@ if data != generated_test.data: logging.error('%s does not match template', generated_test.path) return -1 - except IOError, e: + except IOError as e: if e.errno == 2: logging.error('Missing generated test:\n%s\nFor template:\n%s', generated_test.path,
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/embedded-enforcement/support/echo-required-csp.py b/third_party/blink/web_tests/external/wpt/content-security-policy/embedded-enforcement/support/echo-required-csp.py index 6063cc04..03f7ca1e 100644 --- a/third_party/blink/web_tests/external/wpt/content-security-policy/embedded-enforcement/support/echo-required-csp.py +++ b/third_party/blink/web_tests/external/wpt/content-security-policy/embedded-enforcement/support/echo-required-csp.py
@@ -10,7 +10,7 @@ second_level_iframe_code = "" if "include_second_level_iframe" in request.GET: - if "second_level_iframe_csp" in request.GET and request.GET["second_level_iframe_csp"] <> "": + if "second_level_iframe_csp" in request.GET and request.GET["second_level_iframe_csp"] != "": second_level_iframe_code = '''<script> var i2 = document.createElement('iframe'); i2.src = 'echo-required-csp.py';
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/support/fonts/makegsubfonts.py b/third_party/blink/web_tests/external/wpt/css/css-fonts/support/fonts/makegsubfonts.py index cd39e91..e519b49 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/support/fonts/makegsubfonts.py +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/support/fonts/makegsubfonts.py
@@ -125,7 +125,7 @@ if table.format == 4: table.cmap[cp] = glyphName else: - raise NotImplementedError, "Unsupported cmap table format: %d" % table.format + raise NotImplementedError("Unsupported cmap table format: %d" % table.format) cp += 1 # tag.fail @@ -146,7 +146,7 @@ if table.format == 4: table.cmap[cp] = glyphName else: - raise NotImplementedError, "Unsupported cmap table format: %d" % table.format + raise NotImplementedError("Unsupported cmap table format: %d" % table.format) # bump this up so that the sequence is the same as the lookup 3 font cp += 3 @@ -327,7 +327,7 @@ if table.format == 4: table.cmap[cp] = glyphName else: - raise NotImplementedError, "Unsupported cmap table format: %d" % table.format + raise NotImplementedError("Unsupported cmap table format: %d" % table.format) cp += 1 # tag.alt1,2,3 @@ -348,7 +348,7 @@ if table.format == 4: table.cmap[cp] = glyphName else: - raise NotImplementedError, "Unsupported cmap table format: %d" % table.format + raise NotImplementedError("Unsupported cmap table format: %d" % table.format) cp += 1 # set the glyph order
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html new file mode 100644 index 0000000..df72a88 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html
@@ -0,0 +1,68 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: baseline align a display:block item with a display:grid item</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 20px repeat(4, auto) 30px / 30px repeat(4, auto) 20px; + place-content: start; + place-items: baseline start; + border: 1px solid; + text-decoration: underline blue; +} + +.inner-grid { + background: lightgrey; + grid-column: 2; + grid-row: 3; + min-width: 10px; + min-height: 0; + border: 0 solid lightblue; + border-top-width: 10px; + border-bottom-width: 40px; + padding-bottom: 20px; +} + +x, z { + display: block; + min-width: 40px; + min-height: 10px; + font-size: 10em; + background: silver; +} +z { + width: 40px; + height: 10px; +} + + </style> +</head> +<body> + +<div class="grid"> +<y style="grid-area:3/1">A </y> +<div class="inner-grid"> + <x> A</x><z></z> +</div> +</div> + +<div class="grid" style="align-items:last baseline"> +<y style="grid-area:3/1">A </y> +<div class="inner-grid"> + <z></z><x> A</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html new file mode 100644 index 0000000..19a26d8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html
@@ -0,0 +1,69 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: baseline align a display:block item with a display:grid item</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#grid-baselines"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-self-alignment-baseline-with-grid-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 20px repeat(4, auto) 30px / 30px repeat(4, auto) 20px; + place-content: start; + place-items: baseline start; + border: 1px solid; + text-decoration: underline blue; +} + +.inner-grid { + display: grid; + grid: auto auto / auto; + background: lightgrey; + grid-column: 2; + grid-row: 3; + min-width: 10px; + min-height: 0; + border: 0 solid lightblue; + border-top-width: 10px; + border-bottom-width: 40px; + place-content: inherit; + place-items: inherit; + padding-bottom: 20px; +} + +x { + min-width: 40px; + min-height: 10px; + font-size: 10em; + background: silver; +} + + </style> +</head> +<body> + +<div class="grid"> +<y style="grid-area:3/1">A </y> +<div class="inner-grid"> + <x> A</x><x style="grid-row:2"></x> +</div> +</div> + +<div class="grid" style="align-items:last baseline"> +<y style="grid-area:3/1">A </y> +<div class="inner-grid"> + <x></x><x style="grid-row:2"> A</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html new file mode 100644 index 0000000..a426f87 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html
@@ -0,0 +1,69 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: baseline align a display:block item with a display:grid item with spanned item</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#grid-baselines"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-self-alignment-baseline-with-grid-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 20px repeat(4, auto) 30px / 30px repeat(4, auto) 20px; + place-content: start; + place-items: baseline start; + border: 1px solid; + text-decoration: underline blue; +} + +.inner-grid { + display: grid; + grid: auto auto / auto; + background: lightgrey; + grid-column: 2; + grid-row: 3; + min-width: 10px; + min-height: 0; + border: 0 solid lightblue; + border-top-width: 10px; + border-bottom-width: 40px; + place-content: inherit; + place-items: inherit; + padding-bottom: 20px; +} + +x { + min-width: 40px; + min-height: 10px; + font-size: 10em; + background: silver; +} + + </style> +</head> +<body> + +<div class="grid"> +<y style="grid-area:3/1">A </y> +<div class="inner-grid"> + <x style="grid-row:1/span 3"> A</x><x style="grid-column:1"></x> +</div> +</div> + +<div class="grid" style="align-items:last baseline"> +<y style="grid-area:3/1">A </y> +<div class="inner-grid"> + <x></x><x style="grid-row:2/span 3"> A</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html new file mode 100644 index 0000000..ed3bf30 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html
@@ -0,0 +1,69 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: baseline align a display:block item with a display:grid spanned item</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#grid-baselines"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-self-alignment-baseline-with-grid-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 20px repeat(4, auto) 30px / 30px repeat(4, auto) 20px; + place-content: start; + place-items: baseline start; + border: 1px solid; + text-decoration: underline blue; +} + +.inner-grid { + display: grid; + grid: auto auto / auto; + background: lightgrey; + grid-column: 2; + grid-row: 2 / span 2; + min-width: 10px; + min-height: 0; + border: 0 solid lightblue; + border-top-width: 10px; + border-bottom-width: 40px; + place-content: inherit; + place-items: inherit; + padding-bottom: 20px; +} + +x { + min-width: 40px; + min-height: 10px; + font-size: 10em; + background: silver; +} + + </style> +</head> +<body> + +<div class="grid"> +<y style="grid-area:2/1">A </y> +<div class="inner-grid"> + <x> A</x><x style="grid-row:2"></x> +</div> +</div> + +<div class="grid" style="align-items:last baseline"> +<y style="grid-area:3/1">A </y> +<div class="inner-grid"> + <x></x><x style="grid-row:2"> A</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html new file mode 100644 index 0000000..5e20b88d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html
@@ -0,0 +1,69 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: baseline align a display:block item with a display:grid spanned item with spanned item</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#grid-baselines"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-self-alignment-baseline-with-grid-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 20px repeat(4, auto) 30px / 30px repeat(4, auto) 20px; + place-content: start; + place-items: baseline start; + border: 1px solid; + text-decoration: underline blue; +} + +.inner-grid { + display: grid; + grid: auto auto / auto; + background: lightgrey; + grid-column: 2; + grid-row: 2 / span 2; + min-width: 10px; + min-height: 0; + border: 0 solid lightblue; + border-top-width: 10px; + border-bottom-width: 40px; + place-content: inherit; + place-items: inherit; + padding-bottom: 20px; +} + +x { + min-width: 40px; + min-height: 10px; + font-size: 10em; + background: silver; +} + + </style> +</head> +<body> + +<div class="grid"> +<y style="grid-area:2/1">A </y> +<div class="inner-grid"> + <x style="grid-row:1/span 3"> A</x><x style="grid-row:4"></x> +</div> +</div> + +<div class="grid" style="align-items:last baseline"> +<y style="grid-area:3/1">A </y> +<div class="inner-grid"> + <x></x><x style="grid-row:2/span 3"> A</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001-expected.txt new file mode 100644 index 0000000..b48bf64 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001-expected.txt
@@ -0,0 +1,31 @@ +This is a testharness.js-based test. +PASS .grid 1 +PASS .grid 2 +PASS .grid 3 +PASS .grid 4 +PASS .grid 5 +PASS .grid 6 +PASS .grid 7 +PASS .grid 8 +PASS .grid 9 +PASS .grid 10 +PASS .grid 11 +PASS .grid 12 +PASS .grid 13 +PASS .grid 14 +PASS .grid 15 +FAIL .grid 16 assert_equals: +<div class="grid border border-box pad-percent" style="width: min-content; height: min-content;" data-expected-width="300" data-expected-height="160"> + <div class="item" data-offset-x="130" data-offset-y="80" data-expected-width="100" data-expected-height="50"></div> + </div> +width expected 300 but got 260 +PASS .grid 17 +PASS .grid 18 +FAIL .grid 19 assert_equals: +<div class="grid border border-box pad-percent" style="width: max-content; height: max-content;" data-expected-width="300" data-expected-height="160"> + <div class="item" data-offset-x="130" data-offset-y="80" data-expected-width="100" data-expected-height="50"></div> + </div> +width expected 300 but got 260 +PASS .grid 20 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html index e14f37a..cb84362 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html
@@ -25,6 +25,14 @@ grid-column: -2; grid-row: -2; } +.pad-calc { + border-width: 0; + padding: calc(10% + 20px); +} +.pad-percent { + border-width: 0; + padding: 10%; +} </style> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -69,16 +77,64 @@ <div class="item" data-offset-x="100" data-offset-y="100" data-expected-width="100" data-expected-height="50"></div> </div> +<div style="width:min-content" data-expected-width="300" data-expected-height="160"> + <div class="grid border border-box pad-percent" data-expected-width="300" data-expected-height="160"> + <div class="item" data-offset-x="130" data-offset-y="80" data-expected-width="100" data-expected-height="50">x</div> + </div> +</div> + +<div style="width:min-content" data-expected-width="240" data-expected-height="188"> + <div class="grid border border-box pad-calc" data-expected-width="240" data-expected-height="188"> + <div class="item" data-offset-x="44" data-offset-y="94" data-expected-width="100" data-expected-height="50"></div> + </div> +</div> + <div class="grid border border-box" style="width: 200px; height: 100px;" data-expected-width="200" data-expected-height="100"> <div class="item" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> </div> +<div style="width:min-content" data-expected-width="200" data-expected-height="100"> + <div class="grid border border-box pad-percent" style="width: 200px; height: 100px;" data-expected-width="200" data-expected-height="100"> + <div class="item" data-offset-x="20" data-offset-y="20" data-expected-width="100" data-expected-height="50"></div> + </div> +</div> + +<div style="width:min-content" data-expected-width="200" data-expected-height="100"> + <div class="grid border border-box pad-calc" style="width: 200px; height: 100px;" data-expected-width="200" data-expected-height="100"> + <div class="item" data-offset-x="40" data-offset-y="40" data-expected-width="100" data-expected-height="50"></div> + </div> +</div> + <div class="grid border border-box" style="width: min-content; height: min-content;" data-expected-width="220" data-expected-height="170"> <div class="item" data-offset-x="100" data-offset-y="100" data-expected-width="100" data-expected-height="50"></div> </div> +<div style="width:min-content" data-expected-width="300" data-expected-height="160"> + <div class="grid border border-box pad-percent" style="width: min-content; height: min-content;" data-expected-width="300" data-expected-height="160"> + <div class="item" data-offset-x="130" data-offset-y="80" data-expected-width="100" data-expected-height="50"></div> + </div> +</div> + +<div style="width:min-content" data-expected-width="240" data-expected-height="188"> + <div class="grid border border-box pad-calc" style="width: min-content; height: min-content;" data-expected-width="288" data-expected-height="188"> + <div class="item" data-offset-x="144" data-offset-y="94" data-expected-width="100" data-expected-height="50"></div> + </div> +</div> + <div class="grid border border-box" style="width: max-content; height: max-content;" data-expected-width="220" data-expected-height="170"> <div class="item" data-offset-x="100" data-offset-y="100" data-expected-width="100" data-expected-height="50"></div> </div> +<div style="width:min-content" data-expected-width="300" data-expected-height="160"> + <div class="grid border border-box pad-percent" style="width: max-content; height: max-content;" data-expected-width="300" data-expected-height="160"> + <div class="item" data-offset-x="130" data-offset-y="80" data-expected-width="100" data-expected-height="50"></div> + </div> +</div> + +<div style="width:min-content" data-expected-width="240" data-expected-height="188"> + <div class="grid border border-box pad-calc" style="width: max-content; height: max-content;" data-expected-width="288" data-expected-height="188"> + <div class="item" data-offset-x="144" data-offset-y="94" data-expected-width="100" data-expected-height="50"></div> + </div> +</div> + </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-001-ref.html new file mode 100644 index 0000000..fe316d5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-001-ref.html
@@ -0,0 +1,123 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: grid-aligned abs.pos. inside subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: auto / repeat(10, 30px) 100px; + place-content: start; + border: 1px solid; + width: 500px; + position: relative; + padding: 4px 3px 1px 10px; +} + +.subgrid { + display: grid; + grid: 0 / repeat(10, 30px) 100px; + background: lightgrey; + grid-column: 2 / span 8; + min-width:0; + min-height:0; +} + +i { + grid-row: 1; + counter-increment: i; + background: pink; +} +i::before { content: counter(i, decimal); } + +x { + position: absolute; + top:0; bottom:0; left:0; right:0; + background: silver; +} + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3/5">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3/-1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:auto/3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:auto/1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3/5">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3/-1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:auto/3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:auto/1">x</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-001.html new file mode 100644 index 0000000..e524ec2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-001.html
@@ -0,0 +1,129 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: grid-aligned abs.pos. inside subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="abs-pos-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(10, 30px); + grid-template-areas: ". . . . . . . . . . ."; + place-content: start; + border: 1px solid; + width: 500px; + grid-auto-columns: 100px; + grid-auto-rows: 100px; + position: relative; + padding: 4px 3px 1px 10px; +} + +.subgrid { + display: grid; + grid: auto / subgrid; + background: lightgrey; + grid-column: 2 / span 8; + grid-row: 2 / span 2; + min-width:0; + min-height:0; +} + +i { + grid-row: 1; + counter-increment: i; + background: pink; +} +i::before { content: counter(i, decimal); } + +x { + position: absolute; + top:0; bottom:0; left:0; right:0; + background: silver; +} + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3/5">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3/-1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:auto/3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:auto/1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3/5">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3/-1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:auto/3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:auto/1">x</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-002-ref.html new file mode 100644 index 0000000..69e071c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-002-ref.html
@@ -0,0 +1,125 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: grid-aligned abs.pos. inside rel.pos. subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(10, 30px) 100px; + place-content: start; + border: 1px solid; + width: 500px; + padding: 1px 2px; +} + +.subgrid { + position: relative; + display: grid; + grid: auto / 27px repeat(7, 30px); + grid-column: 2 / span 8; + grid-row: 2 / span 2; + padding: 4px 0 1px 0; + border: 3px solid black; + min-height: 1em; + background: yellow; +} + +i { + grid-row: 1; + counter-increment: i; + background: pink; +} +i::before { content: counter(i, decimal); } + +x { + position: absolute; + top:0; bottom:0; left:0; right:0; + background: silver; +} + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3/5">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3; right:33px">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:auto/3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:auto/1; right:-10px">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3/5">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3/-1; left:13px">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:auto/3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:auto/1; left:-33px">x</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-002.html new file mode 100644 index 0000000..5d683355 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/abs-pos-002.html
@@ -0,0 +1,131 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: grid-aligned abs.pos. inside rel.pos. subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="abs-pos-002-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(10, 30px); + grid-template-areas: ". . . . . . . . . . ."; + place-content: start; + border: 1px solid; + width: 500px; + grid-auto-columns: 100px; + grid-auto-rows: 100px; + padding: 1px 2px; +} + +.subgrid { + position: relative; + display: grid; + grid: auto / subgrid; + grid-column: 2 / span 8; + grid-row: 2 / span 2; + padding: 4px 33px 1px 10px; + border: 3px solid black; + min-width: 0; + min-height: 1em; + background: yellow; +} + +i { + grid-row: 1; + counter-increment: i; + background: pink; +} +i::before { content: counter(i, decimal); } + +x { + position: absolute; + top:0; bottom:0; left:0; right:0; + background: silver; +} + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3/5">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3/-1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:auto/3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid"> + <x style="grid-column:auto/1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3/5">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3/-1">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:auto/3">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr"> + <x style="grid-column:auto/1">x</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/baseline-001-ref.html new file mode 100644 index 0000000..c98740b4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/baseline-001-ref.html
@@ -0,0 +1,65 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: baseline-aligned subgrid item</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 20px repeat(4, auto) 30px / 30px repeat(4, auto) 20px; + place-content: start; + place-items: baseline start; + border: 1px solid; + text-decoration: underline blue; +} + +.subgrid { + background: lightgrey; + grid-column: 2 / span 4; + grid-row: 3 / span 2; + min-width: 10px; + min-height: 0; + background: yellow; +} + +x, z { + display: block; + min-width: 20px; + min-height: 10px; + font-size: 8em; + background: silver; +} +z { + width: 20px; + height: 10px; +} + + </style> +</head> +<body> + +<div class="grid"> +<y style="grid-area:3/1">A </y> +<div class="subgrid"> + <z></z><x> A</x> +</div> +</div> + +<div class="grid" style="align-items: last baseline"> +<y style="grid-area:4/1">A </y> +<div class="subgrid"> + <z></z><x> A</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/baseline-001.html new file mode 100644 index 0000000..995b1a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/baseline-001.html
@@ -0,0 +1,66 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: baseline-aligned subgrid item</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="baseline-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 20px repeat(4, auto) 30px / 30px repeat(4, auto) 20px; + place-content: start; + place-items: baseline start; + border: 1px solid; + text-decoration: underline blue; +} + +.subgrid { + display: grid; + grid: subgrid / auto; + background: lightgrey; + grid-column: 2 / span 4; + grid-row: 3 / span 2; + min-width: 10px; + min-height: 0; + background: yellow; + place-content: inherit; + place-items: inherit; +} + +x { + min-width: 20px; + min-height: 10px; + font-size: 8em; + background: silver; +} + + </style> +</head> +<body> + +<div class="grid"> +<y style="grid-area:4/1">A </y> +<div class="subgrid"> + <x style="grid-row:2"> A</x><x></x> +</div> +</div> + +<div class="grid" style="align-items: last baseline"> +<y style="grid-area:4/1">A </y> +<div class="subgrid"> + <x></x><x style="grid-row:2"> A</x> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-001-ref.html new file mode 100644 index 0000000..e7909fc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-001-ref.html
@@ -0,0 +1,82 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid with definite grid-gap in both axes</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:24px/1 monospace; padding:0; margin:0; +} + + .wrapper { + display: inline-grid; + gap: 20px 10px; + grid-template-columns: repeat(4,auto); + grid-template-rows: repeat(3,auto); + background-color: #fff; + color: #444; + } + + .box { + background-color: #444; + color: #fff; + padding: 20px; + } + + .box .box { + background-color: #ccc; + color: #444; + } + + .a { + grid-area: 1 / 1 / 2 / 3; + } + + .b { + grid-area: 1/4; + } + + .c { + grid-column: 1; + grid-row: 2 / 4; + margin-right: 10px; + } + + .d { + grid-column: 2 / 5; + grid-row: 2 / 4; + display: grid; + row-gap: 100px; + column-gap: 10px; + grid: repeat(2,auto) / repeat(3,auto); + } + + .e { + grid-area: 1/2; visibility:hidden; margin-left:15px; + } + .f { + grid-area: 1/3; visibility:hidden; margin-left:10px; + } + .g { + grid-area: 1/4; visibility:hidden; margin-left:15px; + } +</style> +</head> +<body> + +<div class="wrapper"> + <div class="box a">A</div><div class="box e">E</div><div class="box f">F</div><div class="box g">G</div> + <div class="box b">B</div> + <div class="box c">C</div> + <div class="box d"> + <div class="box">E</div> + <div class="box">F</div> + <div class="box">G</div> + <div class="box h">H</div> + <div class="box i">I</div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-001.html new file mode 100644 index 0000000..0bc8eed --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-001.html
@@ -0,0 +1,73 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid with definite grid-gap in both axes</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="grid-gap-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 monospace; padding:0; margin:0; +} + + .wrapper { + display: inline-grid; + gap: 20px; + grid-template-columns: repeat(4,auto); + grid-template-rows: repeat(3,auto); + background-color: #fff; + color: #444; + } + + .box { + background-color: #444; + color: #fff; + padding: 20px; + } + + .box .box { + background-color: #ccc; + color: #444; + } + + .a { + grid-column: 1 / 3; + } + + .b { + grid-column: 4; + } + + .c { + grid-column: 1; + grid-row: 2 / 4; + } + + .d { + grid-column: 2 / 5; + grid-row: 2 / 4; + display: grid; + row-gap: 100px; + column-gap: 10px; + grid: subgrid / subgrid; + } +</style> +</head> +<body> + +<div class="wrapper"> + <div class="box a">A</div> + <div class="box b">B</div> + <div class="box c">C</div> + <div class="box d"> + <div class="box e">E</div> + <div class="box f">F</div> + <div class="box g">G</div> + <div class="box h">H</div> + <div class="box i">I</div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-002-ref.html new file mode 100644 index 0000000..db305246 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-002-ref.html
@@ -0,0 +1,65 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid with border-bottom</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(5, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: subgrid / auto; + gap: 10px 20px; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 2 / span 5; + min-width:10px; + min-height:0; + background: yellow; +} + +.subgrid > * { background: lightgrey; } + +x { + min-width:10px; + min-height:0px; +} +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: magenta; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: grey; } + +e { + border: 0 solid lightblue; + border-bottom-width: 40px; + margin: -5px 0; +} + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> +<div class="subgrid"> +<c>c</c> +<d>d</d> +<e></e> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-002.html new file mode 100644 index 0000000..bd4b749 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-002.html
@@ -0,0 +1,63 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid with border-bottom</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-gap-002-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(5, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: subgrid / auto; + gap: 10px 20px; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 2 / span 5; + min-width:10px; + min-height:0; + border: 0 solid lightblue; + border-bottom-width: 40px; + background: yellow; +} + +.subgrid > * { background: lightgrey; } + +x { + min-width:10px; + min-height:0px; +} +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: magenta; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: grey; } + + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> +<div class="subgrid"> +<c>c</c> +<d>d</d> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-003-ref.html new file mode 100644 index 0000000..44053f0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-003-ref.html
@@ -0,0 +1,68 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid with border-bottom and percentage gap</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 0 15px 15px 0 0 40px / repeat(5, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: repeat(4, auto) / auto auto; + gap: 3px 8px; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 2 / span 5; + background: grey; + width: 40px; + height: 30px; +} + +.subgrid > * { background: lightgrey; } + +x { + min-width:10px; + min-height:0px; +} +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: magenta; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: grey; } + +e { display:block; width: 20px; height:15px; background:black; } + +f { + grid-area: 4/2/span 1/span 5; + background: lightblue!important; + height: 40px; +} + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1; height:0"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> +<f></f> +<div class="subgrid"> +<c><e></e></c> +<d><e></e></d> +<c><e></e></c> +<d><e></e></d> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-003.html new file mode 100644 index 0000000..f8ce865 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-003.html
@@ -0,0 +1,66 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid with border-bottom and percentage gap</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="grid-gap-003-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(5, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: subgrid / auto auto; + gap: 20% 20%; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 2 / span 5; + min-width:10px; + min-height:0; + border: 0 solid lightblue; + border-bottom-width: 40px; + background: grey; +} + +.subgrid > * { background: lightgrey; } + +x { + min-width:10px; + min-height:0px; +} +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: magenta; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: grey; } + +e { display:block; width: 20px; height:15px; background:black; } + + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> +<div class="subgrid"> +<c><e></e></c> +<d><e></e></d> +<c><e></e></c> +<d><e></e></d> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-004-ref.html new file mode 100644 index 0000000..b1819d1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-004-ref.html
@@ -0,0 +1,35 @@ +<!DOCTYPE HTML> +<html><head> + <meta charset="utf-8"> + <title>Reference: nested subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> +<style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:100px auto/100px auto; + gap:20px; + border:3px solid; + background:yellow; +} +span { background:cyan; } +span:nth-child(2n+1) { background:grey; } +</style> +</head> +<body> + +<div class="grid"> + <div style="display:grid; grid: 100px 1em / 100px 1em; gap:60px; grid-area:span 2/span 2"> + <div style="display:grid; grid: 60px 1em / 100px; gap:100px; grid-row:span 2"> + <span>a</span><span>b</span> + </div> + <span style="grid-area:2/2">c</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-004.html new file mode 100644 index 0000000..b46d22e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-004.html
@@ -0,0 +1,37 @@ +<!DOCTYPE HTML> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: nested subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-gap-004-ref.html"> +<style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:100px auto/100px auto; + gap:20px; + border:3px solid; + background:yellow; +} +span { background:cyan; } +span:nth-child(2n+1) { background:grey; } +</style> +</head> +<body> + +<div class="grid"> + <div style="display:grid; grid:subgrid/subgrid; gap:100px; grid-area:span 2/span 2"> + <div style="display:grid; grid:subgrid/100px; gap:100px; grid-row:span 2"> + <span>a</span><span>b</span> + </div> + <span style="grid-area:2/2">c</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-005-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-005-ref.html new file mode 100644 index 0000000..88d8b34d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-005-ref.html
@@ -0,0 +1,25 @@ +<!DOCTYPE HTML> +<html><head> + <meta charset="utf-8"> + <title>Reference: nested subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> +<style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +span { background:cyan; } +span:nth-child(2n+1) { background:grey; } +</style> +</head> +<body> + +<div style="display:inline-grid; grid:100px/100px 0px; gap:100px; border:1px solid;"> + <div style="display:grid; grid:100px/140px calc(40px); gap:20px; grid-column:span 2"> + <span>a</span><span>b</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-005.html new file mode 100644 index 0000000..9afba90 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-005.html
@@ -0,0 +1,27 @@ +<!DOCTYPE HTML> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: nested subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-gap-005-ref.html"> +<style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +span { background:cyan; } +span:nth-child(2n+1) { background:grey; } +</style> +</head> +<body> + +<div style="display:inline-grid; grid:100px/100px 0px; gap:100px; border:1px solid;"> + <div style="display:grid; grid:100px/subgrid; gap:20px; grid-column:span 2"> + <span>a</span><span>b</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-006-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-006-ref.html new file mode 100644 index 0000000..d94181d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-006-ref.html
@@ -0,0 +1,26 @@ +<!DOCTYPE HTML> +<html><head> + <meta charset="utf-8"> + <title>Reference: nested subgrid, justify-content:space-around, overflowing</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> +<style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +body { margin:200px; } +span { background:cyan; } +span:nth-child(2n+1) { background:grey; } +</style> +</head> +<body> + +<div style="display:inline-grid; grid:100px/100px 10px 10px; gap:100px; border:1px solid; justify-content:center; width:50px"> + <div style="display:grid; grid:100px/140px 50px; gap:20px; grid-column:span 2"> + <span>a</span><span>b</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-006.html new file mode 100644 index 0000000..d79ced1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-006.html
@@ -0,0 +1,28 @@ +<!DOCTYPE HTML> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: nested subgrid, justify-content:space-around, overflowing</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-gap-006-ref.html"> +<style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +body { margin:200px; } +span { background:cyan; } +span:nth-child(2n+1) { background:grey; } +</style> +</head> +<body> + +<div style="display:inline-grid; grid:100px/100px 10px 10px; gap:100px; border:1px solid; justify-content:space-around; width:50px"> + <div style="display:grid; grid:100px/subgrid; gap:20px; grid-column:span 2"> + <span>a</span><span>b</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-007-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-007-ref.html new file mode 100644 index 0000000..84d4c002 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-007-ref.html
@@ -0,0 +1,39 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: nested ortogonal writing-mode subgrids</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:60px auto/100px auto; + gap:100px 60px; + border:3px solid; + background:pink; +} +span { background:grey; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.vrl { writing-mode: vertical-rl; direction:ltr; } +</style> +</head> +<body> + +<div class="grid"> + <span style="grid-area:1/1; background:lightgrey; width:60px; height:160px"></span> + <span style="grid-area:1/1">a</span> + <span style="grid-row:2; background:cyan">b</span> + <span style="grid-area:2/2" class="vrl">ccc</span> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-007.html new file mode 100644 index 0000000..5b94fe5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-007.html
@@ -0,0 +1,44 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: nested ortogonal writing-mode subgrids</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-gap-007-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:100px auto/100px auto; + gap:20px; + border:3px solid; + background:yellow; +} +span { background:cyan; } +span:nth-child(2n+1) { background:grey; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.vrl { writing-mode: vertical-rl; direction:ltr; } +</style> +</head> +<body> + +<div class="grid"> + <div class="vrl" style="display:grid; grid:subgrid/subgrid; gap:100px; grid-area:span 2/span 2; background:pink"> + <div class="hl" style="display:grid; grid:subgrid/100px; gap:100px; grid-column:span 2; background:lightgrey"> + <span>a</span><span>b</span> + </div> + <span style="grid-area:1/2">ccc</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-008-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-008-ref.html new file mode 100644 index 0000000..ca8d4b3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-008-ref.html
@@ -0,0 +1,39 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: nested orthogonal writing-mode subgrids with percentage column-gap</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:100px 375px/300px; + border:3px solid; + width: 300px; + height: 500px; + background:lightgrey; + row-gap: 25px; +} +span { + grid-row:2; + background:cyan; + width:50px; +} +</style> +</head> +<body> + +<div class="grid"> + <span>ccc</span> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-008.html new file mode 100644 index 0000000..760bd92c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-008.html
@@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: nested orthogonal writing-mode subgrids with percentage column-gap</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-gap-008-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:100px auto/200px auto; + border:3px solid; + background:grey; + width: 300px; + height: 500px; +} +.subgrid { + display: grid; + grid: 50px / subgrid; + column-gap: 10%; + grid-area: span 2/span 2; + justify-content:end; + background:lightgrey; +} +span { background:cyan; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +</style> +</head> +<body> + +<div class="grid"> + <div class="subgrid vlr"> + <span class="hl">ccc</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-009-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-009-ref.html new file mode 100644 index 0000000..628e498 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-009-ref.html
@@ -0,0 +1,38 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: nested orthogonal writing-mode subgrids with percentage row-gap</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:400px/300px; + border:3px solid; + background:lightgrey; + width:300px; + height:400px; +} +span { + margin-top:350px; + margin-right:115px; + background:cyan; +} +</style> +</head> +<body> + +<div class="grid"> + <span>cc</span> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-009.html new file mode 100644 index 0000000..4bbf5c6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-009.html
@@ -0,0 +1,48 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: nested orthogonal writing-mode subgrids with percentage row-gap</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="grid-gap-009-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 Ahem; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:100px auto/200px auto; + border:3px solid; + background:grey; + width:300px; + height:400px; +} +.subgrid { + display: grid; + grid: subgrid / 50px; + row-gap: 10%; + grid-area: span 2/span 2; + background:lightgrey; +} +span { background:cyan; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +</style> +</head> +<body> + +<div class="grid"> + <div class="subgrid vlr"> + <span class="hl">cc</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-001-ref.html new file mode 100644 index 0000000..0d3050f5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-001-ref.html
@@ -0,0 +1,81 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid grid-gap:20px</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + + .wrapper { + display: grid; + gap: 0; + grid-template-columns: 150px 100px 150px 100px; + grid-template-rows: repeat(3,auto); + background-color: #fff; + color: #444; + } + + .box { + background-color: #444; + color: #fff; + padding: 20px; + } + + .box .box { + background-color: #ccc; + color: #444; + } + + .a { + grid-column: 1 / 3; + } + + .b { + grid-column: 4 ; + } + + .c { + grid-column: 1; + grid-row: 2 / 4; + } + + .box .f { background-color: purple; } + .box .i { background-color: blue; } + .box .e { background-color: yellow; } + .a { background-color: grey; } + .c { background-color: black; } + .b { background-color: black; } + + .d { + grid-column: 2 / 5; + grid-row: 2 / 4; + display: grid; + gap: 20px; + grid: auto / 70px 130px 70px; + } + + </style> +</head> +<body> + +<div class="wrapper"> + <div class="box a">A</div> + <div class="box b">B</div> + <div class="box c">C</div> + <div class="box d"> + <div class="box e">E</div> + <div class="box f">F</div> + <div class="box g">G</div> + <div class="box h">H</div> + <div class="box i">I</div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-001.html new file mode 100644 index 0000000..85725d52 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-001.html
@@ -0,0 +1,83 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid grid-gap:20px</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="grid-gap-larger-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + + .wrapper { + display: grid; + gap: 0; + grid-template-columns: 150px 100px 150px 100px; + grid-template-rows: repeat(3,auto); + background-color: #fff; + color: #444; + } + + .box { + background-color: #444; + color: #fff; + padding: 20px; + } + + .box .box { + background-color: #ccc; + color: #444; + } + + .a { + grid-column: 1 / 3; + } + + .b { + grid-column: 4 ; + } + + .c { + grid-column: 1; + grid-row: 2 / 4; + } + + .box .f { background-color: purple; } + .box .i { background-color: blue; } + .box .e { background-color: yellow; } + .a { background-color: grey; } + .c { background-color: black; } + .b { background-color: black; } + + .d { + grid-column: 2 / 5; + grid-row: 2 / 4; + display: grid; + gap: 20px; + grid: subgrid / subgrid; + } + + </style> +</head> +<body> + +<div class="wrapper"> + <div class="box a">A</div> + <div class="box b">B</div> + <div class="box c">C</div> + <div class="box d"> + <div class="box e">E</div> + <div class="box f">F</div> + <div class="box g">G</div> + <div class="box h">H</div> + <div class="box i">I</div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-002-ref.html new file mode 100644 index 0000000..7415de64 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-002-ref.html
@@ -0,0 +1,33 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid with larger gap than parent grid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:100px auto/100px; + gap:20px; + border:3px solid; + background:yellow; +} +span { background:lightgrey; } +span:nth-child(2n+1) { background:grey; } +</style> +</head> +<body> + +<div class="grid"> + <span style="height:60px">a</span><span style="margin-top:40px">b</span> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-002.html new file mode 100644 index 0000000..4565be1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-larger-002.html
@@ -0,0 +1,37 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid with larger gap than parent grid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="grid-gap-larger-002-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + +.grid { + display:inline-grid; + grid:100px auto/100px; + gap:20px; + border:3px solid; + background:yellow; +} +span { background:lightgrey; } +span:nth-child(2n+1) { background:grey; } +</style> +</head> +<body> + +<div class="grid"> + <div style="display:grid; grid:subgrid/100px; gap:100px; grid-row:span 2"> + <span>a</span><span>b</span> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-normal-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-normal-001-ref.html new file mode 100644 index 0000000..ee99c024 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-normal-001-ref.html
@@ -0,0 +1,75 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid grid-gap:normal</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + + .wrapper { + display: grid; + gap: 10px; + grid-template-columns: 150px 100px 150px 100px; + grid-template-rows: repeat(3,minmax(100px,auto)); + background-color: #fff; + color: #444; + } + + .box { + background-color: #444; + color: #fff; + padding: 20px; + } + + .box .box { + background-color: #ccc; + color: #444; + } + + .a { + grid-column: 1 / 3; + } + + .b { + grid-column: 4 ; + } + + .c { + grid-column: 1; + grid-row: 2 / 4; + } + + .d { + grid-column: 2 / 5; + grid-row: 2 / 4; + display: grid; + gap: 10px; + grid-template-columns: 80px 150px 80px; + grid-template-rows: 80px 80px; + } + + </style> +</head> +<body> + +<div class="wrapper"> + <div class="box a">A</div> + <div class="box b">B</div> + <div class="box c">C</div> + <div class="box d"> + <div class="box e">E</div> + <div class="box f">F</div> + <div class="box g">G</div> + <div class="box h">H</div> + <div class="box i">I</div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-normal-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-normal-001.html new file mode 100644 index 0000000..5edf1e0762 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-normal-001.html
@@ -0,0 +1,76 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid grid-gap:normal</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="grid-gap-normal-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + + .wrapper { + display: grid; + gap: 10px; + grid-template-columns: 150px 100px 150px 100px; + grid-template-rows: repeat(3,minmax(100px,auto)); + background-color: #fff; + color: #444; + } + + .box { + background-color: #444; + color: #fff; + padding: 20px; + } + + .box .box { + background-color: #ccc; + color: #444; + } + + .a { + grid-column: 1 / 3; + } + + .b { + grid-column: 4 ; + } + + .c { + grid-column: 1; + grid-row: 2 / 4; + } + + .d { + grid-column: 2 / 5; + grid-row: 2 / 4; + display: grid; + grid-template-columns: subgrid; + grid-template-rows: subgrid; + } + + </style> +</head> +<body> + +<div class="wrapper"> + <div class="box a">A</div> + <div class="box b">B</div> + <div class="box c">C</div> + <div class="box d"> + <div class="box e">E</div> + <div class="box f">F</div> + <div class="box g">G</div> + <div class="box h">H</div> + <div class="box i">I</div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-smaller-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-smaller-001-ref.html new file mode 100644 index 0000000..fcd6851 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-smaller-001-ref.html
@@ -0,0 +1,82 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid grid-gap:0px</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + + .wrapper { + display: grid; + gap: 20px; + grid-template-columns: 170px 100px 190px 100px; + grid-template-rows: repeat(3,auto); + gap: 0; + background-color: #fff; + color: #444; + } + + .box { + background-color: #444; + color: #fff; + padding: 20px; + } + + .box .box { + background-color: #ccc; + color: #444; + } + + .a { + grid-column: 1 / 3; + margin-bottom: 20px; + } + + .b { + grid-column: 4 ; + margin-bottom: 20px; + } + + .c { + grid-column: 1; + grid-row: 2 / 4; + margin-right: 20px; + } + + .box .f { background-color: purple; } + .box .i { background-color: blue; } + .box .e { background-color: yellow; } + + .d { + grid-column: 2 / 5; + grid-row: 2 / 4; + display: grid; + gap: 0; + grid-template-columns: 90px 170px 90px; + } + + </style> +</head> +<body> + +<div class="wrapper"> + <div class="box a">A</div> + <div class="box b">B</div> + <div class="box c">C</div> + <div class="box d"> + <div class="box e">E</div> + <div class="box f">F</div> + <div class="box g">G</div> + <div class="box h">H</div> + <div class="box i">I</div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-smaller-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-smaller-001.html new file mode 100644 index 0000000..7b59acd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-gap-smaller-001.html
@@ -0,0 +1,80 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid grid-gap:0px</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="grid-gap-smaller-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + + .wrapper { + display: grid; + gap: 20px; + grid-template-columns: 150px 100px 150px 100px; + grid-template-rows: repeat(3,auto); + background-color: #fff; + color: #444; + } + + .box { + background-color: #444; + color: #fff; + padding: 20px; + } + + .box .box { + background-color: #ccc; + color: #444; + } + + .a { + grid-column: 1 / 3; + } + + .b { + grid-column: 4 ; + } + + .c { + grid-column: 1; + grid-row: 2 / 4; + } + + .box .f { background-color: purple; } + .box .i { background-color: blue; } + .box .e { background-color: yellow; } + + .d { + grid-column: 2 / 5; + grid-row: 2 / 4; + display: grid; + gap: 0; + grid: subgrid / subgrid; + } + + </style> +</head> +<body> + +<div class="wrapper"> + <div class="box a">A</div> + <div class="box b">B</div> + <div class="box c">C</div> + <div class="box d"> + <div class="box e">E</div> + <div class="box f">F</div> + <div class="box g">G</div> + <div class="box h">H</div> + <div class="box i">I</div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/item-percentage-height-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/item-percentage-height-001-ref.html new file mode 100644 index 0000000..44f0d44 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/item-percentage-height-001-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid item percentage height</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style type="text/css"> + +.wrapper { + padding: 2px; + padding-top: 5px; + border: 1px solid; +} +.grid { + display: grid; + grid: auto auto / auto; + grid-row-gap: 60px; + height: 300px; + background: lightgrey; +} + +.subgrid { + display: grid; + grid: subgrid / auto; + grid-row: span 2; + grid-row-gap: 40px; + padding: 10px; + padding-top: 5px; +} + +.item { + align-self: start; + width: 100px; + background: grey; + margin-left: 10px; +} + +.hidden { visibility: hidden; } +.a1 { grid-area: 1/1; } +.a2 { grid-area: 2/1; } + </style> +</head> +<body> + +<div class="wrapper"> +<div class="grid"> + <div class="item hidden a1" style="height:25px"></div><div class="item a1" style="margin-top:5px; margin-bottom:-10px; align-self:stretch"></div> + <div class="item hidden a2" style="height:120px"></div><div class="item a2" style="margin-top:-10px; height:100px"></div> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/item-percentage-height-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/item-percentage-height-001.html new file mode 100644 index 0000000..15e996ea --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/item-percentage-height-001.html
@@ -0,0 +1,53 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid item percentage height</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="item-percentage-height-001-ref.html"> + <style type="text/css"> + +.grid { + display: grid; + grid: auto auto / auto; + grid-row-gap: 60px; + border: 1px solid; + padding: 2px; + padding-top: 5px; + height: 300px; +} + +.subgrid { + display: grid; + grid: subgrid / auto; + grid-row: span 2; + grid-row-gap: 40px; + background: lightgrey; + padding: 10px; + padding-top: 5px; +} + +.item { + align-self: start; + height: 100%; + width: 100px; + background: grey; +} + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <div class="item"></div> + <div class="item" style="height:100px"></div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-001-ref.html new file mode 100644 index 0000000..04c5839 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-001-ref.html
@@ -0,0 +1,40 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid item using line names from outer grid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:24px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: auto / [a] 50px 50px [a] 50px 50px [a]; + padding: 20px 10px; +} + +.subgrid { + display: grid; + grid: 50px / subgrid; + grid-column: span 3; +} + +x { background: grey; } + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <x style="grid-column: 1 / 3"></x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-001.html new file mode 100644 index 0000000..9b49e62 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-001.html
@@ -0,0 +1,42 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid item using line names from outer grid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="line-names-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: auto / [a] 50px 50px [a] 50px 50px [a]; + padding: 20px 10px; +} + +.subgrid { + display: grid; + grid: 50px / subgrid; + grid-column: span 3; +} + +x { background: grey; } + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <x style="grid-column: span a / a -1"></x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-002.html new file mode 100644 index 0000000..a10a4d01 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-002.html
@@ -0,0 +1,42 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid item using line names from outer grid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="line-names-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: auto / repeat(10, 10px) repeat(10, [a] 10px) [a]; + padding: 20px 10px; +} + +.subgrid { + display: grid; + grid: 50px / subgrid; + grid-column: span 10; +} + +x { background: grey; } + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <x style="grid-column: span a / a 8"></x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-003.html new file mode 100644 index 0000000..43afaf9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-003.html
@@ -0,0 +1,44 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: nested subgrid item using line names from outer grid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="line-names-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: auto / [a] 50px 50px [a] 50px 50px [a]; + padding: 20px 10px; +} + +.subgrid { + display: grid; + grid: 50px / subgrid; + grid-column: span 4; +} + +x { background: grey; } + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <div class="subgrid" style="grid-column: span 3"> + <x style="grid-column: span a / a -1"></x> + </div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-004-ref.html new file mode 100644 index 0000000..6ceb9d4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-004-ref.html
@@ -0,0 +1,52 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid item using mix of outer/inner line names</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:24px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: auto / [a] 50px 50px 50px 50px [b] 50px 50px [a b]; + padding: 20px 10px; +} + +.subgrid { + display: grid; + grid-template-columns: subgrid [x] [b] [] [] [b]; + grid-auto-rows: 10px; + grid-column: 2 / span 4; +} + +x { background: grey; } + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <x style="grid-row:1; grid-column: 2 / 4"></x> + <x style="grid-row:2; grid-column: 2 / 5"></x> + <x style="grid-row:3; grid-column: 2 / 4"></x> + <x style="grid-row:4; grid-column: 2 / 4"></x> + <x style="grid-row:5; grid-column: 2 / 5"></x> + <x style="grid-row:6; grid-column: 2 / 4"></x> + <x style="grid-row:7; grid-column: 1 / 4"></x> + <x style="grid-row:8; grid-column: 2 / 4"></x> + <x style="grid-row:9; grid-column: 2 / 3"></x> + <x style="grid-row:10; grid-column: 2 / 3"></x> + <x style="grid-row:11; grid-column: 2 / 5"></x> + <x style="grid-row:12; grid-column: 2 / 4"></x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-004.html new file mode 100644 index 0000000..0d2a9687 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-004.html
@@ -0,0 +1,54 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid item using mix of outer/inner line names</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="line-names-004-ref.html"> + <style> +html,body { + color:black; background-color:white; font:24px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: auto / [a] 50px 50px 50px 50px [b] 50px 50px [a b]; + padding: 20px 10px; +} + +.subgrid { + display: grid; + grid-template-columns: subgrid [x] [b] [] [] [b]; + grid-auto-rows: 10px; + grid-column: 2 / span 4; +} + +x { background: grey; } + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <x style="grid-row:1; grid-column: b / b 2"></x> + <x style="grid-row:2; grid-column: b / b -1"></x> + <x style="grid-row:3; grid-column: b / b -2"></x> + <x style="grid-row:4; grid-column: b / span b"></x> + <x style="grid-row:5; grid-column: b / span b 2"></x> + <x style="grid-row:6; grid-column: span b / b 2"></x> + <x style="grid-row:7; grid-column: span b 2 / b 2"></x> + <x style="grid-row:8; grid-column: b -2 / b"></x> + <x style="grid-row:9; grid-column: b -3 / b"></x> + <x style="grid-row:10; grid-column: b / b"></x> + <x style="grid-row:11; grid-column: b / b 10"></x> + <x style="grid-row:12; grid-column: span b / b -2"></x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-005-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-005-ref.html new file mode 100644 index 0000000..4c7f4b50 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-005-ref.html
@@ -0,0 +1,153 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid line name resolution</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: [a] repeat(1, [b] auto [c]) [d] repeat(3, [b] auto [c]) [d] / + [a] 30px [b] 30px [c] 30px [] 30px [e-start] 30px [] 30px [x] 30px [h] 30px [i] 30px [j] 30px [k]; + grid-template-areas: ". . . e . . . . . . ."; + place-content: start; + border: 1px solid; + width: 500px; + grid-auto-columns: 100px; + grid-auto-rows: 100px; +} + +.subgrid { + display: grid; + grid: auto / subgrid; + background: lightgrey; + grid-column: 2 / span 8; + grid-row: 2 / span 2; + min-width:0; + min-height:0; +} + +.subgrid2 { + display: grid; + grid: auto / subgrid [] [] [] [b]; + grid-column: span 10; +} + +.subgrid#s1 { + grid-template-areas: ". e e . . . ."; +} + +i { + grid-row: 1; + counter-increment: i; +} +i::before { content: counter(i, decimal); } + +x { + min-width:10px; + min-height:20px; + background:silver; +} + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } + + </style> +</head> +<body> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid" id="s1"> + <x style="grid-column:10 / span 4">x</x> +</div> +</div> + +<div class="grid hr"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hl" id="s2"> + <x style="grid-column: 10 / span 4">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr" id="s2"> + <x style="grid-column: 10 / span 4">x</x> +</div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-column:1 / 4">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-column:10 / span 4">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-column: 1 / -1">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-row:2; grid-column: 1 / -1">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-column: span 4 / 11">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px; grid: auto / repeat(20, [a] 50px) [a] "> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2" style="grid-row:2"> + <x style="grid-column: 10 / 11">x</x> + </div> +</div> + +<div style="display:grid; grid: auto / repeat(10, 50px) repeat(10, [a] 50px) [a]"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid; grid-column: span 10; grid-row:2"> + <x style="grid-column: 1 / 11">x</x> + </div> +</div> + +<div style='display:grid; grid-template-areas: "a a a a a a a a a a"'> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid; grid-column: 6 / span 5; grid-row:2"> + <x style="grid-column: 1 / 6">x</x> + </div> +</div> + +<div style='display:grid; grid-template-areas: ". . . . . . a a a a"'> +<div style='display:grid; grid-template-areas: ". . . . . . . a a a"; grid-template-columns:subgrid; grid-column:span 10;'> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid; grid-column: 6 / span 5; grid-row:2"> + <x style="grid-column: 2 / 6">x</x> + </div> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-005.html new file mode 100644 index 0000000..43bde0b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-005.html
@@ -0,0 +1,155 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid line name resolution</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="line-names-005-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +.grid { + display: grid; + grid: [a] repeat(1, [b] auto [c]) [d] repeat(3, [b] auto [c]) [d] / + [a] 30px [b] 30px [c] 30px [] 30px [e-start] 30px [] 30px [x] 30px [h] 30px [i] 30px [j] 30px [k]; + grid-template-areas: ". . . e . . . . . . ."; + place-content: start; + border: 1px solid; + width: 500px; + grid-auto-columns: 100px; + grid-auto-rows: 100px; +} + +.subgrid { + display: grid; + grid: auto / subgrid; + background: lightgrey; + grid-column: 2 / span 8; + grid-row: 2 / span 2; + min-width:0; + min-height:0; +} + +.subgrid2 { + display: grid; + grid: auto / subgrid [] [] [] [b]; + grid-column: span 10; +} + +.subgrid#s1 { + grid-template-areas: ". e e . . . ."; +} + +i { + grid-row: 1; + counter-increment: i; +} +i::before { content: counter(i, decimal); } + +x { + min-width:10px; + min-height:20px; + background:silver; +} + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } + + </style> +</head> +<body> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid" id="s1"> + <x style="grid-column:foo / span 4">x</x> +</div> +</div> + +<div class="grid hr"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hl" id="s2"> + <x style="grid-column: x 6 / span 4">x</x> +</div> +</div> + +<div class="grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> +<div class="subgrid hr" id="s2"> + <x style="grid-column: x 6 / span 4">x</x> +</div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-column:1 / b">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-column:foo / span 4">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-column: span bar / foo 3">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-row:2; grid-column: span bar / foo 3">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px;"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2"> + <x style="grid-column:span 4 / foo">x</x> + </div> +</div> + +<div style="display:grid; width:500px; grid-auto-columns: 50px; grid: auto / repeat(20, [a] 50px) [a] "> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="subgrid2" style="grid-row:2"> + <x style="grid-column:foo / span 4">x</x> + </div> +</div> + +<div style="display:grid; grid: auto / repeat(10, 50px) repeat(10, [a] 50px) [a]"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid; grid-column: span 10; grid-row:2"> + <x style="grid-column: span a / a 8">x</x> + </div> +</div> + +<div style='display:grid; grid-template-areas: "a a a a a a a a a a"'> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid; grid-column: 6 / span 5; grid-row:2"> + <x style="grid-column: a">x</x> + </div> +</div> + +<div style='display:grid; grid-template-areas: ". . . . . . a a a a"'> +<div style='display:grid; grid-template-areas: ". . . . . . . a a a"; grid-template-columns:subgrid; grid-column:span 10;'> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid; grid-column: 6 / span 5; grid-row:2"> + <x style="grid-column: a">x</x> + </div> +</div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-006-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-006-ref.html new file mode 100644 index 0000000..e2c2ec2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-006-ref.html
@@ -0,0 +1,115 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid line name resolution</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +div > div { background: grey; grid-column: 2 / span 2; } + +i { + grid-row: 1; + counter-increment: i; +} +i::before { content: counter(i, decimal); } + +x { background: silver; } + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid; grid-template-areas: '. a a a a';"> + <x style="grid-column: 2 / 3">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [a];"> + <x style="grid-column: 1 / 2">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [a]; grid-column:1/span 2"> + <x style="grid-column: 1 / 2">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [a] [a]; grid-column-end:span 3"> + <x style="grid-column: 2 / 3">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [a] [a] [a] [a]; grid-column-end:span 3"> + <x style="grid-column: 3 / 4">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [] [a] [a]; grid-column-end:span 6"> + <x style="grid-column: 2 / 3">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid; grid-template-areas: '. a a a a';"> + <x style="grid-column: 2 / 3">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [a];"> + <x style="grid-column: 1 / 2">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [a]; grid-column:1/span 2"> + <x style="grid-column: 1 / 2">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [a] [a]; grid-column-end:span 3"> + <x style="grid-column: 2 / 3">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [a] [a] [a] [a]; grid-column-end:span 3"> + <x style="grid-column: 3 / 4">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [] [a] [a]; grid-column-end:span 6"> + <x style="grid-column: 2 / 3">x</x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-006.html new file mode 100644 index 0000000..0aa8c80 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-006.html
@@ -0,0 +1,117 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid line name resolution</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="line-names-006-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0; +} + +div > div { background: grey; grid-column: 2 / span 2; } + +i { + grid-row: 1; + counter-increment: i; +} +i::before { content: counter(i, decimal); } + +x { background: silver; } + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid; grid-template-areas: '. a a a a';"> + <x style="grid-column: a-end -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [a];"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [a]; grid-column:1/span 2"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [a] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [a] [a] [a] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div style="display:grid; grid:auto/subgrid [] [a] [a]; grid-column-end:span 6"> + <x style="grid-column: a">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid; grid-template-areas: '. a a a a';"> + <x style="grid-column: a-end -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [a];"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [a]; grid-column:1/span 2"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [a] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [a] [a] [a] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div style="display:grid"> +<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> + <div class="hr" style="display:grid; grid:auto/subgrid [] [a] [a]; grid-column-end:span 6"> + <x style="grid-column: a">x</x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-007-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-007-ref.html new file mode 100644 index 0000000..2b06d9c3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-007-ref.html
@@ -0,0 +1,134 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: line name resolution for grid-aligned abs.pos. inside subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; +} + +.grid { + position: relative; + display: grid; + grid: 0.2em / repeat(10,30px); + grid-auto-rows: 2em; + border: 1px solid; + padding: 1px 2px; +} + +div > div { + padding: 4px 0 1px 0; + border: 3px solid black; + background: grey; + margin-left: 30px; + width: 54px; +} + +n { + grid-row: 1; + counter-increment: n; +} +n::before { content: counter(n, decimal); } + +x { + position: absolute; + left:0; right:0; + background: silver; +} + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="margin-left:0"> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="width:84px"> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="width:84px"> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="width:174px"> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr"> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr"> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="margin-left:0"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="width:84px"> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="width:84px"> + <x>x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="width:174px"> + <x>x</x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-007.html new file mode 100644 index 0000000..d70a86b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-007.html
@@ -0,0 +1,137 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: line name resolution for grid-aligned abs.pos. inside subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="line-names-007-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; +} + +.grid { + position: relative; + display: grid; + grid: 0.2em / repeat(10,30px); + grid-auto-rows: 2em; + border: 1px solid; + padding: 1px 2px; +} + +div > div { + display: grid; + grid-column: 2 / span 2; + grid: auto / subgrid; + padding: 4px 33px 1px 10px; + border: 3px solid black; + background: grey; +} + +n { + grid-row: 1; + counter-increment: n; +} +n::before { content: counter(n, decimal); } + +x { + position: absolute; + left:0; right:0; + background: silver; +} + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-areas: '. a a a a';"> + <x style="grid-column: a-end -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [a];"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [a]; grid-column:1/span 2"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [a] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [a] [a] [a] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [] [a] [a]; grid-column-end:span 6"> + <x style="grid-column: a">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-areas: '. a a a a';"> + <x style="grid-column: a-end -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [a];"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [a]; grid-column:1/span 2"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [a] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [a] [a] [a] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [] [a] [a]; grid-column-end:span 6"> + <x style="grid-column: a">x</x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-008-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-008-ref.html new file mode 100644 index 0000000..262fa548 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-008-ref.html
@@ -0,0 +1,162 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: line name resolution for grid-aligned abs.pos. inside subgrid CB</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; +} + +.grid { + display: grid; + grid: 0.2em 1.4em / repeat(10,30px); + border: 1px solid; + padding: 0 2px; +} + +div > div { + position: relative; + display: grid; + grid-column: 2 / span 2; + grid: auto / subgrid; + padding: 4px 0 1px 10px; + border: 1px solid black; + background: grey; +} + +n { + grid-row: 1; + counter-increment: n; +} +n::before { content: counter(n, decimal); } + +x { + position: absolute; + left:0; right:0; + background: silver; +} + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div> + <x style="grid-column: -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div> + <x style="grid-column: 2">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-column-end:span 5"> + <x style="grid-column: 2">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-column:2/span 5"> + <x style="grid-column: 4">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-column-end:span 6"> + <x style="grid-column: 2 / 4">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-column-end:span 3"> + <x style="grid-column: -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-column:2/span 6"> + <x style="grid-column: 3 / 5">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-column:2/span 6"> + <x style="grid-column: 3 / 5">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr"> + <x style="grid-column: 3 / auto">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr"> + <x style="grid-column: 2 / auto">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-column-end:span 5"> + <x style="grid-column: 2 / auto">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-column:2/span 5"> + <x style="grid-column: 6 / auto">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-column-end:span 6"> + <x style="grid-column: 2 / 4">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-column-end:span 3"> + <x style="grid-column: 4 / auto">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-column:2/span 6"> + <x style="grid-column: 5 / 7">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-column:2/span 6"> + <x style="grid-column: 5 / 7">x</x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-008.html new file mode 100644 index 0000000..7b95912 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/line-names-008.html
@@ -0,0 +1,164 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: line name resolution for grid-aligned abs.pos. inside subgrid CB</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="line-names-008-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; +} + +.grid { + display: grid; + grid: 0.2em 1.4em / repeat(10,30px); + border: 1px solid; + padding: 0 2px; +} + +div > div { + position: relative; + display: grid; + grid-column: 2 / span 2; + grid: auto / subgrid; + padding: 4px 0 1px 10px; + border: 1px solid black; + background: grey; +} + +n { + grid-row: 1; + counter-increment: n; +} +n::before { content: counter(n, decimal); } + +x { + position: absolute; + left:0; right:0; + background: silver; +} + +.hr { writing-mode: horizontal-tb; direction:rtl; } + </style> +</head> +<body> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-areas: '. a a a a';"> + <x style="grid-column: a-end -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [][a][];"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(9,30px) [a] 30px"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [][a][]; grid-column-end:span 5"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(5,[a]30px) repeat(5,30px)"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [a]; grid-column:2/span 5"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(4,30px) [a] 30px repeat(5,30px)"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [a] [a]; grid-column-end:span 6"> + <x style="grid-column: a 2 / a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [a] [a] [] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(3,30px) [a] 30px repeat(7,30px)"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [] [] [] [] [a]; grid-column:2/span 6"> + <x style="grid-column: a/span a">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(3,30px) [a] 30px repeat(7,30px)"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid [] [] [] [] [a]; grid-column:2/span 6"> + <x style="grid-column: a/a 2">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-areas: '. a a a a';"> + <x style="grid-column: a-end -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [][a][];"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(9,30px) [a] 30px"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [][a][]; grid-column-end:span 5"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(5,[a]30px) repeat(5,30px)"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [a]; grid-column:2/span 5"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(4,30px) [a] 30px repeat(5,30px)"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [a] [a]; grid-column-end:span 6"> + <x style="grid-column: a 2 / a -1">x</x> + </div> +</div> + +<div class="grid"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [a] [a] [] [a]; grid-column-end:span 3"> + <x style="grid-column: a -1">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(3,30px) [a] 30px repeat(7,30px)"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [] [] [] [] [a]; grid-column:2/span 6"> + <x style="grid-column: a/span a">x</x> + </div> +</div> + +<div class="grid" style="grid-template-columns: repeat(3,30px) [a] 30px repeat(7,30px)"> +<n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="hr" style="grid-template-columns: subgrid [] [] [] [] [a]; grid-column:2/span 6"> + <x style="grid-column: a/a 2">x</x> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001-ref.html new file mode 100644 index 0000000..4f0f6f9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001-ref.html
@@ -0,0 +1,89 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrids with different writing-mode than parent</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(5, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: auto / auto; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 2 / span 5; + min-width:10px; + min-height:0; + border: 0 solid lightblue; + border-bottom-width: 40px; +} + +.vlr { + writing-mode: vertical-lr; + grid: auto / auto; + grid-column: 2 / span 5; + grid-row: 3 / span 5; + background: blue; +} + +x { + min-width:10px; + min-height:0px; +} +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: grey; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: black; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } +.vl { writing-mode: vertical-lr; } +.vr { writing-mode: vertical-rl; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +.vrl { writing-mode: vertical-rl; direction:ltr; } + + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="text-indent:10px"> + A B + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vr"> + <div class="subgrid hr">A B</div> + </div> +</div> + +<div class="grid"> +<x style="grid-row:3; height:50px; background:black"></x> +<x style="grid-row:4; height:50px; background:pink"></x> +<x style="grid-row:5; height:40px; background:black"></x> +<div class="subgrid vlr"> +<div class="subgrid hl"> + <x style="grid-row:2 / span 2; height: 100px">A B C D E F</x> +</div> +</div> +</div> + + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001.html new file mode 100644 index 0000000..1cf99a7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-001.html
@@ -0,0 +1,89 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrids with different writing-mode than parent</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="orthogonal-writing-mode-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 monospace; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(5, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: subgrid / auto; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 2 / span 5; + min-width:10px; + min-height:0; + border: 0 solid lightblue; + border-bottom-width: 40px; +} + +.vlr { + writing-mode: vertical-lr; + grid: auto / subgrid; + grid-column: 2 / span 5; + grid-row: 3 / span 5; + background: blue; +} + +x { + min-width:10px; + min-height:0px; +} +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: grey; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: black; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } +.vl { writing-mode: vertical-lr; } +.vr { writing-mode: vertical-rl; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +.vrl { writing-mode: vertical-rl; direction:ltr; } + + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="text-indent:10px"> + A B + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vr"> + <div class="subgrid hr">A B</div> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> +<div class="subgrid vlr"> +<div class="subgrid hl"> + <x style="grid-row:2 / span 2; height: 100px">A B C D E F</x> +</div> +</div> +</div> + + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002-ref.html new file mode 100644 index 0000000..7c51c02 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002-ref.html
@@ -0,0 +1,90 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrids with different writing-mode than parent</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:12px/1 Ahem; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(5, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: auto / auto; + grid-column: 2 / span 5; + grid-row: 2 / span 5; + min-width:10px; + min-height:0; + border: 0 solid lightblue; + border-bottom-width: 40px; + background: yellow; + padding: 1px 3px 5px 7px; + margin: 3px 11px 7px 5px; +} + +.vlr { + writing-mode: vertical-lr; + grid: auto / auto; + grid-column: 2 / span 5; + grid-row: 3 / span 5; + background: blue; +} + +x { + min-width:10px; + min-height:0px; +} + +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: grey; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: black; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } +.vl { writing-mode: vertical-lr; } +.vr { writing-mode: vertical-rl; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +.vrl { writing-mode: vertical-rl; direction:ltr; } + + </style> +</head> +<body> + +<div class="grid vrl"> +<x style="grid-column:1; height:0px"></x><x style="grid-column:2; height:16px"></x><x style="grid-column:3; height:30px"></x><x style="grid-column:4; height:52px"></x> +<div class="subgrid hl"> + <x style="grid-column:span 12">A _B</x> + <x style="width:100px; height:30px"></x> + <x style="background:yellow">C D_</x> +</div> +</div> + +<div class="grid"> +<x style="grid-row:1; height:0px"></x><x style="grid-row:2; height:0px"></x><x style="grid-row:3; height:52px"></x><x style="grid-row:4; height:30px"></x> +<div class="subgrid vlr" style="grid: auto / repeat(5, auto);"> + <x>A _B</x> + <x style="width:100px; height:30px"></x> + <x>C D_</x> +</div> +</div> + +<div class="grid"> +<x style="grid-row:1; height:0px"></x><x style="grid-row:2; height:0px"></x><x style="grid-row:3; height:4px"></x> +<div class="subgrid vlr"></div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002.html new file mode 100644 index 0000000..20a4b0ccf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-002.html
@@ -0,0 +1,92 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrids with different writing-mode than parent</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="orthogonal-writing-mode-002-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 Ahem; +} + +.grid { + display: grid; + grid: repeat(4, auto) / repeat(5, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: subgrid / auto; + grid-column: 2 / span 5; + grid-row: 2 / span 5; + min-width:10px; + min-height:0; + border: 0 solid lightblue; + border-bottom-width: 40px; + background: yellow; + padding: 1px 3px 5px 7px; + margin: 3px 11px 7px 5px; +} + +.vlr { + writing-mode: vertical-lr; + grid: auto / subgrid; + grid-column: 2 / span 5; + grid-row: 3 / span 5; + background: blue; +} + +x { + min-width:10px; + min-height:0px; +} + +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: grey; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: black; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } +.vl { writing-mode: vertical-lr; } +.vr { writing-mode: vertical-rl; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +.vrl { writing-mode: vertical-rl; direction:ltr; } + + </style> +</head> +<body> + +<div class="grid vrl"> +<x style="grid-column:1"></x><x style="grid-column:2"></x><x style="grid-column:3"></x><x style="grid-column:4"></x><x style="grid-column:5"></x><x style="grid-column:6"></x> +<div class="subgrid hl"> + <x style="grid-column:span 12">A _B</x> + <x style="width:100px; height:30px"></x> + <x style="background:yellow">C D_</x> +</div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> +<div class="subgrid vlr"> + <x>A _B</x> + <x style="width:100px; height:30px"></x> + <x>C D_</x> +</div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> +<div class="subgrid vlr"></div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003-ref.html new file mode 100644 index 0000000..3026548 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003-ref.html
@@ -0,0 +1,104 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrids with different writing-mode than parent</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:12px/1 Ahem; +} + +.grid { + display: grid; + grid: 2px repeat(4, auto) / 10px repeat(50, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: repeat(50, auto) / repeat(4, auto); + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 3 / span 3; + min-width:10px; + min-height:0; + border: solid lightblue; + border-width: 1px 5px 3px 7px; + padding: 5px 7px 3px 1px; + margin: 7px 3px 5px 1px; +} + +item { text-indent:10px; background: magenta; } + +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: grey; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: black; } +x:nth-child(2n+5) { background: blue; } +x:nth-child(2n+6) { background: cyan; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } +.vl { writing-mode: vertical-lr; } +.vr { writing-mode: vertical-rl; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +.vrl { writing-mode: vertical-rl; direction:ltr; } + + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0"></x><x style="grid-row:3;height:25px"></x><x style="grid-row:4;height:0px"></x><x style="grid-row:5;height:11px"></x> + <div class="subgrid vrl"> + <item class="hl">AB</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:13px"></x><x style="grid-row:4;height:0px"></x><x style="grid-row:5;height:23px"></x> + <div class="subgrid vlr"> + <item class="hl">AB</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:25px"></x><x style="grid-row:4;height:0px"></x><x style="grid-row:5;height:11px"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item class="hl">AB</item> + </div> + <item class="hl" style="grid-area:3/5/4/6">AB</item> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:40px"></x><x style="grid-row:4;height:0px"></x><x style="grid-row:5;height:11px"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item class="hl" style="height:27px">AB</item> + </div> + <item class="hl" style="grid-area:3/5/4/6; height:40px; width:10px"></item> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:25px"></x><x style="grid-row:4;height:40px"></x><x style="grid-row:5;height:11px"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item class="hl" style="height:12px">AB</item> + </div> + <item class="hl" style="grid-area:4/5/5/6; height:40px; width:10px"></item> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:25px"></x><x style="grid-row:4;height:0px"></x><x style="grid-row:5;height:40px"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item class="hl" style="height:12px">AB</item> + </div> + <item class="hl" style="grid-area:5/5/6/6; height:40px; width:10px"></item> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003.html new file mode 100644 index 0000000..2cd17d6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-003.html
@@ -0,0 +1,106 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrids with different writing-mode than parent</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="orthogonal-writing-mode-003-ref.html"> + <style> +html,body { + color:black; background-color:white; font:12px/1 Ahem; +} + +.grid { + display: grid; + grid: 2px repeat(4, auto) / 10px repeat(50, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: subgrid / subgrid; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 3 / span 3; + min-width:10px; + min-height:0; + border: solid lightblue; + border-width: 1px 5px 3px 7px; + padding: 5px 7px 3px 1px; + margin: 7px 3px 5px 1px; +} + +item { text-indent:10px; background: magenta; } + +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: grey; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: black; } +x:nth-child(2n+5) { background: blue; } +x:nth-child(2n+6) { background: cyan; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } +.vl { writing-mode: vertical-lr; } +.vr { writing-mode: vertical-rl; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +.vrl { writing-mode: vertical-rl; direction:ltr; } + + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl"> + <item class="hl">AB</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vlr"> + <item class="hl">AB</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item class="hl">AB</item> + </div> + <item class="hl" style="grid-area:3/5/4/6">AB</item> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item class="hl">AB</item> + </div> + <item class="hl" style="grid-area:3/5/4/6; height:40px; width:10px"></item> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item class="hl">AB</item> + </div> + <item class="hl" style="grid-area:4/5/5/6; height:40px; width:10px"></item> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item class="hl">AB</item> + </div> + <item class="hl" style="grid-area:5/5/6/6; height:40px; width:10px"></item> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004-ref.html new file mode 100644 index 0000000..1de585b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004-ref.html
@@ -0,0 +1,128 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrids with different writing-mode than parent</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> +html,body { + color:black; background-color:white; font:10px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 2px repeat(4, auto) / 10px repeat(50, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: repeat(4, auto) / repeat(50, auto);; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 3 / span 3; + min-width:10px; + min-height:0; + border: solid lightblue; + border-width: 1px 5px 3px 7px; + padding: 5px 7px 3px 1px; + margin: 7px 3px 5px 1px; +} + +item { background: magenta; } + +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: grey; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: black; } +x:nth-child(2n+5) { background: blue; } +x:nth-child(2n+6) { background: cyan; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } +.vl { writing-mode: vertical-lr; } +.vr { writing-mode: vertical-rl; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +.vrl { writing-mode: vertical-rl; direction:ltr; } + + </style> +</head> +<body> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:13px"></x><x style="grid-row:4;height:10px"></x><x style="grid-row:5;height:21px"></x> + <div class="subgrid vlr" style="grid-column:2/5"> + <item>X</item><item>É</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:23px"></x><x style="grid-row:4;height:10px"></x><x style="grid-row:5;height:21px"></x> <div class="subgrid vlr" style="grid-column:2/5"> + <item>X</item><item>É</item><item>C</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:23px"></x><x style="grid-row:4;height:10px"></x><x style="grid-row:5;height:11px"></x> + <div class="subgrid vrl" style="grid-column:5/8"> + <item>X</item><item>É</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:23px"></x><x style="grid-row:4;height:10px"></x><x style="grid-row:5;height:21px"></x> + <div class="subgrid vrl" style="grid-column:5/8"> + <item>X</item><item>É</item><item>C</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:13px"></x><x style="grid-row:4;height:10px"></x><x style="grid-row:5;height:21px"></x> + <div class="subgrid vlr" style="grid-column:2/5"> + <item>X</item><item>É</item> + </div> + <div class="subgrid vlr" style="grid-column:5/8"> + <item>X</item><item>É</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:23px"></x><x style="grid-row:4;height:10px"></x><x style="grid-row:5;height:11px"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item>X</item><item>É</item> + </div> + <div class="subgrid vrl" style="grid-column:5/8"> + <item>X</item><item>É</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:23px"></x><x style="grid-row:4;height:20px"></x><x style="grid-row:5;height:21px"></x> + <div class="subgrid vlr" style="grid-column:2/5; grid-template-columns:10px 20px"> + <item>X</item><item>É</item> + </div> + <div class="subgrid vrl" style="grid-column:5/8; grid-template-columns:10px 20px"> + <item>X</item><item>ÉÉ</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1;height:2px"></x><x style="grid-row:2;height:0px"></x><x style="grid-row:3;height:43px"></x><x style="grid-row:4;height:20px"></x><x style="grid-row:5;height:21px"></x> + <div class="subgrid vlr" style="grid-column:2/5; grid-template-columns:10px 20px"> + <item>X</item><item class="">É</item> + </div> + <div class="subgrid vrl" style="grid-column:5/8; grid-template-columns:30px 20px"> + <item>X</item><item>ÉÉ</item> + </div> + <div class="subgrid vrl" style="grid-column:8/11; grid-template-columns:30px 20px"> + <item>XXX</item><item>É</item> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004.html new file mode 100644 index 0000000..4a0edd7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/orthogonal-writing-mode-004.html
@@ -0,0 +1,131 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrids with different writing-mode than parent</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <link rel="match" href="orthogonal-writing-mode-004-ref.html"> + <style> +html,body { + color:black; background-color:white; font:10px/1 Ahem; padding:0; margin:0; +} + +.grid { + display: grid; + grid: 2px repeat(4, auto) / 10px repeat(50, auto); + place-content: start; + border: 1px solid; +} + +.subgrid { + display: grid; + grid: subgrid / subgrid; + background: lightgrey; + grid-column: 2 / span 5; + grid-row: 3 / span 3; + min-width:10px; + min-height:0; + border: solid lightblue; + border-width: 1px 5px 3px 7px; + padding: 5px 7px 3px 1px; + margin: 7px 3px 5px 1px; +} + +item { background: magenta; } + +x:nth-child(2n+1) { background: silver; } +x:nth-child(2n+2) { background: grey; } +x:nth-child(2n+3) { background: pink; } +x:nth-child(2n+4) { background: black; } +x:nth-child(2n+5) { background: blue; } +x:nth-child(2n+6) { background: cyan; } + +.hl { writing-mode: horizontal-tb; direction:ltr; } +.hr { writing-mode: horizontal-tb; direction:rtl; } +.vl { writing-mode: vertical-lr; } +.vr { writing-mode: vertical-rl; } +.vlr { writing-mode: vertical-lr; direction:rtl; } +.vrl { writing-mode: vertical-rl; direction:ltr; } + + </style> +</head> +<body> + +<div class="grid"> + <x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vlr" style="grid-column:2/5"> + <item>X</item><item>É</item> + </div> +</div> + +<div class="grid"> + <x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vlr" style="grid-column:2/5"> + <item>X</item><item>É</item><item>C</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="grid-column:5/8"> + <item>X</item><item>É</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="grid-column:5/8"> + <item>X</item><item>É</item><item>C</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vlr" style="grid-column:2/5"> + <item>X</item><item>É</item> + </div> + <div class="subgrid vlr" style="grid-column:5/8"> + <item>X</item><item>É</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vrl" style="grid-column:2/5"> + <item>X</item><item>É</item> + </div> + <div class="subgrid vrl" style="grid-column:5/8"> + <item>X</item><item>É</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vlr" style="grid-column:2/5"> + <item>X</item><item>É</item> + </div> + <div class="subgrid vrl" style="grid-column:5/8"> + <item>X</item><item>ÉÉ</item> + </div> +</div> + +<div class="grid"> +<x style="grid-row:1"></x><x style="grid-row:2"></x><x style="grid-row:3"></x><x style="grid-row:4"></x><x style="grid-row:5"></x><x style="grid-row:6"></x> + <div class="subgrid vlr" style="grid-column:2/5"> + <item>X</item><item>É</item> + </div> + <div class="subgrid vrl" style="grid-column:5/8"> + <item>X</item><item>ÉÉ</item> + </div> + <div class="subgrid vrl" style="grid-column:8/11"> + <item>XXX</item><item>É</item> + </div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001-ref.html new file mode 100644 index 0000000..d264a34 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001-ref.html
@@ -0,0 +1,98 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid item auto block-size</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + + +body { width:600px; } + +.grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-auto-flow:dense; + column-gap: 40px; + row-gap: 0px; +} + +.card { + background-color: #fff; + grid-row: auto / span 3; + grid-template-rows: repeat(3, auto); + grid-template-columns: auto; + display: grid; + row-gap: 40px; +} + + +.card .inner, .card footer { + padding: 10px; +} + +.card .inner { background: grey; } + +.card h2 { + margin: 0; + color: #fff; + background-color: rgb(3,99,143); + border-bottom: 4px solid rgb(24,154,153); +} + +.card footer { + background-color: rgb(182,222,211); +} + +* { box-sizing: border-box; } + +item { + border: 1px solid; + visibility: visible; +} + +.hidden { visibility: hidden; } +</style> +<body> + +<div class="grid"> + + <div class="card"> + <h2><span class="hidden">My title</span></h2> + <div class="inner"> + <p>The contents.<span class="hidden"> I have a lot of content, more content than the other ones.</span></p> + </div> + <footer>Footer contents</footer> + </div> + + <div class="card hidden"> + <h2 style="grid-area:1/1"><span>My title</span></h2> + <div class="inner" style="grid-area:2/1"> + <p>The contents. I have a lot of content, more content than the other ones.</p> + </div> + <footer style="grid-area:3/1">Footer contents</footer> + + <item style="grid-area:1/1">1</item> + <item style="grid-area:2/1">2</item> + <item style="grid-area:3/1">3</item> + + </div> + + <div class="card"> + <h2>My title</h2> + <div class="inner"> + <p>The contents. I have a lot of content, more content than the other ones.</p> + </div> + <footer><span class="hidden">Footer contents</span></footer> + </div> + +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001.html new file mode 100644 index 0000000..29e8219 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001.html
@@ -0,0 +1,88 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid item auto block-size</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="subgrid-item-block-size-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0; +} + + +body { width:600px; } + +.grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-auto-flow:dense; + gap: 40px; +} + +.card { + background-color: #fff; + grid-row: auto / span 3; + grid-template-rows: subgrid; + grid-template-columns: auto; + display: grid; +} + + +.card .inner, .card footer { + padding: 10px; +} + +.card .inner { background: grey; } + +.card h2 { + margin: 0; + color: #fff; + background-color: rgb(3,99,143); + border-bottom: 4px solid rgb(24,154,153); +} + +.card footer { + background-color: rgb(182,222,211); +} + +* { box-sizing: border-box; } + +item { + border: 1px solid; + grid-column: 2; +} + +</style> +<body> + +<div class="grid"> + + <div class="card"> + <h2></h2> + <div class="inner"> + <p>The contents.</p> + </div> + <footer>Footer contents</footer> + </div> + + <item>1</item> + <item>2</item> + <item>3</item> + + <div class="card"> + <h2>My title</h2> + <div class="inner"> + <p>The contents. I have a lot of content, more content than the other ones.</p> + </div> + <footer></footer> + </div> + +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-invalid.html index 129d403e..cf8aa25 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-invalid.html +++ b/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-invalid.html
@@ -45,6 +45,13 @@ test_invalid_value("clip-path", "polygon(1%)"); test_invalid_value("clip-path", "unknown-box"); + +test_invalid_value("clip-path", 'path(abc, "m 20 0 h -100 z")'); +test_invalid_value("clip-path", 'path(nonzero)'); +test_invalid_value("clip-path", 'path(evenodd, "")'); +test_invalid_value("clip-path", 'path("m 20 0 h -100", nonzero)'); + + </script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-valid-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-valid-expected.txt index b2b3782..3e01d73 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-valid-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-valid-expected.txt
@@ -23,6 +23,9 @@ PASS e.style['clip-path'] = "polygon(1% 2%)" should set the property value PASS e.style['clip-path'] = "polygon(nonzero, 1px 2px, 3em 4em)" should set the property value PASS e.style['clip-path'] = "polygon(evenodd, 1px 2px, 3em 4em, 5pt 6%)" should set the property value +FAIL e.style['clip-path'] = "path(\"m 20 0 h -100\")" should set the property value assert_not_equals: property should be set got disallowed value "" +FAIL e.style['clip-path'] = "path(evenodd, \"M 20 20 h 60 v 60 h -60 Z M 30 30 h 40 v 40 h -40 Z\")" should set the property value assert_not_equals: property should be set got disallowed value "" +FAIL e.style['clip-path'] = "path(nonzero, \"M20,20h60 v60 h-60z M30,30 h40 v40 h-40z\")" should set the property value assert_not_equals: property should be set got disallowed value "" FAIL e.style['clip-path'] = "border-box" should set the property value assert_not_equals: property should be set got disallowed value "" FAIL e.style['clip-path'] = "padding-box" should set the property value assert_not_equals: property should be set got disallowed value "" FAIL e.style['clip-path'] = "content-box" should set the property value assert_not_equals: property should be set got disallowed value ""
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-valid.html b/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-valid.html index e734b90..895cdfac 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-valid.html +++ b/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-valid.html
@@ -42,6 +42,14 @@ test_valid_value("clip-path", "polygon(nonzero, 1px 2px, 3em 4em)", "polygon(1px 2px, 3em 4em)"); test_valid_value("clip-path", "polygon(evenodd, 1px 2px, 3em 4em, 5pt 6%)"); +// New supported shape in [css-shapes-2] +// https://drafts.csswg.org/css-shapes-2/#supported-basic-shapes +test_valid_value("clip-path", 'path("m 20 0 h -100")'); +test_valid_value("clip-path", 'path(evenodd, "M 20 20 h 60 v 60 h -60 Z M 30 30 h 40 v 40 h -40 Z")'); +test_valid_value("clip-path", + 'path(nonzero, "M20,20h60 v60 h-60z M30,30 h40 v40 h-40z")', + 'path("M 20 20 h 60 v 60 h -60 Z M 30 30 h 40 v 40 h -40 Z")'); + // <geometry-box> test_valid_value("clip-path", "border-box"); test_valid_value("clip-path", "padding-box"); @@ -57,7 +65,7 @@ // <geometry-box> basic-shape> test_valid_value("clip-path", "border-box circle(7% at 8% 9%)"); -// <clip-source> +// <clip-source> test_valid_value("clip-path", "url(https://example.com/)", ["url(https://example.com/)", "url(\"https://example.com/\")"]); test_valid_value("clip-path", "url(\"https://example.com/\")", ["url(https://example.com/)", "url(\"https://example.com/\")"]); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/image-001.html b/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/image-001.html new file mode 100644 index 0000000..475c917 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/image-001.html
@@ -0,0 +1,29 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Scroll Anchoring: Anchor node can be an image</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/#anchor-node-selection"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4247"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1540203"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +body { height: 4000px } +#spacer { height: 100px } +img { + width: 500px; + height: 500px; + background: green; +} +</style> +<div id=spacer></div> +<br><br> +<img> +<script> +test(() => { + document.scrollingElement.scrollTop = 150; + document.querySelector("#spacer").style.height = "150px"; + assert_equals(document.scrollingElement.scrollTop, 200); +}, "Anchor selection can select images"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/inline-block-002.html b/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/inline-block-002.html new file mode 100644 index 0000000..9163d34 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/inline-block-002.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Scroll Anchoring: Anchor node can be an empty inline-block</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/#anchor-node-selection"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4247"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1540203"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +body { height: 4000px } +#ib1, #ib2 { display: inline-block; height: 100px; width: 100% } +</style> +<span id=ib1></span> +<br><br> +<span id=ib2></span> +<script> + +// Tests anchoring to an empty inline-block. + +test(() => { + document.scrollingElement.scrollTop = 150; + document.querySelector("#ib1").style.height = "150px"; + assert_equals(document.scrollingElement.scrollTop, 200); +}, "Anchor selection can select empty inline-blocks"); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/row-group-margin-border-padding-ref.html b/third_party/blink/web_tests/external/wpt/css/css-tables/row-group-margin-border-padding-ref.html new file mode 100644 index 0000000..aa3e68e6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-tables/row-group-margin-border-padding-ref.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html> +<head> + <title>Reference: table-row-group border/padding/margin has no effect in border-collapse:separate tables</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> +<style> +.ltr { direction:ltr; } +.rtl { direction:rtl; } +table, td { + border: 3px solid; +} +.bc table { + border-collapse: collapse; +} + +.inherited td { + border: 3px dashed; + padding: 5px; + margin: 7px; +} +</style> +</head> +<body> + +<table class="ltr"><tbody><tr><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody><tr><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody><tr><td></td><td></td></tr></tbody></table> + +<table class="rtl"><tbody><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody><tr><td></td><td></td></tr></tbody></table> + +<table class="ltr"><tbody class="inherited"><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody class="inherited"><tr><td></td><td></td></tr></tbody></table> + +<div class="bc"> +<table class="rtl"><tbody><tr style="border: 20px solid"><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody><tr><td></td><td></td></tr></tbody></table> + +<table class="ltr"><tbody><tr style="border: 20px solid"><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody><tr><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody><tr><td></td><td></td></tr></tbody></table> + +<table class="rtl"><tbody class="inherited"><tr><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody class="inherited"><tr><td></td><td></td></tr></tbody></table> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/row-group-margin-border-padding.html b/third_party/blink/web_tests/external/wpt/css/css-tables/row-group-margin-border-padding.html new file mode 100644 index 0000000..97c7a6e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-tables/row-group-margin-border-padding.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<html> +<head> + <title>CSS Table test: table-row-group border/padding/margin has no effect in border-collapse:separate tables</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://www.w3.org/TR/CSS22/tables.html#separated-borders"> + <link rel="match" href="row-group-margin-border-padding-ref.html"> +<style> +.ltr { direction:ltr; } +.rtl { direction:rtl; } +table, td { + border: 3px solid; +} +.bc table { + border-collapse: collapse; +} + +tbody.inherited { + border: 3px dashed; + padding: 5px; + margin: 7px; +} +.inherited * { + border:inherit; + padding:inherit; + margin:inherit; +} +</style> +</head> +<body> + +<table class="ltr"><tbody style="border: 20px solid"><tr><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody style="padding: 20px"><tr><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody style="margin: 20px"><tr><td></td><td></td></tr></tbody></table> + +<table class="rtl"><tbody style="border: 20px solid"><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody style="padding: 20px"><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody style="margin: 20px"><tr><td></td><td></td></tr></tbody></table> + +<table class="ltr"><tbody class="inherited"><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody class="inherited"><tr><td></td><td></td></tr></tbody></table> + +<!-- ditto with border-collapse:collapse --> +<div class="bc"> +<table class="ltr"><tbody style="border: 20px solid"><tr><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody style="padding: 20px"><tr><td></td><td></td></tr></tbody></table> +<table class="ltr"><tbody style="margin: 20px"><tr><td></td><td></td></tr></tbody></table> + +<table class="rtl"><tbody style="border: 20px solid"><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody style="padding: 20px"><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody style="margin: 20px"><tr><td></td><td></td></tr></tbody></table> + +<table class="ltr"><tbody class="inherited"><tr><td></td><td></td></tr></tbody></table> +<table class="rtl"><tbody class="inherited"><tr><td></td><td></td></tr></tbody></table> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/row-margin-border-padding-ref.html b/third_party/blink/web_tests/external/wpt/css/css-tables/row-margin-border-padding-ref.html new file mode 100644 index 0000000..68cbcfc9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-tables/row-margin-border-padding-ref.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html> +<head> + <title>Reference: table-row border/padding/margin has no effect in border-collapse:separate tables</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> +<style> +.ltr { direction:ltr; } +.rtl { direction:rtl; } +table, td { + border: 3px solid; +} +.bc table { + border-collapse: collapse; +} + +.inherited > td { + border: 3px dashed; + padding: 5px; + margin: 7px; +} +</style> +</head> +<body> + +<table class="ltr"><tr><td></td><td></td></tr></table> +<table class="ltr"><tr><td></td><td></td></tr></table> +<table class="ltr"><tr><td></td><td></td></tr></table> + +<table class="rtl"><tr><td></td><td></td></tr></table> +<table class="rtl"><tr><td></td><td></td></tr></table> +<table class="rtl"><tr><td></td><td></td></tr></table> + +<table class="ltr"><tr class="inherited"><td></td><td></td></tr></table> +<table class="rtl"><tr class="inherited"><td></td><td></td></tr></table> + +<div class="bc"> +<table class="rtl"><tr style="border: 20px solid"><td></td><td></td></tr></table> +<table class="rtl"><tr><td></td><td></td></tr></table> +<table class="rtl"><tr><td></td><td></td></tr></table> + +<table class="ltr"><tr style="border: 20px solid"><td></td><td></td></tr></table> +<table class="ltr"><tr><td></td><td></td></tr></table> +<table class="ltr"><tr><td></td><td></td></tr></table> + +<table class="rtl"><tr class="inherited"><td></td><td></td></tr></table> +<table class="ltr"><tr class="inherited"><td></td><td></td></tr></table> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/row-margin-border-padding.html b/third_party/blink/web_tests/external/wpt/css/css-tables/row-margin-border-padding.html new file mode 100644 index 0000000..c6606d9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-tables/row-margin-border-padding.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<html> +<head> + <title>CSS Table test: table-row border/padding/margin has no effect in border-collapse:separate tables</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://www.w3.org/TR/CSS22/tables.html#separated-borders"> + <link rel="match" href="row-margin-border-padding-ref.html"> +<style> +.ltr { direction:ltr; } +.rtl { direction:rtl; } +table, td { + border: 3px solid; +} +.bc table { + border-collapse: collapse; +} + +tr.inherited { + border: 3px dashed; + padding: 5px; + margin: 7px; +} +.inherited > td { + border:inherit; + padding:inherit; + margin:inherit; +} +</style> +</head> +<body> + +<table class="ltr"><tr style="border: 20px solid"><td></td><td></td></tr></table> +<table class="ltr"><tr style="padding: 20px"><td></td><td></td></tr></table> +<table class="ltr"><tr style="margin: 20px"><td></td><td></td></tr></table> + +<table class="rtl"><tr style="border: 20px solid"><td></td><td></td></tr></table> +<table class="rtl"><tr style="padding: 20px"><td></td><td></td></tr></table> +<table class="rtl"><tr style="margin: 20px"><td></td><td></td></tr></table> + +<table class="ltr"><tr class="inherited"><td></td><td></td></tr></table> +<table class="rtl"><tr class="inherited"><td></td><td></td></tr></table> + +<!-- ditto with border-collapse:collapse --> +<div class="bc"> +<table class="ltr"><tr style="border: 20px solid"><td></td><td></td></tr></table> +<table class="ltr"><tr style="padding: 20px"><td></td><td></td></tr></table> +<table class="ltr"><tr style="margin: 20px"><td></td><td></td></tr></table> + +<table class="rtl"><tr style="border: 20px solid"><td></td><td></td></tr></table> +<table class="rtl"><tr style="padding: 20px"><td></td><td></td></tr></table> +<table class="rtl"><tr style="margin: 20px"><td></td><td></td></tr></table> + +<table class="ltr"><tr class="inherited"><td></td><td></td></tr></table> +<table class="rtl"><tr class="inherited"><td></td><td></td></tr></table> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html index d47cbf8a..f5f08f6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-auto</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#italic-mappings"> <link rel="match" href="text-transform-math-auto-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-auto' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html index 613cee6..06b9ea6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-bold</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-mappings"> <link rel="match" href="text-transform-math-bold-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-bold' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html index a90f22b..76de945 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-bold-fraktur</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-fraktur-mappings"> <link rel="match" href="text-transform-math-bold-fraktur-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-bold-fraktur' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html index 2de6be1..9a03fc7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-bold-italic</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-italic-mappings"> <link rel="match" href="text-transform-math-bold-italic-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-bold-italic' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html index 53c6314..3cbfdb9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-bold-sans-serif</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-sans-serif-mappings"> <link rel="match" href="text-transform-math-bold-sans-serif-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-bold-sans-serif' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html index 7786fc4..b61a573e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-bold-script</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-script-mappings"> <link rel="match" href="text-transform-math-bold-script-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-bold-script' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html index bfca421..df656d6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-double-struck</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#double-struck-mappings"> <link rel="match" href="text-transform-math-double-struck-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-double-struck' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html index 16a7909..99310b8f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-fraktur</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fraktur-mappings"> <link rel="match" href="text-transform-math-fraktur-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-fraktur' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html index 1de2231..42f3be7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-initial</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#initial-mappings"> <link rel="match" href="text-transform-math-initial-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-initial' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html index b98e353..86e9a84 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-italic</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#italic-mappings"> <link rel="match" href="text-transform-math-italic-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-italic' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html index e46fb333..d46cbc1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-looped</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#looped-mappings"> <link rel="match" href="text-transform-math-looped-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-looped' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html index 6f6b44e..86a4d113 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-monospace</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#monospace-mappings"> <link rel="match" href="text-transform-math-monospace-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-monospace' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html index b73b81d..41a5cc94 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-sans-serif</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#sans-serif-mappings"> <link rel="match" href="text-transform-math-sans-serif-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-sans-serif' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html index 9a686d0e..955c54a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-sans-serif-bold-italic</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#sans-serif-bold-italic-mappings"> <link rel="match" href="text-transform-math-sans-serif-bold-italic-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-sans-serif-bold-italic' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html index c312cf6..03afa9a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-sans-serif-italic</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#sans-serif-italic-mappings"> <link rel="match" href="text-transform-math-sans-serif-italic-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-sans-serif-italic' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative.html index 130d7a05..bd17ecc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-script</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#script-mappings"> <link rel="match" href="text-transform-math-script-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-script' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html index de0af72..87dd88e9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-stretched</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#stretched-mappings"> <link rel="match" href="text-transform-math-stretched-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-stretched' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html index 24fa40b..f08c4657 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html
@@ -5,6 +5,7 @@ <title>text-transform math-tailed</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#tailed-mappings"> <link rel="match" href="text-transform-math-tailed-001.tentative-ref.html"/> <meta name="assert" content="Verify that a character with 'text-transform: math-tailed' renders the same as the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html index d62252f..aa97e2b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html
@@ -2,6 +2,16 @@ <meta charset="utf-8"> <title>CSS test reference</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<style> +div { + line-height: 1; + color: transparent; + background: green; + float: left; + clear: left; +} +</style> -<p>Test passes if the characters below are arranged in a square and if there is no red. -<div>ああ<br>ああ</div> +<p>Test passes if the shape below is green and if there is no red. + +<div>あああ</div><div>ああ</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-002-ref.html new file mode 100644 index 0000000..7563151 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-002-ref.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS test reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<style> +div { + line-height: 1; + color: transparent; + background: green; + float: left; + clear: left; +} +</style> + +<p>Test passes if the shape below is green and if there is no red. + +<div>ああああ あ あ</div> +<div>ああ</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-other-space-separators-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-other-space-separators-001-ref.html index 34e60ff..e406b86 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-other-space-separators-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-other-space-separators-001-ref.html
@@ -1,26 +1,19 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>Test reference</title> +<title>CSS test reference</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <style> -div { font-family: monospace; } +div { + line-height: 1; + color: transparent; + background: green; + float: left; + clear: left; + white-space: pre; +} </style> -<p>Test passes if there are two columns of "x" characters below and no red. +<p>Test passes if the shape below is green and if there is no red. -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> -<div>xx<br>xx</div> +<div>xx                    </div> +<div>xx</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-001.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-001.html index 241ca11..82a1d4c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-001.html
@@ -1,14 +1,28 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: ideographic space at the end of line must be removed</title> +<title>CSS Text level 3 Test: ideographic space at the end of line must hang</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/trailing-ideographic-space-001-ref.html"> -<meta name="assert" content="An ideographic space (U+3000) at the end of the line must be removed."> +<meta name="assert" content="An ideographic space (U+3000) at the end of the line must hang."> <style> -div { width: 2em; } -span { background: red; } /* If the space hangs instead of being removed, there will be red */ +div { + position: absolute; + width: max-content; + line-height: 1; + color: transparent; +} +.red { background: red; } +.green { background: green; } </style> -<p>Test passes if the characters below are arranged in a square and if there is no red. -<div>ああ<span> </span>ああ</div> +<p>Test passes if the shape below is green and if there is no red. + +<div class=red>あああ</div> +<div class=red>ああ<span class=green> </span><br>ああ</div> +<div class=green>ああ<br>ああ</div> +<!-- the ideographic space must not be removed, + so it should hide the third red あ of the first div. + However, it should hang and therefore not extend the width of its parent div, + which would be visible as red on the second line if it were expanded. +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-002.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-002.html index 8830da96..0caf6ce 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-002.html
@@ -1,14 +1,27 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: sequence of spaces and ideographic spaces at the end of line must be removed</title> +<title>CSS Text level 3 Test: sequence of spaces and ideographic spaces at the end of line must hang</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> -<link rel="match" href="reference/trailing-ideographic-space-001-ref.html"> -<meta name="assert" content="An sequence ideographic space (U+3000) and regular spaces at the end of the line must be removed."> +<link rel="match" href="reference/trailing-ideographic-space-002-ref.html"> +<meta name="assert" content="An sequence ideographic space (U+3000) and regular spaces at the end of the line must hang."> <style> -div { width: 2em; } -span { background: red; } /* If the space hangs instead of being removed, there will be red */ +div { + position: absolute; + width: max-content; + line-height: 1; + color: transparent; +} +.red { background: red; } +.green { background: green; } </style> -<p>Test passes if the characters below are arranged in a square and if there is no red. -<div>ああ<span>      </span>ああ</div> +<p>Test passes if the shape below is green and if there is no red. +<div class=red>ああああ あ あ</div> +<div class=red>ああ<span class=green>      </span><br>ああ</div> +<div class=green>ああ<br>ああ</div> +<!-- the trailing sequence of spaces must not be removed, + so it should hide all of the first (red) div. + However, it should hang and therefore not extend the width of its parent div, + which would be visible as red on the second line if it were expanded. +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-001.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-001.html index 6b693f08..ce5740bd 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-001.html
@@ -1,30 +1,46 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: sequence of spaces and other space separators at the end of line must be removed</title> +<title>CSS Text level 3 Test: sequence of spaces and other space separators at the end of line must hang</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/trailing-other-space-separators-001-ref.html"> -<meta name="assert" content="An sequence of regular spaces and other space separators at the end of the line must be removed."> +<meta name="assert" content="An sequence of regular spaces and other space separators at the end of the line must hang."> <style> -div { font-family: monospace; width: 2ch; } -span { background: red; } /* If the space hangs instead of being removed, there will be red */ +div { + position: absolute; + width: max-content; + line-height: 1; + color: transparent; +} +.red { background: red; } +.green { background: green; } +#pre { white-space:pre; } </style> +<p>Test passes if the shape below is green and if there is no red. -<p>Test passes if there are two columns of "x" characters below and no red. - -<div>xx<span>                    </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span><wbr>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span><wbr>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> +<div class=red id=pre>xx                    </div> +<div class=red>xx<span class=green>                    </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=green>xx<br>xx</div> +<!-- the trailing sequence of spaces must not be removed, + so it should hide all of the first (red) div. + However, it should hang and therefore not extend the width of its parent div, + which would be visible as red on the second line if it were expanded. + The extra red divs with one character each are for ease of debugging: + if the first one is fine, they will all be fine, + but if it is not, they should help find which one is wrong. +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-003.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-003.html index 549c731..dad554e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-003.html
@@ -4,27 +4,45 @@ <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/trailing-other-space-separators-001-ref.html"> -<meta name="assert" content="An sequence of regular spaces and other space separators at the end of the line must be removed, with white-space:pre-line."> +<meta name="assert" content="An sequence of regular spaces and other space separators at the end of the line must hang, with white-space:pre-line."> <style> -div { font-family: monospace; width: 2ch; white-space: pre-line; } -span { background: red; } /* If the space hangs instead of being removed, there will be red */ +div { + position: absolute; + width: max-content; + line-height: 1; + color: transparent; + white-space: pre-line; +} +.red { background: red; } +.green { background: green; } +#pre { white-space:pre; } </style> -<p>Test passes if there are two columns of "x" characters below and no red. +<p>Test passes if the shape below is green and if there is no red. -<div>xx<span>                    </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span><wbr>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span><wbr>xx</div> -<div>xx<span> </span>xx</div> -<div>xx<span> </span>xx</div> +<div class=red id=pre>xx                    </div> +<div class=red>xx<span class=green>                    </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=green>xx<br>xx</div> +<!-- the trailing sequence of spaces must not be removed, + so it should hide all of the first (red) div. + However, it should hang and therefore not extend the width of its parent div, + which would be visible as red on the second line if it were expanded. + The extra red divs with one character each are for ease of debugging: + if the first one is fine, they will all be fine, + but if it is not, they should help find which one is wrong. +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-004.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-004.html index 90a568a8..0fce061 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-other-space-separators-004.html
@@ -4,27 +4,44 @@ <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/trailing-other-space-separators-001-ref.html"> -<meta name="assert" content="An sequence of regular spaces and other space separators at the end of the line must be removed, with white-space:nowrap."> +<meta name="assert" content="An sequence of regular spaces and other space separators at the end of the line must hang, with white-space:nowrap."> <style> -div { font-family: monospace; width: 2ch; white-space: nowrap; } -span { background: red; } /* If the space hangs instead of being removed, there will be red */ +div { + position: absolute; + width: max-content; + line-height: 1; + color: transparent; + white-space: nowrap; +} +.red { background: red; } +.green { background: green; } +#pre { white-space:pre; } </style> +<p>Test passes if the shape below is green and if there is no red. -<p>Test passes if there are two columns of "x" characters below and no red. - -<div>xx<span>                    </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> -<div>xx<span> </span><br>xx</div> +<div class=red id=pre>xx                    </div> +<div class=red>xx<span class=green>                    </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=red>xx<span class=green> </span><br>xx</div> +<div class=green>xx<br>xx</div> +<!-- the trailing sequence of spaces must not be removed, + so it should hide all of the first (red) div. + However, it should hang and therefore not extend the width of its parent div, + which would be visible as red on the second line if it were expanded. + The extra red divs with one character each are for ease of debugging: + if the first one is fine, they will all be fine, + but if it is not, they should help find which one is wrong. +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/META.yml b/third_party/blink/web_tests/external/wpt/css/css-transforms/META.yml index b948e3a3..a6d5672 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/META.yml +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/META.yml
@@ -3,4 +3,5 @@ - dbaron - plinss - dirkschulze + - smfr - grorg
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-003.html index c0da31a..c1fe39d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-003.html
@@ -21,7 +21,7 @@ <body> <p>The test passes if there is a vertical green stripe to the left of a yellow vertical stripe. You should see no red.</p> <svg> - <!-- Fill with Gradient to avoid false positive. --> + <!-- Fill with Gradient to avoid false positive. --> <defs> <linearGradient id="grad" x2="0%" y2="100%"> <stop offset="50%" stop-color="yellow"/> @@ -30,7 +30,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g class="testGroup"> - <rect width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-006.html index b45c256..71975ee 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-006.html
@@ -30,7 +30,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g transform="rotate(90)"> - <rect class="testRect" width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect class="testRect" width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-010.html index fe73d9c9..47cba53a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/document-styles/svg-document-styles-010.html
@@ -30,7 +30,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g class="testGroup" transform="rotate(90)"> - <rect width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-003.html index afeebb5..564f230 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-003.html
@@ -28,7 +28,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g class="rotate"> - <rect width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-004.html index 8401cbe..ea51002 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-004.html
@@ -28,7 +28,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g class="rotate" transform="scale(0.5)"> - <rect width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-006.html index 2106481..d43e40a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-006.html
@@ -28,7 +28,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g transform="rotate(90)"> - <rect class="invalid" width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect class="invalid" width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-010.html index f20aed6..863278f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-010.html
@@ -28,7 +28,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g class="invalid" transform="rotate(90)"> - <rect width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-013.html index 4ccd14d..f45639f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/external-styles/svg-external-styles-013.html
@@ -28,7 +28,7 @@ </linearGradient> </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect class="invalid" y="-60" width="100" height="100" fill="url(#grad)" transform="rotate(90,20px,20px)"/> + <rect class="invalid" y="-60" width="100" height="100" fill="url(#grad)" transform="rotate(90 20 20)"/> </svg> </body> </html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-001.html index 6c60b50..92e2e00 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-001.html
@@ -21,7 +21,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(50)"> + <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translate(50 0)"> <stop offset="50%" stop-color="green"/> <stop offset="50%" stop-color="red"/> </linearGradient>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-002.html deleted file mode 100644 index b63b2df..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-002.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with pixel unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'px' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(25px)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-003.html deleted file mode 100644 index 9a8445c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-003.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with point unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pt' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(18.75pt)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-004.html deleted file mode 100644 index 7664014..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-004.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with pica unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pc' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(1.5625pc)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-005.html deleted file mode 100644 index a14f64f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-005.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with millimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'mm' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(6.614583333mm)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-006.html deleted file mode 100644 index 22e5688b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-006.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with centimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'cm' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(0.661458333cm)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-007.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-007.html deleted file mode 100644 index 61e3c187..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-007.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with inch unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'in' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(0.260416667in)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-008.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-008.html deleted file mode 100644 index eca5b761..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-008.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with em unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'em' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(1em)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-009.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-009.html deleted file mode 100644 index 88a304c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-009.html +++ /dev/null
@@ -1,33 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translateX with translation-value and a unit less argument in scientific notation</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with unit less arguments in scientific numbers for translation-value. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(2.5e1)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-010.html deleted file mode 100644 index e1a7c34..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-010.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with pixel unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'px' in scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(2.5e1px)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-011.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-011.html deleted file mode 100644 index 672a8ba..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-011.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with point unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pt' in scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(1.875e1pt)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-012.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-012.html deleted file mode 100644 index 22d89396..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-012.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with pica unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pc' in scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(0.15625e1pc)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-013.html deleted file mode 100644 index b87257a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-013.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with millimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'mm' in scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(0.6614583333e1mm)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-014.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-014.html deleted file mode 100644 index e91bd3f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-014.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with centimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'cm' in scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(0.0661458333e1cm)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-015.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-015.html deleted file mode 100644 index 4d70394..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-015.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with inch unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'in' in scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(0.0260416667e1in)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-016.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-016.html deleted file mode 100644 index 873f8a3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-016.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with em unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'em' in scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(0.1e1em)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-017.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-017.html deleted file mode 100644 index ea19abf4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-017.html +++ /dev/null
@@ -1,33 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translateX with translation-value unit less argument in scientific notation with a negative exponent</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with unit less arguments in scientific numbers with negative exponents for translation-value. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(250e-1)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-018.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-018.html deleted file mode 100644 index cd83e08..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-018.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with pixel unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'px' in scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(250e-1px)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-019.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-019.html deleted file mode 100644 index ddb5581a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-019.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with point unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pt' in scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(187.5e-1pt)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-020.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-020.html deleted file mode 100644 index 043fd35..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-020.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with pica unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pc' in scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(15.625e-1pc)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-021.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-021.html deleted file mode 100644 index 7319fec..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-021.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with millimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'mm' in scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(66.14583333e-1mm)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-022.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-022.html deleted file mode 100644 index 2db57f3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-022.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with centimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'cm' in scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(6.61458333e-1cm)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-023.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-023.html deleted file mode 100644 index 2bc10f0c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-023.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with inch unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'in' in scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(2.60416667e-1in)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-024.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-024.html deleted file mode 100644 index 00f1c0ed..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-024.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with em unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'em' in scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(10e-1em)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-025.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-025.html deleted file mode 100644 index ef3821be..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-025.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translateX with a negative translation-value argument without unit</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative unit less arguments for translation-value. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-25)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-026.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-026.html deleted file mode 100644 index 988fb49..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-026.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative pixel unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative numbers in the absolute length unit 'px' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-25px)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-027.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-027.html deleted file mode 100644 index b33e5f403..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-027.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative point unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative numbers in the absolute length unit 'pt' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-18.75pt)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-028.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-028.html deleted file mode 100644 index bdd125c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-028.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative pica unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative numbers in the absolute length unit 'pc' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-1.5625pc)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-029.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-029.html deleted file mode 100644 index 8477f297..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-029.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative millimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative numbers in the absolute length unit 'mm' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-6.614583333mm)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-030.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-030.html deleted file mode 100644 index c4ec7e9..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-030.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative centimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative numbers in the absolute length unit 'cm' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-0.661458333cm)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-031.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-031.html deleted file mode 100644 index 945fa1ae..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-031.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative inch unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative numbers in the absolute length unit 'in' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-0.260416667in)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-032.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-032.html deleted file mode 100644 index ff65694..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-032.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative em unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative numbers in the relative length unit 'em' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-1em)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-033.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-033.html deleted file mode 100644 index dc6dce7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-033.html +++ /dev/null
@@ -1,33 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translateX with translation-value and a negative unit less argument in scientific notation</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative unit less arguments in scientific numbers for translation-value. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-2.5e1)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-034.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-034.html deleted file mode 100644 index 431044f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-034.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with pixel unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'px' in negative scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-2.5e1px)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-035.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-035.html deleted file mode 100644 index 06b5ff7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-035.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with point unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pt' in negative scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-1.875e1pt)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-036.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-036.html deleted file mode 100644 index e5a75af..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-036.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with pica unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pc' in negative scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-0.15625e1pc)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-037.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-037.html deleted file mode 100644 index 4217755..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-037.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with millimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'mm' in negative scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-0.6614583333e1mm)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-038.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-038.html deleted file mode 100644 index ec48308..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-038.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with centimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'cm' in negative scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-0.0661458333e1cm)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-039.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-039.html deleted file mode 100644 index cb96e29..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-039.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with inch unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'in' in negative scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-0.0260416667e1in)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-040.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-040.html deleted file mode 100644 index 13e542e..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-040.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with em unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'em' in negative scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-0.1e1em)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-041.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-041.html deleted file mode 100644 index ed9a6d3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-041.html +++ /dev/null
@@ -1,33 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translateX with translation-value unit less negative argument in scientific notation with a negative exponent</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with unit less arguments in negative scientific numbers with negative exponents for translation-value. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-250e-1)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-042.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-042.html deleted file mode 100644 index 916ca9b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-042.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with pixel unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'px' in negative scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-250e-1px)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-043.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-043.html deleted file mode 100644 index 8a1043b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-043.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with point unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pt' in negative scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-187.5e-1pt)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-044.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-044.html deleted file mode 100644 index 120e46dc..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-044.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with pica unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'pc' in negative scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-15.625e-1pc)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-045.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-045.html deleted file mode 100644 index 395c712..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-045.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with millimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'mm' in negative scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-66.14583333e-1mm)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-046.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-046.html deleted file mode 100644 index 551c854..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-046.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with centimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'cm' in negative scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-6.61458333e-1cm)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-047.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-047.html deleted file mode 100644 index 2b141729..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-047.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with inch unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the absolute length unit 'in' in negative scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-2.60416667e-1in)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-048.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-048.html deleted file mode 100644 index 001750f8..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-048.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with em unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'em' in negative scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-10e-1em)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-049.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-049.html deleted file mode 100644 index bdf0998..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-049.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG transform presentation attribute on the gradient element - has no effect</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-transform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute does not support the transform presentation attribute. The gradient in the test should not be moved."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a vertical green bar to the left of a vertical yellow bar.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" transform="translateX(50px)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="yellow"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-001.html index 87b61c0..5e86e3c2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-001.html
@@ -20,7 +20,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <defs> - <linearGradient id="grad" gradientUnits="userSpaceOnUse" gradientTransform="translateX(50px) translateX(50px)"> + <linearGradient id="grad" gradientUnits="userSpaceOnUse" gradientTransform="translate(50 0) translate(50 0)"> <stop offset="50%" stop-color="green"/> <stop offset="50%" stop-color="red"/> </linearGradient>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-002.html deleted file mode 100644 index 75832a3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-002.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with translateX applied once in pixels and once in pt units</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="match" href="reference/svg-gradientTransform-combination-ref.html"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support multiple transform functions on the same element with different translation-value units. The gradient in the test should be moved 100 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" gradientUnits="userSpaceOnUse" gradientTransform="translateX(50px) translateX(37.5pt)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="200" height="200"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-003.html index 6cbfd6f..5709eb2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-combination-003.html
@@ -20,7 +20,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <defs> - <linearGradient id="grad" gradientTransform="translateX(150) translateX(-50)"> + <linearGradient id="grad" gradientTransform="translate(150 0) translate(-50 0)"> <stop offset="50%" stop-color="green"/> <stop offset="50%" stop-color="red"/> </linearGradient>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-001.html deleted file mode 100644 index b1231ad..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-001.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with ex unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="match" href="reference/svg-gradientTransform-ex-unit-ref.html"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <meta name="flags" content="svg"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'ex' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(2.2ex)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-002.html deleted file mode 100644 index ed0f336..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-002.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with ex unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'ex' in scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(0.22e1ex)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-003.html deleted file mode 100644 index 5e9592d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-003.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with ex unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'ex' in scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(22e-1ex)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="red"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-004.html deleted file mode 100644 index 193048c2..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-004.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative ex unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="match" href="reference/svg-gradientTransform-ex-unit-ref.html"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with negative numbers in the relative length unit 'ex' on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-2.2ex)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-005.html deleted file mode 100644 index 01b5ed42..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-005.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with ex unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'ex' in negative scientific numbers on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-0.22e1ex)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-006.html deleted file mode 100644 index 96a9d02..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-ex-unit-006.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value negative argument with ex unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The gradientTransform attribute must support functions with the relative length unit 'ex' in negative scientific numbers with negative exponents on translation-value arguments. The gradient in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-22e-1ex)"> - <stop offset="50%" stop-color="red"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-001.html deleted file mode 100644 index bb31b588..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-001.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with percentage unit on translateX - has no effect</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-relative-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Arguments in percentage units in gradientTransform functions should have no affect. The gradient in the test should be not be moved."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a vertical green bar next to a vertical blue bar.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(25%)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="blue"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-002.html deleted file mode 100644 index ca2e55c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-002.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute and translation-value argument with negative percentage unit on translateX - has no effect</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-relative-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Arguments in percentage units in gradientTransform functions should have no affect. The gradient in the test should be not be moved."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a vertical green bar next to a vertical blue bar.</p> - <svg> - <defs> - <linearGradient id="grad" x1="0%" y1="0%" gradientTransform="translateX(-25%)"> - <stop offset="50%" stop-color="green"/> - <stop offset="50%" stop-color="blue"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-003.html deleted file mode 100644 index aa7d281..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/gradientTransform/svg-gradientTransform-relative-003.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG gradientTransform presentation attribute with rotate and translateX in percentage units, the latter has no effect</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-gradientTransform-relative-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Arguments in percentage units in gradientTransform functions should have no affect. The gradient in the test should be not be translated but should be rotated."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a vertical green bar next to a vertical blue bar.</p> - <svg> - <defs> - <linearGradient id="grad" x2="0%" y2="100%" gradientTransform="rotate(90, 0.5, 0.5) translateX(25%)"> - <stop offset="50%" stop-color="blue"/> - <stop offset="50%" stop-color="green"/> - </linearGradient> - </defs> - <rect fill="url(#grad)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-group-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-group-002.html index df0ce3fa..5226c7a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-group-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-group-002.html
@@ -19,7 +19,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> - <g transform="translateX(40px)"> + <g transform="translate(40px 0)"> <rect y="40" width="80" height="80" fill="green"/> </g> </svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-group-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-group-003.html index cbf6622..6f21fe2c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-group-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-group-003.html
@@ -19,7 +19,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> - <g transform="translateY(40)"> + <g transform="translate(0 40)"> <rect x="40" width="80" height="80" fill="green"/> </g> </svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-002.html index 7dc4c46..37e897c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-002.html
@@ -19,8 +19,8 @@ <p>The test passes if there is a green square and no red.</p> <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> - <g transform="translateX(20px)"> - <rect y="40" width="80" height="80" fill="green" transform="translateX(20px)"/> + <g transform="translate(20 0)"> + <rect y="40" width="80" height="80" fill="green" transform="translate(20 0)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-003.html index e8717838..09294674 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-003.html
@@ -19,8 +19,8 @@ <p>The test passes if there is a green square and no red.</p> <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> - <g transform="translateY(20)"> - <rect x="40" width="80" height="80" fill="green" transform="translateY(20)"/> + <g transform="translate(0 20)"> + <rect x="40" width="80" height="80" fill="green" transform="translate(0 20)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-012.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-012.html index 5afe973..ab2dff4f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-012.html
@@ -19,7 +19,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> - <g transform="translateX(40px)"> + <g transform="translate(40 0)"> <rect y="20" width="80" height="40" fill="green" transform="scaleY(2)"/> </g> </svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-013.html index 0a0edb7..355746b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-013.html
@@ -20,7 +20,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <path d="M 2,26 100,26 198,124 100,124 Z" fill="red"/> - <g transform="translateY(25)"> + <g transform="translate(0 25)"> <rect width="100" height="100" fill="green" transform="skewX(45)"/> </g> </svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-016.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-016.html index f8bbc37b..f83d9da 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-016.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-016.html
@@ -20,7 +20,7 @@ <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> <g transform="scaleY(2)"> - <rect y="20" width="80" height="40" fill="green" transform="translateX(40)"/> + <rect y="20" width="80" height="40" fill="green" transform="translate(40 0)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-017.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-017.html index 77c3bbd..3797318 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-017.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-017.html
@@ -20,7 +20,7 @@ <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> <g transform="rotate(90)"> - <rect x="40" y="-160" width="80" height="80" fill="green" transform="translateY(40)"/> + <rect x="40" y="-160" width="80" height="80" fill="green" transform="translate(0 40)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-022.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-022.html index 7f17d97..92444cf 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-022.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-022.html
@@ -19,7 +19,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> <!-- this rect is outside the group to catch failures of the group transform --> - <g transform="translateX(20)"> + <g transform="translate(20 0)"> <rect x="42" y="41" width="156" height="78" fill="red" transform="scaleX(0.5)"/> <!-- false positive if scaleX is negative --> <rect width="40" height="40" fill="green" transform="matrix(-2 0 0 -2 100 120)"/> </g>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-023.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-023.html index 3388718..57f7527 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-023.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-023.html
@@ -19,7 +19,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> <!-- this rect is outside the group to catch failures of the group transform --> - <g transform="translateY(25px)"> + <g transform="translate(0 25px)"> <rect x="1" y="1" width="78" height="78" fill="red" transform="translate(40px 15px)"/> <rect x="80" y="30" width="160" height="160" fill="green" transform="scale(0.5)"/> </g>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-024.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-024.html index 2f1f0e5f..2fd3feea 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-024.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-024.html
@@ -20,7 +20,7 @@ <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> <!-- this rect is outside the group to catch failures of the group transform --> <g transform="scale(0.5)"> - <rect x="62" y="82" width="156" height="156" fill="red" transform="translateX(20)"/> + <rect x="62" y="82" width="156" height="156" fill="red" transform="translate(20 0)"/> <rect x="160" y="80" width="320" height="160" fill="green" transform="scaleX(0.5)"/> </g> </svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-025.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-025.html index 0a8cc6b..b883655 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-025.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-025.html
@@ -20,7 +20,7 @@ <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> <!-- this rect is outside the group to catch failures of the group transform --> <g transform="scaleX(0.5)"> - <rect x="82" y="21" width="156" height="78" fill="red" transform="translateY(20)"/> + <rect x="82" y="21" width="156" height="78" fill="red" transform="translate(0 20)"/> <rect x="160" y="80" width="320" height="160" fill="green" transform="scale(0.5)"/> </g> </svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-027.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-027.html index 7174237..ec017a7e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-027.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-027.html
@@ -20,7 +20,7 @@ <svg> <rect x="41" y="41" width="78" height="78" fill="red"/> <!-- this rect is outside the group to catch failures of the group transform --> <g transform="rotate(90)"> - <rect x="20" y="-120" width="80" height="80" fill="green" transform="translateX(20)"/> + <rect x="20" y="-120" width="80" height="80" fill="green" transform="translate(20 0)"/> <rect x="40" y="-240" width="80" height="160" fill="green" transform="scaleY(0.5)"/> <!-- false positive if scaleY is negative; need to fix --> </g> </svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-028.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-028.html index eff690ea..cc806c09 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-028.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/group/svg-transform-nested-028.html
@@ -21,7 +21,7 @@ <rect x="41" y="41" width="78" height="78" fill="red"/> <!-- this rect is outside the group to catch failures of the group transform --> <g transform="matrix(-0.5 0 0 -0.5 120 90)"> <rect x="2" y="-116" width="156" height="312" fill="red" transform="scaleY(0.5)"/> <!-- false positive if scaleY is between 0.4 and -0.3 --> - <rect width="160" height="160" fill="green" transform="translateY(-60)"/> + <rect width="160" height="160" fill="green" transform="translate(0 -60)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-003.html index 45ac6e3..8d4714d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-003.html
@@ -27,7 +27,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g style="transform: rotate(90)"> - <rect width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-004.html index a3ab826a..b7e0a7d8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-004.html
@@ -27,7 +27,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g style="transform: rotate(90)" transform="scale(0.5)"> - <rect width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-006.html index f30848e..2885cbc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-006.html
@@ -27,7 +27,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g transform="rotate(90)"> - <rect width="100" height="100" fill="url(#grad)" style="transform: scale(invalid)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" style="transform: scale(invalid)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-010.html index f680a91..f8d6ad35 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/inline-styles/svg-inline-styles-010.html
@@ -27,7 +27,7 @@ </defs> <rect x="1" y="1" width="98" height="98" fill="red"/> <g style="transform: scale(invalid)" transform="rotate(90)"> - <rect width="100" height="100" fill="url(#grad)" transform="translateY(-100)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(0 -100)"/> </g> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-001.html index 6d5263b8..70a208c0 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-001.html
@@ -22,7 +22,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(25)"> + <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translate(25 0)"> <rect x="0" y="0" width="25" height="25" fill="green"/> <rect x="0" y="25" width="25" height="25" fill="green"/> </pattern>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-002.html deleted file mode 100644 index b98059b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-002.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with pixel unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'px' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(25px)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-003.html deleted file mode 100644 index de697285..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-003.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with point unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pt' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(18.75pt)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-004.html deleted file mode 100644 index 7ae3fcb0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-004.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with pica unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pc' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(1.5625pc)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-005.html deleted file mode 100644 index c0e6bb4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-005.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with millimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'mm' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(6.614583333mm)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-006.html deleted file mode 100644 index 08eda75..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-006.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with centimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'cm' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(0.661458333cm)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-007.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-007.html deleted file mode 100644 index f954715..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-007.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with inch unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'in' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(0.260416667in)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-008.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-008.html deleted file mode 100644 index 72cc8449..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-008.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with em unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'em' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(1em)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-009.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-009.html deleted file mode 100644 index 9eeb3fd3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-009.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translateX with translation-value and a unit less argument in scientific notation</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with unit less arguments in scientific numbers for translation-value. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(2.5e1)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-010.html deleted file mode 100644 index c40a4e51..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-010.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with pixel unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'px' in scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(2.5e1px)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-011.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-011.html deleted file mode 100644 index e9b3f31..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-011.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with point unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pt' in scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(1.875e1pt)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-012.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-012.html deleted file mode 100644 index df7d400..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-012.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with pica unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pc' in scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(0.15625e1pc)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-013.html deleted file mode 100644 index 510861aa..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-013.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with millimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'mm' in scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(0.6614583333e1mm)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-014.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-014.html deleted file mode 100644 index 0c351a8..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-014.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with centimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'cm' in scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(0.0661458333e1cm)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-015.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-015.html deleted file mode 100644 index 37eb564..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-015.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with inch unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'in' in scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(0.0260416667e1in)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-016.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-016.html deleted file mode 100644 index 67a57da..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-016.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with em unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'em' in scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(0.1e1em)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-017.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-017.html deleted file mode 100644 index ca97b27b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-017.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translateX with translation-value unit less argument in scientific notation with a negative exponent</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with unit less arguments in scientific numbers with negative exponents for translation-value. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(250e-1)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-018.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-018.html deleted file mode 100644 index 15ddfd2..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-018.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with pixel unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'px' in scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(250e-1px)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-019.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-019.html deleted file mode 100644 index d7cc9d6..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-019.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with point unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pt' in scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(187.5e-1pt)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-020.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-020.html deleted file mode 100644 index d6c4793..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-020.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with pica unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pc' in scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(15.625e-1pc)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-021.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-021.html deleted file mode 100644 index 125a408f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-021.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with millimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'mm' in scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(66.14583333e-1mm)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-022.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-022.html deleted file mode 100644 index 7e7ea21..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-022.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with centimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'cm' in scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(6.61458333e-1cm)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-023.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-023.html deleted file mode 100644 index 0a65d779..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-023.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with inch unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'in' in scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(2.60416667e-1in)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-024.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-024.html deleted file mode 100644 index cfc9a03..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-024.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with em unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'em' in scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(10e-1em)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-025.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-025.html deleted file mode 100644 index 52201b71..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-025.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translateX with a negative translation-value argument without unit</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with negative unit less arguments for translation-value. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-25)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-026.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-026.html deleted file mode 100644 index 56ad49771..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-026.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative pixel unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with negative numbers in the absolute length unit 'px' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-25px)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-027.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-027.html deleted file mode 100644 index 5db27eb4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-027.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative point unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with negative numbers in the absolute length unit 'pt' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-18.75pt)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-028.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-028.html deleted file mode 100644 index f6ff136..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-028.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative pica unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with negative numbers in the absolute length unit 'pc' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-1.5625pc)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-029.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-029.html deleted file mode 100644 index edcd7c27..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-029.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative millimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with negative numbers in the absolute length unit 'mm' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-6.614583333mm)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-030.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-030.html deleted file mode 100644 index 30390014..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-030.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative centimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with negative numbers in the absolute length unit 'cm' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-0.661458333cm)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-031.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-031.html deleted file mode 100644 index 1fa3b22..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-031.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative inch unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with negative numbers in the absolute length unit 'in' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-0.260416667in)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-032.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-032.html deleted file mode 100644 index 5a65ec9f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-032.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative em unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with negative numbers in the relative length unit 'em' on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-1em)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-033.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-033.html deleted file mode 100644 index 8a71308ac..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-033.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translateX with translation-value and a negative unit less argument in scientific notation</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with negative unit less arguments in scientific numbers for translation-value. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-2.5e1)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-034.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-034.html deleted file mode 100644 index 8895bd1..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-034.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with pixel unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'px' in negative scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-2.5e1px)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-035.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-035.html deleted file mode 100644 index 4b08b37..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-035.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with point unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pt' in negative scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-1.875e1pt)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-036.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-036.html deleted file mode 100644 index 3bceb8f2..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-036.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with pica unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pc' in negative scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-0.15625e1pc)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-037.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-037.html deleted file mode 100644 index 4e3596b1..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-037.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with millimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'mm' in negative scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-0.6614583333e1mm)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-038.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-038.html deleted file mode 100644 index 18599c98..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-038.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with centimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'cm' in negative scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-0.0661458333e1cm)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-039.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-039.html deleted file mode 100644 index 2ead567..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-039.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with inch unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'in' in negative scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-0.0260416667e1in)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-040.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-040.html deleted file mode 100644 index 46a84b90..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-040.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with em unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'em' in negative scientific numbers on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-0.1e1em)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-041.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-041.html deleted file mode 100644 index de1a118..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-041.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translateX with translation-value unit less negative argument in scientific notation with a negative exponent</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with unit less arguments in negative scientific numbers with negative exponents for translation-value. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-250e-1)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-042.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-042.html deleted file mode 100644 index fffbe5d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-042.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with pixel unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'px' in negative scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-250e-1px)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-043.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-043.html deleted file mode 100644 index f796923..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-043.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with point unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pt' in negative scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-187.5e-1pt)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-044.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-044.html deleted file mode 100644 index d41f6467..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-044.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with pica unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'pc' in negative scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-15.625e-1pc)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-045.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-045.html deleted file mode 100644 index 671b6326..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-045.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with millimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'mm' in negative scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-66.14583333e-1mm)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-046.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-046.html deleted file mode 100644 index e0532bd..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-046.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with centimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'cm' in negative scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-6.61458333e-1cm)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-047.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-047.html deleted file mode 100644 index c36abe2..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-047.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with inch unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support functions with the absolute length unit 'in' in negative scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-2.60416667e-1in)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-048.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-048.html deleted file mode 100644 index fae34ea1..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-048.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with em unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'em' in negative scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 25 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - line-height: 1; - font: 25px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-10e-1em)"> - <rect x="25" y="0" width="25" height="25" fill="green"/> - <rect x="25" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-049.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-049.html deleted file mode 100644 index bf7e2b2..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-049.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG transform presentation attribute on the pattern element - not supported</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="match" href="reference/svg-patternTransform-ref.html"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <meta name="flags" content="svg"> - <meta name="assert" content="The pattern element does not support the transform attribute. The pattern in the tests should not be moved resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" transform="translateX(25px)"> - <rect x="0" y="0" width="25" height="25" fill="green"/> - <rect x="0" y="25" width="25" height="25" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="75" y="0" width="25" height="100"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-001.html index addd1c6..730f769 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-001.html
@@ -21,7 +21,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="100" height="100" patternTransform="translateX(25px) translateX(25px)"> + <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="100" height="100" patternTransform="translate(25 0) translate(25 0)"> <rect x="0" y="0" width="50" height="50" fill="green"/> <rect x="0" y="50" width="50" height="50" fill="green"/> </pattern>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-002.html deleted file mode 100644 index 72e4873..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-002.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with translateX applied once in pixels and once in pt units</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="match" href="reference/svg-patternTransform-combination-ref.html"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support multiple transform functions on the same element with different translation-value units. The pattern in the test should be moved 50 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="100" height="100" patternTransform="translateX(25px) translateX(18.75pt)"> - <rect x="0" y="0" width="50" height="50" fill="green"/> - <rect x="0" y="50" width="50" height="50" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="50" height="200"/> - <rect fill="green" x="100" y="0" width="50" height="200"/> - <rect fill="url(#greenRects)" x="0" y="0" width="200" height="200"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-003.html deleted file mode 100644 index 41f908a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-combination-003.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with translateX applied in both directions</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="match" href="reference/svg-patternTransform-combination-ref.html"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <meta name="flags" content="svg"> - <meta name="assert" content="The patternTransform attribute must support multiple transform functions in both directions. The pattern in the test should be moved 50 pixels in the X direction resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background:red; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="100" height="100" patternTransform="translateX(150) translateX(-100)"> - <rect x="0" y="0" width="50" height="50" fill="green"/> - <rect x="0" y="50" width="50" height="50" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="50" height="200"/> - <rect fill="green" x="100" y="0" width="50" height="200"/> - <rect fill="url(#greenRects)" x="0" y="0" width="200" height="200"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-001.html deleted file mode 100644 index b3198dc..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-001.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with ex unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="match" href="reference/svg-patternTransform-ex-unit-ref.html"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'ex' on translation-value arguments. The pattern in the test should be moved 40 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 160px; - height: 160px; - background:red; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="80" height="80" patternTransform="translateX(1ex)"> - <rect x="0" y="0" width="40" height="40" fill="green"/> - <rect x="0" y="40" width="40" height="40" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="40" height="160"/> - <rect fill="green" x="80" y="0" width="40" height="160"/> - <rect fill="url(#greenRects)" x="0" y="0" width="160" height="160"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-002.html deleted file mode 100644 index 9032f4a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-002.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with ex unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'ex' in scientific numbers on translation-value arguments. The pattern in the test should be moved 40 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 160px; - height: 160px; - background:red; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="80" height="80" patternTransform="translateX(0.1e1ex)"> - <rect x="0" y="0" width="40" height="40" fill="green"/> - <rect x="0" y="40" width="40" height="40" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="40" height="160"/> - <rect fill="green" x="80" y="0" width="40" height="160"/> - <rect fill="url(#greenRects)" x="0" y="0" width="160" height="160"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-003.html deleted file mode 100644 index cc76d70..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-003.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with ex unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'ex' in scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 40 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 160px; - height: 160px; - background:red; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="80" height="80" patternTransform="translateX(10e-1ex)"> - <rect x="0" y="0" width="40" height="40" fill="green"/> - <rect x="0" y="40" width="40" height="40" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="40" height="160"/> - <rect fill="green" x="80" y="0" width="40" height="160"/> - <rect fill="url(#greenRects)" x="0" y="0" width="160" height="160"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-004.html deleted file mode 100644 index 25b7540..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-004.html +++ /dev/null
@@ -1,37 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative ex unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="match" href="reference/svg-patternTransform-ex-unit-ref.html"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with negative numbers in the relative length unit 'ex' on translation-value arguments. The pattern in the test should be moved 40 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 160px; - height: 160px; - background:red; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="80" height="80" patternTransform="translateX(-1ex)"> - <rect x="0" y="0" width="40" height="40" fill="green"/> - <rect x="0" y="40" width="40" height="40" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="40" height="160"/> - <rect fill="green" x="80" y="0" width="40" height="160"/> - <rect fill="url(#greenRects)" x="0" y="0" width="160" height="160"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-005.html deleted file mode 100644 index 8e3fdc7d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-005.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with ex unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'ex' in negative scientific numbers on translation-value arguments. The pattern in the test should be moved 40 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 160px; - height: 160px; - background:red; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="80" height="80" patternTransform="translateX(-0.1e1ex)"> - <rect x="0" y="0" width="40" height="40" fill="green"/> - <rect x="0" y="40" width="40" height="40" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="40" height="160"/> - <rect fill="green" x="80" y="0" width="40" height="160"/> - <rect fill="url(#greenRects)" x="0" y="0" width="160" height="160"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-006.html deleted file mode 100644 index 1fafce57..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-ex-unit-006.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value negative argument with ex unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="match" href="reference/svg-patternTransform-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The patternTransform attribute must support functions with the relative length unit 'ex' in negative scientific numbers with negative exponents on translation-value arguments. The pattern in the test should be moved 40 pixels in the X direction resulting in a solid green rect."> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 160px; - height: 160px; - background:red; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="80" height="80" patternTransform="translateX(-10e-1ex)"> - <rect x="0" y="0" width="40" height="40" fill="green"/> - <rect x="0" y="40" width="40" height="40" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="40" height="160"/> - <rect fill="green" x="80" y="0" width="40" height="160"/> - <rect fill="url(#greenRects)" x="0" y="0" width="160" height="160"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-001.html deleted file mode 100644 index c5c9a579..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-001.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with percentage unit having no effect on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-user-coordinate-space"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-relative-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Arguments in percentage units in patternTransform functions should have no affect. The gradient in the test should be not be moved resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="100" height="100" patternTransform="translateX(25%)"> - <rect x="24" y="0" width="27" height="100" fill="green"/> - <rect x="74" y="0" width="27" height="100" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="red" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="red" x="75" y="0" width="25" height="100"/> - <rect x="-1" y="-1" fill="url(#greenRects)" x="0" y="0" width="102" height="102"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-002.html deleted file mode 100644 index 552e93e..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-002.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute and translation-value argument with negative percentage unit having no effect on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-user-coordinate-space"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-relative-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Arguments in percentage units in patternTransform functions should have no affect. The gradient in the test should be not be moved resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" patternTransform="translateX(-25%)"> - <rect x="24" y="0" width="27" height="100" fill="green"/> - <rect x="74" y="0" width="27" height="100" fill="green"/> - </pattern> - </defs> - <rect fill="green" x="0" y="0" width="25" height="100"/> - <rect fill="red" x="25" y="0" width="25" height="100"/> - <rect fill="green" x="50" y="0" width="25" height="100"/> - <rect fill="red" x="75" y="0" width="25" height="100"/> - <rect x="-1" y="-1" fill="url(#greenRects)" x="0" y="0" width="102" height="102"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-003.html deleted file mode 100644 index ef88e46..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/patternTransform/svg-patternTransform-relative-003.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG patternTransform presentation attribute with rotate and translateX in percentage units, the latter has no effect</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-user-coordinate-space"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-gradient-transform-pattern-transform"> - <link rel="match" href="reference/svg-patternTransform-relative-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Arguments in percentage units in patternTransform functions should have no affect. The gradient in the test should be not be translated, but should be rotated resulting in a solid green rect."> - <style type="text/css"> - svg { - width: 100px; - height: 100px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <defs> - <pattern id="greenRects" patternUnits="userSpaceOnUse" x="0" y="0" width="100" height="100" patternTransform="rotate(90) translateX(25%)"> - <rect x="0" y="0" width="27" height="100" fill="green"/> - <rect x="49" y="0" width="27" height="100" fill="green"/> - </pattern> - </defs> - <rect fill="red" x="0" y="0" width="100" height="25"/> - <rect fill="green" x="0" y="24" width="100" height="27"/> - <rect fill="red" x="0" y="50" width="100" height="25"/> - <rect fill="green" x="0" y="74" width="100" height="27"/> - <rect fill="url(#greenRects)" x="0" y="0" width="100" height="100"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-001.html deleted file mode 100644 index cc80fd7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-001.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with deg on rotate and pixel on translate</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with the unit 'deg' on angle arguments and the absolute length unit 'px' on translation-value arguments. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(90deg,20px,20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-003.html deleted file mode 100644 index 0c9af8a0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-003.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with grad on rotate and pt on translate</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with the unit 'grad' on angle arguments and the absolute length unit 'pt' on translation-value arguments. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(100grad,15pt,15pt)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-004.html deleted file mode 100644 index 3636157..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-004.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with turn on rotate and pc on translate</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with the unit 'turn' on angle arguments and the absolute length unit 'pc' on translation-value arguments. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(0.25turn,1.25pc,1.25pc)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-005.html deleted file mode 100644 index 31154e4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-005.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with rad on rotate and mm on translate</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with the unit 'rad' on angle arguments and the absolute length unit 'mm' on translation-value arguments. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(1.57079632674897rad,5.291666667mm,5.291666667mm)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-006.html deleted file mode 100644 index 95a8160a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-006.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with negative rotate</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with a negative angle argument. The green rect in this test should be rotated 90 degrees counter-clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="-40" y="0" width="80" height="80" fill="green" transform="rotate(-90deg,20px,20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-007.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-007.html deleted file mode 100644 index 50f67f8..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-007.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with negative translateX</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with a negative translationX-value argument. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by -20 pixels the horizontal directions and 20 pixels in the vertical direction to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="-40" y="-80" width="80" height="80" fill="green" transform="rotate(90deg,-20px,20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-008.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-008.html deleted file mode 100644 index 7aba936..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-008.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with negative translateY</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with a negative translationY-value argument. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in the horizontal direction and -20 pixels in the vertical direction to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="40" y="-80" width="80" height="80" fill="green" transform="rotate(90deg,20px,-20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-009.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-009.html deleted file mode 100644 index c5b37734b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-009.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with scientific numbers on degree angles</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments, with scientific numbers for angle arguments in degree. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(9.0e1deg,20px,20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-010.html deleted file mode 100644 index 57a6a51..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-010.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with pixel units in scientific notation on translate</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments, with absolute length unit 'px' in scientific numbers on translation-value arguments. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(90deg,2.0e1px,2.0e1px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-011.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-011.html deleted file mode 100644 index 7bbd205..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-011.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with deg on rotate and percentage units on translate</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with the unit 'deg' on angle arguments and the relative length unit '%' on translation-value arguments. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(90deg,25%,25%)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-012.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-012.html deleted file mode 100644 index d21dd38..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-012.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with deg on rotate and negative percentage units on translate</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with the unit 'deg' on angle arguments and the relative length unit '%' on translation-value arguments. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by -20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-120" width="80" height="80" fill="green" transform="rotate(90deg,-25%,-25%)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-013.html deleted file mode 100644 index a5261dd..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-013.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with space delimited arguments</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-functional-notation"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments, where the arguments are separated by spaces with no commas. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(90deg 20px 20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-014.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-014.html deleted file mode 100644 index d64ee33..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-014.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with comma delimited arguments</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-functional-notation"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments, where the arguments are separated by commas with no spaces. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(90deg,20px,20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-015.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-015.html deleted file mode 100644 index 37e2324..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-015.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with comma delimited arguments with a space after the comma</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-functional-notation"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function with three arguments can have the arguments be separated by optional commas with a space after the comma. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(90deg, 20px, 20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-016.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-016.html deleted file mode 100644 index d377306..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-016.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with comma delimited arguments with multiple spaces before the commas</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-functional-notation"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function with three arguments can have the arguments be separated by optional commas with multiple spaces before the commas. The green rect in this test should be rotated 90 degrees clockwise after the transform origin is translated by 20 pixels in both the vertical and horizontal directions to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="-40" width="80" height="80" fill="green" transform="rotate(90deg ,20px ,20px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-017.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-017.html deleted file mode 100644 index 272fc011..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-017.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with transform-origin with length values - 40px 40px</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-origin-property"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments in combination with transform-origin using absolute values. First, the transform-origin should translate the origin by 40px in both the vertical and horizontal directions temporarily to (40px 40px). Second, the green rect should be rotated by 90 degrees clockwise after the transform origin has been translated by an additional 20 pixels in both the horizontal and vertical directions, making the origin (60px 60px) temporarily. The green rect should completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="40" width="80" height="80" fill="green" transform="rotate(90deg,20px,20px)" transform-origin="40px 40px"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-018.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-018.html deleted file mode 100644 index da03e25..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-018.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with transform-origin with first value 'center' and missing second argument</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-origin-property"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments in combination with transform-origin using one keyword value. First, the transform-origin value of 'center' should translate the origin by 40px in both the vertical and horizontal directions temporarily to (0px 40px), which is the center of the green rect. Second, the green rect should be rotated 90 degrees clockwise after the transform origin has been translated by 20 pixels in both the vertical and horizontal directions, making the origin (20px 60px) temporarily. The green rect should completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="-40" y="0" width="80" height="80" fill="green" transform="rotate(90deg,20px,20px)" transform-origin="center"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-019.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-019.html deleted file mode 100644 index d2e6729..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-019.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with transform-origin with first value '50%' and missing second argument</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-origin-property"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments in combination with transform-origin using one relative value. First, the transform-origin value of '50%' should translate the origin by 40px in both the vertical and horizontal directions temporarily to (0px 40px), which is the center of the green rect. Second, the green rect should be rotated 90 degrees clockwise after the transform origin has been translated by 20 pixels in both the vertical and horizontal directions, making the origin (20px 60px) temporarily. The green rect should completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="-40" y="0" width="80" height="80" fill="green" transform="rotate(90deg,20px,20px)" transform-origin="50%"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-020.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-020.html deleted file mode 100644 index aa3189c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-020.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with transform-origin with first value 'right' and second value 'top'</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-origin-property"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments in combination with transform-origin using two keyword values. First, the transform-origin value of 'right top' should translate the origin by 40px in the horizontal direction and by 80px in the vertical direction temporarily to (40px 80px), which is the top right corner of the green rect. Second, the green rect should be rotated 90 degrees clockwise after the transform origin has been translated by 20 pixels in both the vertical and horizontal directions, making the origin (60px 100px) temporarily. The green rect should completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="-40" y="80" width="80" height="80" fill="green" transform="rotate(90deg,20px,20px)" transform-origin="right top"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-021.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-021.html deleted file mode 100644 index 948e0ae..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-021.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with relative translation-values combined with absolute transform-origin length values</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-origin-property"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with relative translation-values in combination with transform-origin using two absolute pixel values. First, the transform-origin value of '40px 40px' should translate the origin by 40px in both the vertical and horizontal directions temporarily to (40px 40px). Second, the green rect should be rotated 90 degrees clockwise after the transform origin has been translated by an additional 20 pixels in both the horizontal and vertical directions, making the origin (60px 60px) temporarily. The green rect should completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="0" y="40" width="80" height="80" fill="green" transform-origin="40px 40px" transform="rotate(90deg,25%,25%)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-022.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-022.html deleted file mode 100644 index b49d9580..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-022.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with absolute translation-values combined with relative transform-origin length values</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-origin-property"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with absolute translation-values in combination with transform-origin using two relative values. First, the transform-origin value of '25% 25%' should translate the origin by 20px in both the vertical and horizontal directions temporarily to (-20px 20px). Second, the green rect should be rotated 90 degrees clockwise after the transform origin has been translated by an additional 40 pixels in both the horizontal and vertical directions, making the origin (20px 60px) temporarily. The green rect should completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="-40" y="0" width="80" height="80" fill="green" transform-origin="25% 25%" transform="rotate(90deg,40px,40px)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-023.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-023.html deleted file mode 100644 index 533fe6b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-3args-023.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG rotate with three arguments with relative translation-values combined with relative transform-origin length values</title> - <link rel="author" title="David Alcala" href="mailto:dalcala@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-origin-property"> - <link rel="match" href="reference/svg-rotate-3args-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support three arguments with relative translation-values in combination with transform-origin using two relative values. First, the transform-origin value of '25% 25%' should translate the origin by 20px in both the vertical and horizontal directions temporarily to (-20px 20px). Second, the green rect should be rotated 90 degrees clockwise after the transform origin has been translated by an additional 40 pixels in both the horizontal and vertical directions, making the origin (20px 60px) temporarily. The green rect should completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="78" height="78" fill="red"/> - <rect x="-40" y="0" width="80" height="80" fill="green" transform-origin="25% 25%" transform="rotate(90deg,50%,50%)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-002.html deleted file mode 100644 index 78686173..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-002.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and angle argument with degree unit on rotate</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support the unit 'degree' on angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(45deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-003.html deleted file mode 100644 index dafb5a5c7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-003.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and angle argument with grad unit on rotate</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support the unit 'grad' on angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(50grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-004.html deleted file mode 100644 index 7b4fffa0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-004.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and angle argument with turn unit on rotate</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support the unit 'turn' on angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(0.125turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-005.html deleted file mode 100644 index 3e4b69e3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-005.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and angle argument with radian unit on rotate</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support the unit 'rad' on angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(0.785398163374485rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-006.html deleted file mode 100644 index f537221..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-006.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative, unit less turn</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative unit less angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(-315)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-007.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-007.html deleted file mode 100644 index 9f49983..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-007.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative degrees</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative 'degree' angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(-315deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-008.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-008.html deleted file mode 100644 index 8925d8c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-008.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative gradians</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative 'grad' angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(-350grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-009.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-009.html deleted file mode 100644 index c1fe86b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-009.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative radians</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative 'rad' angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(-5.497787143782138rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-010.html deleted file mode 100644 index 8251e3e..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-010.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative turns</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative 'turn' angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(-0.875turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-012.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-012.html deleted file mode 100644 index 8a39a34..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-012.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and more than full circle rotate with angle in degree</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support 'modulo whole circle' for angle arguments in degree. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(405deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-013.html deleted file mode 100644 index d44d25b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-013.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and more than full circle rotate with angle in gradian</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support 'modulo whole circle' for angle arguments in gradian. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(450grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-014.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-014.html deleted file mode 100644 index 2110205d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-014.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and more than full circle rotate with angle in radian</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support 'modulo whole circle' for angle arguments in radian. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(7.068583470577035rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-015.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-015.html deleted file mode 100644 index 6c80876..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-015.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and more than full circle rotate with angle in turn</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support 'modulo whole circle' for angle arguments in turns. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(1.125turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-016.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-016.html deleted file mode 100644 index a494651..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-016.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers on unit less angles</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for unit less angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(4.5e1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-017.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-017.html deleted file mode 100644 index 9bdf8f7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-017.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers on degree angles</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for angle arguments in degree. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(4.5e1deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-018.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-018.html deleted file mode 100644 index 60b1c30..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-018.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers on gradian angles</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for angle arguments in gradians. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(45.0e1grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-019.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-019.html deleted file mode 100644 index 7ef1e6d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-019.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers on radian angles</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for angle arguments in radians. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(0.785398163374485e0rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-020.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-020.html deleted file mode 100644 index 2204e18..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-020.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and with scientific numbers on turns</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for angle arguments in turns. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(1.25e-1turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-021.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-021.html deleted file mode 100644 index 819359a6..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-021.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers with negative exponents for unit less arguments</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers with negative exponents for unit less angle arguments. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(450e-1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-022.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-022.html index 7820b502..4fc5300 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-022.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-022.html
@@ -23,7 +23,7 @@ <p>The test passes if there is a green square and no red.</p> <svg> <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(450e-1deg)"/> + <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(450e-1)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-023.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-023.html deleted file mode 100644 index 5bb3131e..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-023.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate and scientific numbers with negative exponents for arguments in gradian</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers with negative exponents for angle arguments in gradian. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(500e-1grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-024.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-024.html deleted file mode 100644 index 253886b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-024.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate and scientific numbers with negative exponents for arguments in radian</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers with negative exponents for angle arguments in radian. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(7.85398163374485e-1rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-025.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-025.html deleted file mode 100644 index 03414eb..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-45-025.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers with negative exponents for arguments in turns</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-45-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers with negative exponents for angle arguments in turns. The green rect in this test should be rotated by 45 degrees clockwise to completely cover the red path."> - <style type="text/css"> - svg { - width: 250px; - height: 250px; - background: green; - background: green; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <path d="M 142,2 210,71 142,139 73,71 Z" fill="red"/> - <rect x="100" y="-100" width="100" height="100" fill="green" transform="rotate(11.25e-1turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-002.html deleted file mode 100644 index 2c79bc43..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-002.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and angle argument with degree unit on rotate</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support the unit 'degree' on angle arguments. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(90deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-003.html deleted file mode 100644 index 37ed4001..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-003.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and angle argument with grad unit on rotate</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support the unit 'grad' on angle arguments. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(100grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-004.html deleted file mode 100644 index d527a431..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-004.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and angle argument with turn unit on rotate</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support the unit 'turn' on angle arguments. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(0.25turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-005.html deleted file mode 100644 index 5ca488f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-005.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and angle argument with radian unit on rotate</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support the unit 'rad' on angle arguments. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(1.57079632674897rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-007.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-007.html deleted file mode 100644 index f217faeb..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-007.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative degrees</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative 'degree' angle arguments. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(-270deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-008.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-008.html deleted file mode 100644 index 1bd60f73..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-008.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative gradians</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative 'grad' angle arguments. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(-300grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-009.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-009.html deleted file mode 100644 index 2647e05..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-009.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative radians</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative 'rad' angle arguments. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(1.570796327rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-010.html deleted file mode 100644 index 52fe2e3f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-010.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with negative turns</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support negative 'turn' angle arguments. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(-0.75turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-012.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-012.html deleted file mode 100644 index 8e51fa99..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-012.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and more than full circle rotate with angle in degree</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support 'modulo whole circle' for angle arguments in degree. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(450deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-013.html deleted file mode 100644 index bdb3bd1..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-013.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and more than full circle rotate with angle in gradian</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support 'modulo whole circle' for angle arguments in gradian. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(500grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-014.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-014.html deleted file mode 100644 index b5b944d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-014.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and more than full circle rotate with angle in radian</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support 'modulo whole circle' for angle arguments in radian. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(7.853981634rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-015.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-015.html deleted file mode 100644 index 0f64af4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-015.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and more than full circle rotate with angle in turn</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support 'modulo whole circle' for angle arguments in turns. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(1.25turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-017.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-017.html deleted file mode 100644 index 8d66a22..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-017.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers on degree angles</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for angle arguments in degree. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(9.0e1deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-018.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-018.html deleted file mode 100644 index 6d786b5..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-018.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers on gradian angles</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for angle arguments in gradians. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(10.0e1grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-019.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-019.html deleted file mode 100644 index 0015eb0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-019.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers on radian angles</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for angle arguments in radians. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(0.1570796326794897e1rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-020.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-020.html deleted file mode 100644 index 4b86b75..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-020.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers on turns</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers for angle arguments in turns. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(0.025e1turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-022.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-022.html deleted file mode 100644 index 45e1c12..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-022.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers with negative exponents for arguments in degree</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers with negative exponents for angle arguments in degree. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(900e-1deg)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-023.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-023.html deleted file mode 100644 index fb543d3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-023.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate and scientific numbers with negative exponents for arguments in gradian</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers with negative exponents for angle arguments in gradian. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(1000e-1grad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-024.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-024.html deleted file mode 100644 index ef269341..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-024.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate and scientific numbers with negative exponents for arguments in radian</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers with negative exponents for angle arguments in radian. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(15.70796326794897e-1rad)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-025.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-025.html deleted file mode 100644 index 863b89e..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/rotate/svg-rotate-angle-90-025.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and rotate with scientific numbers with negative exponents for arguments in turns</title> - <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-angle"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-rotate"> - <link rel="match" href="reference/svg-rotate-angle-90-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rotate transform function must support scientific numbers with negative exponents for angle arguments in turns. The rect in this test should be rotated by 90 degrees clockwise to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="1" width="98" height="98" fill="red"/> - <rect x="0" y="-100" width="100" height="100" fill="green" transform="rotate(2.5e-1turn)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scale-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scale-005.html deleted file mode 100644 index e40f629..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scale-005.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scale with percent values - not supported</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scale"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Percent values are not supported. The green rect in the test should not be scaled and the red rect should remain completely covered."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="1" y="1" width="148" height="148" fill="red"/> - <rect width="150" height="150" fill="green" transform="scale(50%)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-001.html deleted file mode 100644 index b7e42da..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-001.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleX 0.5</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scalex"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The red rect in this test should be horizontally scaled down 0.5 to be hidden behind the green rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="1" y="1" width="298" height="148" fill="red" transform="scaleX(0.5)"/> - <rect width="150" height="150" fill="green"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-002.html deleted file mode 100644 index 54ecb06..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-002.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleX 1.5</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scalex"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The green rect in this test should be horizontally scaled up 1.5 to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="1" y="1" width="148" height="148" fill="red"/> - <rect width="100" height="150" fill="green" transform="scaleX(1.5)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-003.html deleted file mode 100644 index e62bbc3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-003.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleX with percent argument - not supported</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scalex"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The scaleX transform function does not support percentage values. The green rect in this test should not be scaled so the red background is not visible."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: red; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect width="200" height="200" fill="green" transform="scaleX(50%)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-004.html deleted file mode 100644 index bf80e1a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-004.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleX -0.5</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scalex"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Scaling by a negative value should flip the element. The green rect in this test should be flipped rightward into view and scaled horizontally down 0.5 to completely cover the red background."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: red; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="-400" y="0" width="400" height="200" fill="green" transform="scaleX(-0.5)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-005.html deleted file mode 100644 index dc5e435..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scalex-005.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleX -1.5</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scalex"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Scaling by a negative value should flip the element. The green rect in this test should be flipped rightward into view and horizontally scaled up 1.5 to completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="1" y="1" width="148" height="148" fill="red"/> - <rect x="-100" y="0" width="100" height="150" fill="green" transform="scaleX(-1.5)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-001.html deleted file mode 100644 index 93825b2..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-001.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleY 0.5</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scaley"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The red rect in this test should be vertically scaled down 0.5 to be completely hidden by the green rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="1" y="1" width="148" height="298" fill="red" transform="scaleY(0.5)"/> - <rect width="150" height="150" fill="green"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-002.html deleted file mode 100644 index f9d4ccd..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-002.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleY 1.5</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scaley"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The rect in the test should be vertically scaled up 1.5 to 150x150"> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="1" y="1" width="148" height="148" fill="red"/> - <rect width="150" height="100" fill="green" transform="scaleY(1.5)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-003.html deleted file mode 100644 index 418164d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-003.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleY with percent argument - not supported</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scaley"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The scaleY transform function does not support percentage values. The green rect in this test should not be scaled and should completely cover the red rect."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: green; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="1" y="1" width="148" height="148" fill="red"/> - <rect width="150" height="150" fill="green" transform="scaleY(50%)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-004.html deleted file mode 100644 index 7e2e50a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-004.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and and scaleY -0.5</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scaley"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Scaling by a negative value should flip the element. The green in this test should be flipped downward into view and vertically scaled down to completely cover the red background."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: red; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="0" y="-400" width="200" height="400" fill="green" transform="scaleY(-0.5)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-005.html deleted file mode 100644 index edb76d3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/scale/svg-scaley-005.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and scaleY -1.5</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-scaley"> - <link rel="match" href="reference/svg-scale-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="Scaling by a negative value should flip the element. The green rect in this test should be flipped downward into view and vertically scaled up 1.5 to completely cover the red background."> - <style type="text/css"> - svg { - width: 200px; - height: 200px; - background: red; - } - </style> -</head> -<body> - <p>The test passes if you see a green square and no red.</p> - <svg> - <rect x="0" y="-133.333" width="200" height="133.333" fill="green" transform="scaleY(-1.5)"/> - </svg> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-001.html index 5267aef8..0695de5c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-001.html
@@ -27,7 +27,7 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200)translateY(100)rotate(90)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0)translate(0 100)rotate(90)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-002.html index 7b5bf27..948909c9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-002.html
@@ -27,7 +27,7 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200),translateY(100),rotate(90)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0),translate(0 100),rotate(90)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-003.html index fe21d34..916fc2f1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-003.html
@@ -27,7 +27,7 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200), translateY(100), rotate(90)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0), translate(0 100), rotate(90)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-004.html index 73877c8..cceb47f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-004.html
@@ -27,7 +27,7 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200) translateY(100) rotate(90)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0) translate(0 100) rotate(90)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-005.html index 062b7359..faef67c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-005.html
@@ -27,7 +27,7 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200),translateY(100) rotate(45)rotate(45)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0),translate(0 100) rotate(45)rotate(45)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-006.html index 747e8bb..b52a0d59 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-006.html
@@ -27,7 +27,7 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200) translateY(100) rotate(45) rotate(45)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0) translate(0 100) rotate(45) rotate(45)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-008.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-008.html index 1ce518bb..22f5af76 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-008.html
@@ -27,7 +27,7 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200) ,translateY(100) ,rotate(90)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0) ,translate(0 100) ,rotate(90)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-009.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-009.html index 2f730ef..9e91d488 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-009.html
@@ -27,7 +27,7 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200) , translateY(100) , rotate(90)"/> + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0) , translate(0 100) , rotate(90)"/> </svg> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-010.html index 1683e17d..3ab0276 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-010.html
@@ -27,8 +27,8 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200) - translateY(100) + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0) + translate(0 100) rotate(90)"/> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-011.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-011.html index 7edc86a03..7264693 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/transform-list-separation/svg-transform-list-separations-011.html
@@ -27,8 +27,8 @@ <stop offset="50%" stop-color="orange"/> </linearGradient> </defs> - <rect width="100" height="100" fill="url(#grad)" transform="translateX(200), - translateY(100), + <rect width="100" height="100" fill="url(#grad)" transform="translate(200 0), + translate(0 100), rotate(90)"/> </svg> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html deleted file mode 100644 index d4d62c62..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/reference/svg-translatex-ex-unit-ref.html +++ /dev/null
@@ -1,23 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Reftest Reference</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <meta name="flags" content="svg ahem"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="40" width="100" height="100" fill="green"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/reference/svg-translatex-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/reference/svg-translatex-ref.html deleted file mode 100644 index 8f8020e..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/reference/svg-translatex-ref.html +++ /dev/null
@@ -1,20 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Reftest Reference</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <meta name="flags" content="svg"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="50" width="100" height="100" fill="green"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-001.html deleted file mode 100644 index b4f1608..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-001.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateX with translation-value argument without unit</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support unit less arguments for translation-value. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect width="100" height="100" fill="green" transform="translateX(50)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-002.html deleted file mode 100644 index fa0ad7b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-002.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pixel unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'px' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(50px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-003.html deleted file mode 100644 index ec189e4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-003.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with point unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pt' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(37.5pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-004.html deleted file mode 100644 index 0af09da..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-004.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pica unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pc' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(3.125pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-005.html deleted file mode 100644 index b587d5f3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-005.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with millimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'mm' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(13.229166667mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-006.html deleted file mode 100644 index f02d4b5..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-006.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with centimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'cm' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(1.322916667cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-007.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-007.html deleted file mode 100644 index 8b3bac4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-007.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with inch unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'in' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(0.520833333in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-008.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-008.html deleted file mode 100644 index 78406b18..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-008.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with em unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'em' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(2.5em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-009.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-009.html deleted file mode 100644 index 5ac6d29..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-009.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateX with translation-value and a unit less argument in scientific notation</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support unit less arguments in scientific numbers for translation-value. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(5.0e1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-010.html deleted file mode 100644 index 13b95d4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-010.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pixel unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'px' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(5.0e1px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-011.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-011.html deleted file mode 100644 index 91c6407b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-011.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with point unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pt' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(3.75e1pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-012.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-012.html deleted file mode 100644 index fbc0b44..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-012.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pica unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pc' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(.3125e1pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-013.html deleted file mode 100644 index b60ce709..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-013.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with millimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'mm' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(1.3229166667e1mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-014.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-014.html deleted file mode 100644 index eaa98f4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-014.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with centimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'cm' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(.1322916667e1cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-015.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-015.html deleted file mode 100644 index e2e87782..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-015.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with inch unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'in' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(0.0520833333e1in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-016.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-016.html deleted file mode 100644 index fca43b0c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-016.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with em unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'em' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(0.25e1em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-017.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-017.html deleted file mode 100644 index 1b374d0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-017.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateX with translation-value unit less argument in scientific notation with a negative exponent</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support unit less arguments in scientific numbers with negative exponents for translation-value. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(500e-1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-018.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-018.html deleted file mode 100644 index 7e38bcd..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-018.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pixel unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'px' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(500.0e-1px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-019.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-019.html deleted file mode 100644 index 863357d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-019.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with point unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pt' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(375e-1pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-020.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-020.html deleted file mode 100644 index 2978ed3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-020.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pica unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pc' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(31.25e-1pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-021.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-021.html deleted file mode 100644 index c6e11cf..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-021.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with millimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'mm' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(132.29166667e-1mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-022.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-022.html deleted file mode 100644 index 5256459..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-022.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with centimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'cm' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(13.22916667e-1cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-023.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-023.html deleted file mode 100644 index 3f699bec..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-023.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with inch unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'in' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(5.20833333e-1in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-024.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-024.html deleted file mode 100644 index 9be6a5d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-024.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with em unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'em' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(25e-1em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-025.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-025.html deleted file mode 100644 index cded2bea..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-025.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateX with a negative translation-value argument without unit</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative unit less arguments for translation-value. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-50)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-026.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-026.html deleted file mode 100644 index 0af2a64..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-026.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative pixel unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative numbers in the absolute length unit 'px' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-50px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-027.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-027.html deleted file mode 100644 index b1138d4b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-027.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative point unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative numbers in the absolute length unit 'pt' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-37.5pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-028.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-028.html deleted file mode 100644 index 3b4aefa..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-028.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative pica unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative numbers in the absolute length unit 'pc' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-3.125pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-029.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-029.html deleted file mode 100644 index 66e0d46..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-029.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative millimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative numbers in the absolute length unit 'mm' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-13.229166667mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-030.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-030.html deleted file mode 100644 index 9c307b1a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-030.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative centimeter unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative numbers in the absolute length unit 'cm' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-1.322916667cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-031.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-031.html deleted file mode 100644 index 8022e5d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-031.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative inch unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative numbers in the absolute length unit 'in' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-0.520833333in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-032.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-032.html deleted file mode 100644 index 11e7200..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-032.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative em unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support negative numbers in the relative length unit 'em' on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-2.5em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-033.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-033.html deleted file mode 100644 index 66e97cb..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-033.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateX with translation-value and a negative unit less argument in scientific notation</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative unit less arguments in scientific numbers for translation-value. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-5.0e1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-034.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-034.html deleted file mode 100644 index de82215..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-034.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with pixel unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'px' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-5.0e1px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-035.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-035.html deleted file mode 100644 index 78126b0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-035.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with point unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pt' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-3.75e1pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-036.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-036.html deleted file mode 100644 index 2a09172..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-036.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with pica unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pc' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-0.3125e1pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-037.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-037.html deleted file mode 100644 index 9ecad21..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-037.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with millimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'mm' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-1.3229166667e1mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-038.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-038.html deleted file mode 100644 index 5fe878b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-038.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with centimeter unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'cm' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-0.1322916667e1cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-039.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-039.html deleted file mode 100644 index a74b935..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-039.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with inch unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'in' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-0.0520833333e1in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-040.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-040.html deleted file mode 100644 index eb825e6d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-040.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with em unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'em' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-0.25e1em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-041.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-041.html deleted file mode 100644 index 23c3ab5..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-041.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateX with translation-value unit less negative argument in scientific notation with a negative exponent</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support unit less arguments in negative scientific numbers with negative exponents for translation-value. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-500e-1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-042.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-042.html deleted file mode 100644 index 092099f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-042.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with pixel unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'px' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-500.0e-1px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-043.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-043.html deleted file mode 100644 index 0f5ee94..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-043.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with point unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pt' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-375e-1pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-044.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-044.html deleted file mode 100644 index a7d6369..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-044.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with pica unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'pc' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-31.25e-1pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-045.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-045.html deleted file mode 100644 index 2eff68c90..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-045.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with millimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'mm' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-132.29166667e-1mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-046.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-046.html deleted file mode 100644 index 84a39f7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-046.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with centimeter unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'cm' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-13.22916667e-1cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-047.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-047.html deleted file mode 100644 index fb44dfa..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-047.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with inch unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support the absolute length unit 'in' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-5.20833333e-1in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-048.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-048.html deleted file mode 100644 index 5c3fbcb..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-048.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with em unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'em' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-25e-1em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-001.html deleted file mode 100644 index b3c1bbd..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-001.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with translateX applied twice</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function can be called twice on the same element. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(25px) translateX(25px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-002.html deleted file mode 100644 index 09e992cb..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-002.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with translateX applied once in pixels and once in percentage units</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function can be called twice on the same element with different translation-value units. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(25px) translateX(25%)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-003.html deleted file mode 100644 index 58f440e6..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-003.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with translateX applied twice in percentage units</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function can be called twice in percentage units. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(25%) translateX(25%)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-004.html deleted file mode 100644 index b528b07..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-combination-004.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with translateX applied in both directions</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function can be applied in both directions. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(150) translateX(-100)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-001.html deleted file mode 100644 index 76b330a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-001.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with ex unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'ex' on translation-value arguments. The rect in the test should be moved 40 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="41" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-002.html deleted file mode 100644 index d00eab3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-002.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with ex unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'ex' in scientific numbers on translation-value arguments. The rect in the test should be moved 40 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="41" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(0.1e1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-003.html deleted file mode 100644 index 2c6b52b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-003.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with ex unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'ex' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 40 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="41" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(10e-1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-004.html deleted file mode 100644 index 42fa0b4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-004.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative ex unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support negative numbers in the relative length unit 'ex' on translation-value arguments. The rect in the test should be moved 40 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="41" y="1" width="98" height="98" fill="red"/> - <rect x="80" width="100" height="100" fill="green" transform="translateX(-1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-005.html deleted file mode 100644 index 0416979d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-005.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with ex unit in scientific notation on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'ex' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 40 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="41" y="1" width="98" height="98" fill="red"/> - <rect x="80" width="100" height="100" fill="green" transform="translateX(-0.1e1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-006.html deleted file mode 100644 index a972bcbb..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-ex-unit-006.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with ex unit in scientific notation with a negative exponent on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateX transform function must support the relative length unit 'ex' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 40 pixels in the X direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="41" y="1" width="98" height="98" fill="red"/> - <rect x="80" width="100" height="100" fill="green" transform="translateX(-10e-1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-relative-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-relative-001.html deleted file mode 100644 index 9569955..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-relative-001.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with percentage unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support percentage units on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateX(50%)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-relative-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-relative-002.html deleted file mode 100644 index 2823b33..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateX/svg-translatex-relative-002.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative percentage unit on translateX</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatex"> - <link rel="match" href="reference/svg-translatex-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateX transform function must support negative percentage units on translation-value arguments. The rect in the test should be moved 50 pixels in the X direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="51" y="1" width="98" height="98" fill="red"/> - <rect x="100" width="100" height="100" fill="green" transform="translateX(-50%)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html deleted file mode 100644 index 5f1a9f3..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/reference/svg-translatey-ex-unit-ref.html +++ /dev/null
@@ -1,23 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Reftest Reference</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <meta name="flags" content="svg ahem"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect y="40" width="100" height="100" fill="green"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/reference/svg-translatey-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/reference/svg-translatey-ref.html deleted file mode 100644 index d6144b7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/reference/svg-translatey-ref.html +++ /dev/null
@@ -1,20 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Reftest Reference</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <meta name="flags" content="svg"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect y="50" width="100" height="100" fill="green"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-001.html deleted file mode 100644 index fe579ff..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-001.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateY with translation-value argument without unit</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support unit less arguments for translation-value. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(50)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-002.html deleted file mode 100644 index 1f5c94c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-002.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pixel unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'px' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(50px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-003.html deleted file mode 100644 index c74bf9a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-003.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with point unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pt' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(37.5pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-004.html deleted file mode 100644 index 6a7b220..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-004.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pica unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pc' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(3.125pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-005.html deleted file mode 100644 index 0055611..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-005.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with millimeter unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'mm' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(13.229166667mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-006.html deleted file mode 100644 index bb8cdca..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-006.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with centimeter unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'cm' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(1.322916667cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-007.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-007.html deleted file mode 100644 index 5eb8d326..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-007.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with inch unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'in' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(0.520833333in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-008.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-008.html deleted file mode 100644 index 939510f2..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-008.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with em unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'em' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(2.5em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-009.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-009.html deleted file mode 100644 index fbac351..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-009.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateY with translation-value and a unit less argument in scientific notation</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support unit less arguments in scientific numbers for translation-value. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(5.0e1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-010.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-010.html deleted file mode 100644 index fc130de..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-010.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pixel unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'px' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(5.0e1px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-011.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-011.html deleted file mode 100644 index c050228..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-011.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with point unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pt' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(3.75e1pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-012.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-012.html deleted file mode 100644 index 282900f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-012.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pica unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pc' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(.3125e1pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-013.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-013.html deleted file mode 100644 index f0d148c9..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-013.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with millimeter unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'mm' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(1.3229166667e1mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-014.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-014.html deleted file mode 100644 index 7d2ad7bc..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-014.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with centimeter unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'cm' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(.1322916667e1cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-015.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-015.html deleted file mode 100644 index 5a497fd..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-015.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with inch unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'in' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(0.0520833333e1in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-016.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-016.html deleted file mode 100644 index 671d7de..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-016.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with em unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'em' in scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(0.25e1em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-017.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-017.html deleted file mode 100644 index c726cae..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-017.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateY with translation-value unit less argument in scientific notation with a negative exponent</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support unit less arguments in scientific numbers with negative exponents for translation-value. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(500e-1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-018.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-018.html deleted file mode 100644 index 2af490a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-018.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pixel unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'px' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(500.0e-1px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-019.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-019.html deleted file mode 100644 index ae2a801..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-019.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with point unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pt' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(375e-1pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-020.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-020.html deleted file mode 100644 index efb90281..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-020.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with pica unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pc' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(31.25e-1pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-021.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-021.html deleted file mode 100644 index b371de86..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-021.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with millimeter unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'mm' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(132.29166667e-1mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-022.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-022.html deleted file mode 100644 index 18a33b0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-022.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with centimeter unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'cm' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(13.22916667e-1cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-023.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-023.html deleted file mode 100644 index d3ea774..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-023.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with inch unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'in' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(5.20833333e-1in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-024.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-024.html deleted file mode 100644 index e07a210cf..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-024.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with em unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'em' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(25e-1em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-025.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-025.html deleted file mode 100644 index f7a46e41..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-025.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateY with a negative translation-value argument without unit</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative unit less arguments for translation-value. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-50)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-026.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-026.html deleted file mode 100644 index 8b6b39e..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-026.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative pixel unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative numbers in the absolute length unit 'px' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-50px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-027.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-027.html deleted file mode 100644 index 32d21a7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-027.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative point unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative numbers in the absolute length unit 'pt' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-37.5pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-028.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-028.html deleted file mode 100644 index 5e1eadf..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-028.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative pica unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative numbers in the absolute length unit 'pc' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-3.125pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-029.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-029.html deleted file mode 100644 index a363d48..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-029.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative millimeter unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative numbers in the absolute length unit 'mm' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-13.229166667mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-030.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-030.html deleted file mode 100644 index bb383a92..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-030.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative centimeter unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative numbers in the absolute length unit 'cm' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-1.322916667cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-031.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-031.html deleted file mode 100644 index 7600e43..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-031.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative inch unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative numbers in the absolute length unit 'in' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-0.520833333in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-032.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-032.html deleted file mode 100644 index a33442cd..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-032.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative em unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support negative numbers in the relative length unit 'em' on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-2.5em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-033.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-033.html deleted file mode 100644 index 0c5701a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-033.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateY with translation-value and a negative unit less argument in scientific notation</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative unit less arguments in scientific numbers for translation-value. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-5.0e1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-034.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-034.html deleted file mode 100644 index 0324082..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-034.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with pixel unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'px' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-5.0e1px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-035.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-035.html deleted file mode 100644 index 49f2125..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-035.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with point unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pt' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-3.75e1pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-036.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-036.html deleted file mode 100644 index aa708f9a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-036.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with pica unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pc' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-0.3125e1pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-037.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-037.html deleted file mode 100644 index 619795a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-037.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with millimeter unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'mm' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-1.3229166667e1mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-038.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-038.html deleted file mode 100644 index 06cf7a6e7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-038.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with centimeter unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'cm' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-0.1322916667e1cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-039.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-039.html deleted file mode 100644 index 5fe03fe..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-039.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with inch unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'in' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-0.0520833333e1in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-040.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-040.html deleted file mode 100644 index c3504b73..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-040.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with em unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'em' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-0.25e1em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-041.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-041.html deleted file mode 100644 index 10f8ced..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-041.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translateY with translation-value unit less negative argument in scientific notation with a negative exponent</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform-value"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support unit less arguments in negative scientific numbers with negative exponents for translation-value. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-500e-1)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-042.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-042.html deleted file mode 100644 index 464352a7..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-042.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with pixel unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'px' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-500.0e-1px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-043.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-043.html deleted file mode 100644 index 9e46214..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-043.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with point unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pt' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-375e-1pt)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-044.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-044.html deleted file mode 100644 index 3d89bee..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-044.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with pica unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'pc' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-31.25e-1pc)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-045.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-045.html deleted file mode 100644 index 91bbd0f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-045.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with millimeter unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'mm' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-132.29166667e-1mm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-046.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-046.html deleted file mode 100644 index 3a924614..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-046.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with centimeter unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'cm' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-13.22916667e-1cm)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-047.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-047.html deleted file mode 100644 index cf2abc8..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-047.html +++ /dev/null
@@ -1,27 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with inch unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support the absolute length unit 'in' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-5.20833333e-1in)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-048.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-048.html deleted file mode 100644 index 16bf16a1..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-048.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with em unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'em' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 20px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-25e-1em)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-001.html deleted file mode 100644 index 09e907c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-001.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with translateY applied twice</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function can be called twice on the same element. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(25px) translateY(25px)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-002.html deleted file mode 100644 index 2d83c9a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-002.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with translateY applied once in pixels and once in percentage units</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function can be called twice on the same element with different translation-value units. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(25px) translateY(25%)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-003.html deleted file mode 100644 index fd39886..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-003.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with translateY applied twice in percentage units</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function can be called twice in percentage units. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(25%) translateY(25%)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-004.html deleted file mode 100644 index 72081cc..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-combination-004.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with translateY applied in both directions</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function can be applied in both directions. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(150) translateY(-100)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-001.html deleted file mode 100644 index e4fb76f..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-001.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with ex unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'ex' on translation-value arguments. The rect in the test should be moved 40 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="41" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-002.html deleted file mode 100644 index 3cfbe25..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-002.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with ex unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'ex' in scientific numbers on translation-value arguments. The rect in the test should be moved 40 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="41" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(0.1e1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-003.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-003.html deleted file mode 100644 index ac71f770..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-003.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with ex unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'ex' in scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 40 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="41" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(10e-1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-004.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-004.html deleted file mode 100644 index 9ce982122..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-004.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative ex unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support negative numbers in the relative length unit 'ex' on translation-value arguments. The rect in the test should be moved 40 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="41" width="98" height="98" fill="red"/> - <rect y="80" width="100" height="100" fill="green" transform="translateY(-1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-005.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-005.html deleted file mode 100644 index 7bb96088..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-005.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with ex unit in scientific notation on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'ex' in negative scientific numbers on translation-value arguments. The rect in the test should be moved 40 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="41" width="98" height="98" fill="red"/> - <rect y="80" width="100" height="100" fill="green" transform="translateY(-0.1e1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-006.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-006.html deleted file mode 100644 index 728c8d2..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-ex-unit-006.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value negative argument with ex unit in scientific notation with a negative exponent on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-number"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ex-unit-ref.html"> - <meta name="flags" content="svg ahem"> - <meta name="assert" content="The translateY transform function must support the relative length unit 'ex' in negative scientific numbers with negative exponents on translation-value arguments. The rect in the test should be moved 40 pixels in the Y direction"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - line-height: 1; - font: 50px Ahem; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="41" width="98" height="98" fill="red"/> - <rect y="80" width="100" height="100" fill="green" transform="translateY(-10e-1ex)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-relative-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-relative-001.html deleted file mode 100644 index 078514ff..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-relative-001.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with percentage unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support percentage units on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect width="100" height="100" fill="green" transform="translateY(50%)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-relative-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-relative-002.html deleted file mode 100644 index aa79558b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transforms/translateY/svg-translatey-relative-002.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <title>CSS Transforms Test: SVG presentation attribute and translation-value argument with negative percentage unit on translateY</title> - <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> - <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#funcdef-translatey"> - <link rel="match" href="reference/svg-translatey-ref.html"> - <meta name="flags" content="svg"> - <meta name="assert" content="The translateY transform function must support negative percentage units on translation-value arguments. The rect in the test should be moved 50 pixels in the Y direction"> - <style type="text/css"> - svg { - width: 300px; - height: 300px; - } - </style> -</head> -<body> - <p>The test passes if there is a green square and no red.</p> - <svg> - <rect x="1" y="51" width="98" height="98" fill="red"/> - <rect y="100" width="100" height="100" fill="green" transform="translateY(-50%)"/> - </svg> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/direction-upright-001.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/direction-upright-001.html new file mode 100644 index 0000000..c999995 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/direction-upright-001.html
@@ -0,0 +1,73 @@ +<!DOCTYPE html> +<title>'text-orientation: upright' forces text to strong LTR in vertical typographic modes</title> +<link rel=help href="https://www.w3.org/TR/css-writing-modes-3/#text-orientation"> +<link rel=match href="reference/direction-upright-001.html"> +<meta charset=utf-8> +<style> + body > div { + border: solid silver; + float: left; + margin: 1em; + text-align: right; + font: 20px/1 sans-serif; + } + span { text-orientation: upright; } + hr { clear: both; } +</style> + +<p>Test passes if both rows of boxes are identical (order, orientation, and arrangement of contents). + +<!-- test --> + +<div dir=rtl style="writing-mode: vertical-rl"> + א ב <span>ג ד</span> <span>ה ו</span> ז<br> + ١ ٢ <span>٣ ٤</span> <span>٥ ٦</span> ٧ +</div> +<div dir=rtl style="writing-mode: vertical-lr"> + א ב <span>ג ד</span> <span>ה ו</span> ז<br> + ١ ٢ <span>٣ ٤</span> <span>٥ ٦</span> ٧ +</div> + +<!-- control --> + +<div dir=rtl> + א ב <span>ג ד</span> <span>ה ו</span> ז<br> + ١ ٢ <span>٣ ٤</span> <span>٥ ٦</span> ٧ +</div> +<div dir=rtl style="writing-mode: sideways-rl"> + א ב <span>ג ד</span> <span>ה ו</span> ז<br> + ١ ٢ <span>٣ ٤</span> <span>٥ ٦</span> ٧ +</div> +<div dir=rtl style="writing-mode: sideways-lr"> + א ב <span>ג ד</span> <span>ה ו</span> ז<br> + ١ ٢ <span>٣ ٤</span> <span>٥ ٦</span> ٧ +</div> + +<hr> + +<!-- reference --> + +<div style="writing-mode: vertical-rl"> +<bdo dir=ltr> + ז <span>ג ד</span> <span>ה ו</span> ב א<br> +٧ <span>٣ ٤</span> <span>٥ ٦</span> ٢ ١ +</bdo> +</div> +<div style="writing-mode: vertical-lr"> +<bdo dir=ltr> + ז <span>ג ד</span> <span>ה ו</span> ב א<br> +٧ <span>٣ ٤</span> <span>٥ ٦</span> ٢ ١ +</bdo> +</div> + +<div dir=rtl> א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div> +<div dir=rtl style="writing-mode: sideways-rl"> + א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div> +<div dir=rtl style="writing-mode: sideways-lr"> + א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/direction-upright-002.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/direction-upright-002.html new file mode 100644 index 0000000..daa76c8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/direction-upright-002.html
@@ -0,0 +1,138 @@ +<!DOCTYPE html> +<title>'text-orientation: upright' forces used 'direction' to LTR in vertical typographic modes</title> +<link rel=help href="https://www.w3.org/TR/css-writing-modes-3/#text-orientation"> +<link rel=help href="https://www.w3.org/TR/css-flexbox-1/#flex-direction-property"> +<link rel=help href="https://www.w3.org/TR/css-grid-1/#grid-auto-flow-property"> +<link rel=help href="https://www.w3.org/TR/css-ruby-1/#bidi"> +<link rel=match href="reference/direction-upright-002.html"> + +<style> + body > div { + border: solid silver; + float: left; + margin: 1em; + border-inline-start-color: orange; + border-block-start-color: aqua; + border-inline-end-color: lime; + border-block-end-color: yellow; + } + colgroup:first-child { background: fuchsia; } + col:last-child { background: purple; } + .flex { display: flex; } + .grid { grid-template-columns: auto auto } + hr { clear: both } +</style> + +<p>Test passes if both rows of boxes are identical (coloring, order, orientation, and arrangement of contents). + +<!-- test --> + +<div dir=rtl style="writing-mode: vertical-rl; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: vertical-lr; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> + +<!-- control --> + +<div dir=rtl style="text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: sideways-rl; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: sideways-lr; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> + +<hr> + +<!-- reference --> + +<div style="writing-mode: vertical-rl; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div style="writing-mode: vertical-lr; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> + +<div dir=rtl> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: sideways-rl"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: sideways-lr"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/inline-block-alignment-007-ref.xht b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/inline-block-alignment-007-ref.xht new file mode 100644 index 0000000..d5bb56d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/inline-block-alignment-007-ref.xht
@@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>CSS Reftest Reference</title> + <link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact" /> + <meta name="flags" content="image" /> + <style type="text/css"><![CDATA[ + + img + { + vertical-align: top; + } + + .ignore { + float: left; + height: 120px; + width: 120px; + background: silver; + margin: 60px 24px 30px 60px; + ]]></style> + + </head> + + <body> + + <p>Test passes if the <strong>left edge</strong> of a <strong>single blue irregular polygon</strong> is straight and unbroken.</p> + + <div> + <div class="ignore"></div> + <img src="support/swatch-blue.png" width="48" height="60" alt="Image download support must be enabled" /><br /><!-- + --><img src="support/swatch-blue.png" width="96px" height="120" alt="Image download support must be enabled" /><br /><!-- + --><img src="support/swatch-blue.png" width="24" height="30" alt="Image download support must be enabled" /> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/inline-block-alignment-007.xht b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/inline-block-alignment-007.xht index 76d7f79..36914144 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/inline-block-alignment-007.xht +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/inline-block-alignment-007.xht
@@ -6,14 +6,14 @@ <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2015-09-26 --> <link rel="help" title="CSS3 Writing modes: 4.3. Atomic Inline Baseline" href="http://www.w3.org/TR/css-writing-modes-3/#replaced-baselines" /> <link rel="help" title="CSS2.1 9.2.2 Inline-level elements and inline boxes" href="http://www.w3.org/TR/CSS21/visuren.html#inline-boxes" /> - <link rel="match" href="inline-block-alignment-006-ref.xht" /> + <link rel="match" href="inline-block-alignment-007-ref.xht" /> <meta name="assert" content="This test checks the generation of inline-block baseline. When 'writing-mode' is 'vertical-lr' and when 'text-orientation' is 'sideways', then the alphabetical baseline is used as the dominant baseline." /> <meta name="flags" content="ahem" /> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style type="text/css"><![CDATA[ div#lr-sideways { - color: fuchsia; + color: blue; font: 60px/1 Ahem; /* computes to 60px/60px */ writing-mode: vertical-lr; text-orientation: sideways; @@ -35,7 +35,7 @@ display: block; } - span#fuchsia30 + #small { padding-right: 4em; /* computes to 120px */ font-size: 0.5em; /* computes to 30px */ @@ -44,18 +44,20 @@ test a bit more challenging. */ } + + .ignore { color: silver; } ]]></style> </head> <body> - <p>Test passes if the <strong>left edge</strong> of an irregular polygon is straight and unbroken.</p> + <p>Test passes if the <strong>left edge</strong> of a <strong>single blue irregular polygon</strong> is straight and unbroken.</p> <div id="lr-sideways">É<div id="inline-block"> - <span class="block-descendant">B</span> + <span class="block-descendant ignore">B</span> <span class="block-descendant last-line-box">É</span> - </div><span id="fuchsia30">É</span></div> + </div><span id="small">É</span></div> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/direction-upright-001.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/direction-upright-001.html new file mode 100644 index 0000000..b8768ba7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/direction-upright-001.html
@@ -0,0 +1,71 @@ +<!DOCTYPE html> +<title>Reftest Reference</title> +<meta charset=utf-8> +<style> + body > div { + border: solid silver; + float: left; + margin: 1em; + text-align: right; + font: 20px/1 sans-serif; + } + span { text-orientation: upright; } + hr { clear: both; } +</style> + +<p>Test passes if both rows of boxes are identical (order, orientation, and arrangement of contents). + + +<div style="writing-mode: vertical-rl"> +<bdo dir=ltr> + ז <span>ג ד</span> <span>ה ו</span> ב א<br> +٧ <span>٣ ٤</span> <span>٥ ٦</span> ٢ ١ +</bdo> +</div> +<div style="writing-mode: vertical-lr"> +<bdo dir=ltr> + ז <span>ג ד</span> <span>ה ו</span> ב א<br> +٧ <span>٣ ٤</span> <span>٥ ٦</span> ٢ ١ +</bdo> +</div> + +<div dir=rtl> א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div> +<div dir=rtl style="writing-mode: sideways-rl"> + א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div> +<div dir=rtl style="writing-mode: sideways-lr"> + א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div> + + +<hr> + + +<div style="writing-mode: vertical-rl"> +<bdo dir=ltr> + ז <span>ג ד</span> <span>ה ו</span> ב א<br> +٧ <span>٣ ٤</span> <span>٥ ٦</span> ٢ ١ +</bdo> +</div> +<div style="writing-mode: vertical-lr"> +<bdo dir=ltr> + ז <span>ג ד</span> <span>ה ו</span> ב א<br> +٧ <span>٣ ٤</span> <span>٥ ٦</span> ٢ ١ +</bdo> +</div> + +<div dir=rtl> א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div> +<div dir=rtl style="writing-mode: sideways-rl"> + א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div> +<div dir=rtl style="writing-mode: sideways-lr"> + א ב ג ד ה ו ז<br> + ١ ٢ ٣ ٤ ٥ ٦ ٧ +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/direction-upright-002.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/direction-upright-002.html new file mode 100644 index 0000000..eac7ca9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/direction-upright-002.html
@@ -0,0 +1,127 @@ +<!DOCTYPE html> +<title>Reftest Reference</title> + +<style> + body > div { + border: solid silver; + float: left; + margin: 1em; + border-inline-start-color: orange; + border-block-start-color: aqua; + border-inline-end-color: lime; + border-block-end-color: yellow; + } + colgroup:first-child { background: fuchsia; } + col:last-child { background: purple; } + .flex { display: flex; } + .grid { grid-template-columns: auto auto } + hr { clear: both } +</style> + +<p>Test passes if both rows of boxes are identical (coloring, order, orientation, and arrangement of contents). + +<div style="writing-mode: vertical-rl; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div style="writing-mode: vertical-lr; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> + +<div dir=rtl> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: sideways-rl"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: sideways-lr"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> + +<hr> + +<div style="writing-mode: vertical-rl; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div style="writing-mode: vertical-lr; text-orientation: upright"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> + +<div dir=rtl> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: sideways-rl"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div> +<div dir=rtl style="writing-mode: sideways-lr"> + <table> + <colgroup></colgroup> + <colgroup><col><col></colgroup> + <tr><td>A<td>B<td>C + </table> + <div class=flex>A <span>B</span></div> + <div class=grid>A <span>B</span></div> + <div>A <ruby>B<rt>b</rt> C<rt>c</rt></ruby><ruby>D<rt>d</rt> E<rt>e</rt></ruby></div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/offsetTopLeft-border-box.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/offsetTopLeft-border-box.html new file mode 100644 index 0000000..8cabf647 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/offsetTopLeft-border-box.html
@@ -0,0 +1,61 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#extensions-to-the-htmlelement-interface"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> + +.container { + position: relative; + font: 20px/1 Ahem; + width: 150px; + height: 100px; + padding: 2px 10px; + border-width: 3px 6px; + border-style: solid; + box-sizing: border-box; +} + +.target { background: grey; } +.hl { writing-mode:horizontal-tb; } +.vlr { writing-mode:vertical-lr; } +</style> +<div id=tests> +<div class="container hl"> + <span class="target">x</span> +</div> +<div class="container vlr"> + <span class="target">x</span> +</div> +<div class="container hl"> + <div class="target">x</div> +</div> +<div class="container vlr"> + <div class="target">x</div> +</div> +</div> +<script> +setup({explicit_done: true}); +onload = () => { + // Clone the above tests for the following 'display' types: + let display = ['inline-block', 'grid', 'inline-grid', 'flex', 'inline-flex', 'flow-root' ]; + let tests = document.querySelector('#tests'); + display.forEach((display) => { + let t = tests.cloneNode(true); + [...t.children].forEach((child) => { + child.setAttribute("style", "display:"+display); + }); + document.body.appendChild(t); + }); + // Check that all of them return an offset relative the padding edge. + var i = 0; + document.querySelectorAll('.target').forEach((target) => { + test(() => { + assert_equals(target.offsetLeft, 10, 'offsetLeft'); + assert_equals(target.offsetTop, 2, 'offsetTop'); + }, 'container: ' + i); + i++; + }); + done(); +}; +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/animation/offset-interpolation.html b/third_party/blink/web_tests/external/wpt/css/motion/animation/offset-interpolation.html index 0d1ba1c..04f4d4b3 100644 --- a/third_party/blink/web_tests/external/wpt/css/motion/animation/offset-interpolation.html +++ b/third_party/blink/web_tests/external/wpt/css/motion/animation/offset-interpolation.html
@@ -92,15 +92,6 @@ {at: 1, expect: 'path("M0 0H 300") 600px 0deg'}, {at: 1.5, expect: 'path("M0 0H 300") 650px 0deg'}, ]); - - // Regression test for crbug.com/994489 - test_interpolation({ - property: 'offset', - from: 'path("M0 0H 200") 500px auto', - to: 'path("M0 0H 300") 600px 0deg', - }, [ - {at: 3.40282e+038, expect: 'path("M0 0H 3.4e+38") 3.36e+07px 0deg'}, - ]); </script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-001-ref.html similarity index 89% rename from third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-ref.html rename to third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-001-ref.html index fde97bd..63c0a2ea 100644 --- a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-001-ref.html
@@ -12,7 +12,7 @@ height: 200px; background-color: lime; transform-origin: 0px 0px; - transform: rotate(60deg) translate(20px); + transform: rotate(45deg) translate(20px); } </style> </head>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-001.html similarity index 86% rename from third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray.html rename to third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-001.html index 6c39e7b..26b3b11c 100644 --- a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray.html +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-001.html
@@ -4,7 +4,7 @@ <title>CSS Motion Path: ray paths</title> <link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> - <link rel="match" href="offset-path-ray-ref.html"> + <link rel="match" href="offset-path-ray-001-ref.html"> <meta name="assert" content="This tests that ray() generates a rotation and translation."> <style> #target { @@ -15,7 +15,7 @@ height: 200px; background-color: lime; transform-origin: 0px 0px; - offset-path: ray(150deg closest-side); + offset-path: ray(135deg closest-side); offset-distance: 20px; } </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-002.html similarity index 71% copy from third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray.html copy to third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-002.html index 6c39e7b..7c023657 100644 --- a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray.html +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-002.html
@@ -2,9 +2,8 @@ <html> <head> <title>CSS Motion Path: ray paths</title> - <link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> - <link rel="match" href="offset-path-ray-ref.html"> + <link rel="match" href="offset-path-ray-001-ref.html"> <meta name="assert" content="This tests that ray() generates a rotation and translation."> <style> #target { @@ -15,8 +14,8 @@ height: 200px; background-color: lime; transform-origin: 0px 0px; - offset-path: ray(150deg closest-side); - offset-distance: 20px; + offset-path: ray(135deg closest-side); + offset-distance: 20%; } </style> </head>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-003-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-003-ref.html new file mode 100644 index 0000000..7261167c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-003-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <style> + #container { + width: 400px; + height: 400px; + } + #target { + position: relative; + left: 100px; + top: 100px; + width: 100px; + height: 50px; + background-color: lime; + transform-origin: 0px 0px; + transform: rotate(45deg) translate(100px); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-003.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-003.html new file mode 100644 index 0000000..4dc27c4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-003.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-003-ref.html"> + <meta name="assert" content="This tests that ray() generates a rotation and translation."> + <style> + #container { + width: 400px; + height: 400px; + } + #target { + position: relative; + left: 100px; + top: 100px; + width: 100px; + height: 50px; + background-color: lime; + transform-origin: 0px 0px; + offset-path: ray(135deg closest-side); + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-004.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-004.html new file mode 100644 index 0000000..e6bf08f0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-004.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-003-ref.html"> + <meta name="assert" content="This tests that ray() generates a rotation and translation."> + <style> + #container { + width: 150px; + height: 150px; + } + #target { + position: relative; + left: 100px; + top: 100px; + width: 100px; + height: 50px; + background-color: lime; + transform-origin: 0px 0px; + offset-path: ray(135deg farthest-side); + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-005-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-005-ref.html new file mode 100644 index 0000000..525d7470 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-005-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <style> + #container { + width: 400px; + height: 400px; + } + #target { + position: relative; + left: 120px; + top: 160px; + width: 100px; + height: 50px; + background-color: lime; + transform-origin: 0px 0px; + transform: rotate(45deg) translate(200px); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-005.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-005.html new file mode 100644 index 0000000..a1aa8e1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-005.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-005-ref.html"> + <meta name="assert" content="This tests that ray() generates a rotation and translation."> + <style> + #container { + width: 400px; + height: 400px; + } + #target { + position: relative; + left: 120px; + top: 160px; + width: 100px; + height: 50px; + background-color: lime; + transform-origin: 0px 0px; + offset-path: ray(135deg closest-corner); + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-006.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-006.html new file mode 100644 index 0000000..dbbd12b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-006.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-005-ref.html"> + <meta name="assert" content="This tests that ray() generates a rotation and translation."> + <style> + #container { + width: 200px; + height: 200px; + } + #target { + position: relative; + left: 120px; + top: 160px; + width: 100px; + height: 50px; + background-color: lime; + transform-origin: 0px 0px; + offset-path: ray(135deg farthest-corner); + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-007-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-007-ref.html new file mode 100644 index 0000000..a48d9f0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-007-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <style> + #container { + width: 400px; + height: 300px; + } + #target { + position: relative; + left: 200px; + top: 100px; + width: 100px; + height: 50px; + background-color: lime; + transform-origin: 0px 0px; + transform: rotate(90deg) translate(200px); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-007.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-007.html new file mode 100644 index 0000000..1e75771 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-007.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-007-ref.html"> + <meta name="assert" content="This tests that ray() generates a rotation and translation."> + <style> + #container { + width: 400px; + height: 300px; + } + #target { + position: relative; + left: 200px; + top: 100px; + width: 100px; + height: 50px; + background-color: lime; + transform-origin: 0px 0px; + offset-path: ray(180deg sides); + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-008-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-008-ref.html new file mode 100644 index 0000000..2c3720c4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-008-ref.html
@@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <style> + #container { + width: 200px; + height: 200px; + } + #target { + position: relative; + left: 130%; + top: 60%; + width: 40px; + height: 40px; + background-color: lime; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-008.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-008.html new file mode 100644 index 0000000..97d9cfb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-008.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-008-ref.html"> + <meta name="assert" content="The initial position is outside the containing block."> + <style> + #container { + width: 200px; + height: 200px; + } + #target { + position: relative; + left: 140%; + top: 70%; + width: 40px; + height: 40px; + background-color: lime; + offset-path: ray(-90deg sides); + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-009-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-009-ref.html new file mode 100644 index 0000000..95b5436 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-009-ref.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <style> + #container { + width: 200px; + height: 200px; + } + #target { + position: relative; + left: 130%; + top: 60%; + width: 40px; + height: 40px; + background-color: lime; + transform: translateY(60px); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-009.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-009.html new file mode 100644 index 0000000..c4986eb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-009.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-009-ref.html"> + <meta name="assert" content="The initial position is outside the containing block."> + <style> + #container { + width: 200px; + height: 200px; + } + #target { + position: relative; + left: 140%; + top: 70%; + width: 40px; + height: 40px; + background-color: lime; + offset-path: ray(180deg closest-side); + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-001-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-001-ref.html new file mode 100644 index 0000000..24a823f9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-001-ref.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <style> + #container { + width: 300px; + height: 300px; + } + #target { + position: relative; + left: 150px; + top: 150px; + width: 100px; + height: 100px; + background-color: lime; + transform: rotate(0deg) translate(50px, -150px); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-001.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-001.html new file mode 100644 index 0000000..83e1692 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-001.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-contain-001-ref.html"> + <meta name="assert" content="This tests that the element should be contained in ray() path circle."> + <style> + #container { + width: 300px; + height: 300px; + } + #target { + position: relative; + left: 150px; + top: 150px; + width: 100px; + height: 100px; + background-color: lime; + offset-path: ray(45deg closest-corner contain); + offset-rotate: 0deg; + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-002-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-002-ref.html new file mode 100644 index 0000000..92ccb13 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-002-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <style> + #container { + width: 300px; + height: 300px; + } + #target { + position: relative; + left: 100px; + top: 100px; + width: 100px; + height: 100px; + background-color: lime; + /* The vertical movement is about sqrt(150^2 - 50^2) - 50 */ + transform: translateY(91.42px); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-002.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-002.html new file mode 100644 index 0000000..db7710c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-002.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-contain-002-ref.html"> + <meta name="assert" content="This tests that the element should be contained in ray() path circle."> + <style> + #container { + width: 300px; + height: 300px; + } + #target { + position: relative; + left: 150px; + top: 150px; + width: 100px; + height: 100px; + background-color: lime; + offset-path: ray(180deg closest-side contain); + offset-rotate: 0deg; + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-003-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-003-ref.html new file mode 100644 index 0000000..3ad660e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-003-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <style> + #container { + width: 300px; + height: 300px; + } + #target { + position: relative; + left: 100px; + top: 100px; + width: 100px; + height: 100px; + background-color: lime; + /* The movement is about 150 - 50 * sqrt(2) */ + transform: rotate(-45deg) translate(79.29px) rotate(45deg); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-003.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-003.html new file mode 100644 index 0000000..08705ad --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-003.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-contain-003-ref.html"> + <meta name="assert" content="This tests that the element should be contained in ray() path circle."> + <style> + #container { + width: 300px; + height: 300px; + } + #target { + position: relative; + left: 150px; + top: 150px; + width: 100px; + height: 100px; + background-color: lime; + offset-path: ray(45deg closest-side contain); + offset-rotate: 0deg; + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-004-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-004-ref.html new file mode 100644 index 0000000..38b0d44 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-004-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <style> + #container { + width: 300px; + height: 300px; + } + #target { + position: relative; + left: 100px; + top: 100px; + width: 100px; + height: 100px; + background-color: lime; + /* The movement is about sqrt(150^2 - 50^2) - 50 */ + transform: rotate(-45deg) translate(91.42px); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-004.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-004.html new file mode 100644 index 0000000..9848259 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-004.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-contain-004-ref.html"> + <meta name="assert" content="This tests that the element should be contained in ray() path circle."> + <style> + #container { + width: 300px; + height: 300px; + } + #target { + position: relative; + left: 150px; + top: 150px; + width: 100px; + height: 100px; + background-color: lime; + offset-path: ray(45deg closest-side contain); + offset-rotate: auto; + offset-distance: 100%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-005-ref.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-005-ref.html new file mode 100644 index 0000000..c1dafc4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-005-ref.html
@@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <style> + #container { + width: 250px; + height: 250px; + transform: translate(100px); + } + #target { + position: relative; + left: 50px; + top: 50px; + width: 150px; + height: 25px; + background-color: lime; + /* + * The original path length is 50px, which is not enough to contain + * the element entirely, so it should be increased. + * "75px" is just the center of the element, which makes the path + * length increase minimally. + * Besides, -75px = (-150px * 2) + 225px, the used offset distance is + * -225px in this case. + * Note: offset-anchor is "200% -300%", and ray angle is -90deg. + */ + transform: translate(calc(-75px), calc(25px * 3)); + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-005.html b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-005.html new file mode 100644 index 0000000..0ec0c25 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/motion/offset-path-ray-contain-005.html
@@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> + <head> + <title>CSS Motion Path: ray paths with contain</title> + <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> + <link rel="match" href="offset-path-ray-contain-005-ref.html"> + <meta name="assert" content="This tests that ray() with contain and the path length increases."> + <style> + #container { + width: 250px; + height: 250px; + /* move container to right 100px to make sure we render the element + properly */ + transform: translate(100px); + } + #target { + position: relative; + left: 50px; + top: 50px; + width: 150px; + height: 25px; + background-color: lime; + offset-path: ray(-90deg closest-side contain); + offset-anchor: 200% -300%; + offset-rotate: 0deg; + offset-distance: 0%; + } + </style> + </head> + <body> + <div id="container"> + <div id="target"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/fonts/math/operators.woff b/third_party/blink/web_tests/external/wpt/fonts/math/operators.woff new file mode 100644 index 0000000..bb747e06 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fonts/math/operators.woff Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/require-corp.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/require-corp.https.html index 0bd6aab7..5f01022 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/require-corp.https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/require-corp.https.html
@@ -33,7 +33,7 @@ t.step_timeout(() => { assert_equals(frame.contentDocument, null); t.done(); - }, 500); + }, 2000); }); frame.src = `resources/navigate-require-corp.sub.html?channelName=${bc.name}&to=/common/blank.html`; document.body.append(frame);
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dataset-set.html b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dataset-set.html index 722b1797..dbce5de 100644 --- a/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dataset-set.html +++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/dataset-set.html
@@ -17,25 +17,27 @@ } test(function() { assert_true(testSet('foo', 'data-foo')); }, - "Setting element.dataset['foo'] should also change the value of element.getAttribute('data-foo')'"); + "Setting element.dataset['foo'] should also change the value of element.getAttribute('data-foo')"); test(function() { assert_true(testSet('fooBar', 'data-foo-bar')); }, - "Setting element.dataset['fooBar'] should also change the value of element.getAttribute('data-foo-bar')'"); + "Setting element.dataset['fooBar'] should also change the value of element.getAttribute('data-foo-bar')"); test(function() { assert_true(testSet('-', 'data--')); }, - "Setting element.dataset['-'] should also change the value of element.getAttribute('data--')'"); + "Setting element.dataset['-'] should also change the value of element.getAttribute('data--')"); test(function() { assert_true(testSet('Foo', 'data--foo')); }, - "Setting element.dataset['Foo'] should also change the value of element.getAttribute('data--foo')'"); + "Setting element.dataset['Foo'] should also change the value of element.getAttribute('data--foo')"); test(function() { assert_true(testSet('-Foo', 'data---foo')); }, - "Setting element.dataset['-Foo'] should also change the value of element.getAttribute('data---foo')'"); + "Setting element.dataset['-Foo'] should also change the value of element.getAttribute('data---foo')"); test(function() { assert_true(testSet('', 'data-')); }, - "Setting element.dataset[''] should also change the value of element.getAttribute('data-')'"); + "Setting element.dataset[''] should also change the value of element.getAttribute('data-')"); test(function() { assert_true(testSet('\xE0', 'data-\xE0')); }, - "Setting element.dataset['\xE0'] should also change the value of element.getAttribute('data-\xE0')'"); + "Setting element.dataset['\xE0'] should also change the value of element.getAttribute('data-\xE0')"); test(function() { assert_throws('SYNTAX_ERR', function() { testSet('-foo', 'dummy') }); }, - "Setting element.dataset['-foo'] should throw a SYNTAX_ERR'"); + "Setting element.dataset['-foo'] should throw a SYNTAX_ERR"); test(function() { assert_throws('INVALID_CHARACTER_ERR', function() { testSet('foo\x20', 'dummy') }); }, - "Setting element.dataset['foo\x20'] should throw an INVALID_CHARACTER_ERR'"); - test(function() { assert_throws('INVALID_CHARACTER_ERR', function() { testSet('foo\uF900', 'dummy') }); }, - "Setting element.dataset['foo\uF900'] should throw an INVALID_CHARACTER_ERR'"); + "Setting element.dataset['foo\x20'] should throw an INVALID_CHARACTER_ERR"); + test(function() { assert_throws('INVALID_CHARACTER_ERR', function() { testSet('\u037Efoo', 'dummy') }); }, + "Setting element.dataset['\u037Efoo'] should throw an INVALID_CHARACTER_ERR"); + test(function() { assert_true(testSet('\u0BC6foo', 'data-\u0BC6foo')); }, + "Setting element.dataset['\u0BC6foo'] should also change the value of element.getAttribute('\u0BC6foo')"); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt index 7672a376..5b67ab76 100644 --- a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 239 tests; 236 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 254 tests; 251 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS Simplest possible test ("<div>abc") PASS Leading whitespace removed ("<div> abc") PASS Trailing whitespace removed ("<div>abc ") @@ -52,7 +52,22 @@ PASS Replaced element <img> with display:block should be treated as block-level ("<div>abc <img style='display:block'> def") PASS Replaced element <canvas> with display:block should be treated as block-level ("<div>abc <canvas style='display:block'></canvas> def") PASS Soft line breaks ignored ("<div style='width:0'>abc def") +PASS Soft line break at hyphen ignored ("<div style='width:0'>abc-def") PASS Whitespace text node preserved ("<div style='width:0'><span>abc</span> <span>def</span>") +PASS Soft breaks ignored in presence of word-break:break-word ("<div style='width:1px; word-break:break-word'>Hello Kitty</div>") +PASS Element boundaries ignored for soft break handling (1) ("<div style='width:1px; word-break:break-word'><x>Hello</x> <x>Kitty</x></div>") +PASS Whitespace collapses across element boundaries at soft break (1) ("<div style='width:1px; word-break:break-word'><x>Hello</x> <x> Kitty</x></div>") +PASS Element boundaries ignored for soft break handling (2) ("<div style='width:1px; word-break:break-word'><x>Hello</x><x> Kitty</x></div>") +PASS Whitespace collapses across element boundaries at soft break (2) ("<div style='width:1px; word-break:break-word'><x>Hello </x> <x>Kitty</x></div>") +PASS Element boundaries ignored for soft break handling (3) ("<div style='width:1px; word-break:break-word'><x>Hello </x><x>Kitty</x></div>") +PASS Whitespace collapses across element boundaries at soft break (3) ("<div style='width:1px; word-break:break-word'><x>Hello </x><x> Kitty</x></div>") +PASS Whitespace collapses across element boundaries at soft break (4) ("<div style='width:1px; word-break:break-word'><x>Hello </x> <x> Kitty</x></div>") +PASS Element boundaries ignored for soft break handling (4) ("<div style='width:1px; word-break:break-word'><x>Hello</x> Kitty</div>") +PASS Element boundaries ignored for soft break handling (5) ("<div style='width:1px; word-break:break-word'><x>Hello </x>Kitty</div>") +PASS Soft breaks ignored, text-transform applied ("<div style='width:1px; word-break:break-word; text-transform:uppercase'>Hello Kitty</div>") +PASS <br> returned as newline, following space collapsed ("<div style='width:1px; word-break:break-word'>Hello<br> Kitty</div>") +PASS <br> returned as newline, preceding space collapsed ("<div style='width:1px; word-break:break-word'>Hello <br>Kitty</div>") +PASS <br> returned as newline, adjacent spaces collapsed across element boundaries ("<div style='width:1px; word-break:break-word'><x>Hello </x> <br> <x> Kitty</x></div>") FAIL ::first-line styles applied ("<div class='first-line-uppercase' style='width:0'>abc def") assert_equals: expected "ABC def" but got "abc def" PASS ::first-letter styles applied ("<div class='first-letter-uppercase' style='width:0'>abc def") PASS ::first-letter float ignored ("<div class='first-letter-float' style='width:0'>abc def")
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-tests.js b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-tests.js index 6e663ba..34f3b0f 100644 --- a/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-tests.js +++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-tests.js
@@ -71,8 +71,27 @@ /**** Soft line breaks ****/ testText("<div style='width:0'>abc def", "abc def", "Soft line breaks ignored"); +testText("<div style='width:0'>abc-def", "abc-def", "Soft line break at hyphen ignored"); testText("<div style='width:0'><span>abc</span> <span>def</span>", "abc def", "Whitespace text node preserved"); +/**** Soft line breaks when word-break:break-word is in effect ****/ +/* (based on Testcase #2 at https://bugzilla.mozilla.org/show_bug.cgi?id=1241631) */ + +testText("<div style='width:1px; word-break:break-word'>Hello Kitty</div>", "Hello Kitty", "Soft breaks ignored in presence of word-break:break-word"); +testText("<div style='width:1px; word-break:break-word'><x>Hello</x> <x>Kitty</x></div>", "Hello Kitty", "Element boundaries ignored for soft break handling (1)"); +testText("<div style='width:1px; word-break:break-word'><x>Hello</x> <x> Kitty</x></div>", "Hello Kitty", "Whitespace collapses across element boundaries at soft break (1)"); +testText("<div style='width:1px; word-break:break-word'><x>Hello</x><x> Kitty</x></div>", "Hello Kitty", "Element boundaries ignored for soft break handling (2)"); +testText("<div style='width:1px; word-break:break-word'><x>Hello </x> <x>Kitty</x></div>", "Hello Kitty", "Whitespace collapses across element boundaries at soft break (2)"); +testText("<div style='width:1px; word-break:break-word'><x>Hello </x><x>Kitty</x></div>", "Hello Kitty", "Element boundaries ignored for soft break handling (3)"); +testText("<div style='width:1px; word-break:break-word'><x>Hello </x><x> Kitty</x></div>", "Hello Kitty", "Whitespace collapses across element boundaries at soft break (3)"); +testText("<div style='width:1px; word-break:break-word'><x>Hello </x> <x> Kitty</x></div>", "Hello Kitty", "Whitespace collapses across element boundaries at soft break (4)"); +testText("<div style='width:1px; word-break:break-word'><x>Hello</x> Kitty</div>", "Hello Kitty", "Element boundaries ignored for soft break handling (4)"); +testText("<div style='width:1px; word-break:break-word'><x>Hello </x>Kitty</div>", "Hello Kitty", "Element boundaries ignored for soft break handling (5)"); +testText("<div style='width:1px; word-break:break-word; text-transform:uppercase'>Hello Kitty</div>", "HELLO KITTY", "Soft breaks ignored, text-transform applied"); +testText("<div style='width:1px; word-break:break-word'>Hello<br> Kitty</div>", "Hello\nKitty", "<br> returned as newline, following space collapsed"); +testText("<div style='width:1px; word-break:break-word'>Hello <br>Kitty</div>", "Hello\nKitty", "<br> returned as newline, preceding space collapsed"); +testText("<div style='width:1px; word-break:break-word'><x>Hello </x> <br> <x> Kitty</x></div>", "Hello\nKitty", "<br> returned as newline, adjacent spaces collapsed across element boundaries"); + /**** first-line/first-letter ****/ testText("<div class='first-line-uppercase' style='width:0'>abc def", "ABC def", "::first-line styles applied");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/resources/child-iframe.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/resources/child-iframe.html new file mode 100644 index 0000000..2645a180e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/resources/child-iframe.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<script src="/common/get-host-info.sub.js"></script> +<iframe id="iframe" width="200" height="100"></iframe> + +<script> + iframe.src = + get_host_info().ORIGIN + "/html/semantics/forms/autofocus/resources/grand-child-autofocus.html"; + window.addEventListener("message", event => { + if (event.data == "grand_child_loaded") { + parent.postMessage("ready", "*"); + } else if (event.data == "report_focus_state") { + frames[0].postMessage("report_focus_state", "*"); + } else if (event.data == "grand_child_is_focused" || + event.data == "grand_child_is_not_focused") { + parent.postMessage(event.data, "*"); + } + }); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/resources/grand-child-autofocus.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/resources/grand-child-autofocus.html new file mode 100644 index 0000000..88be6e0b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/resources/grand-child-autofocus.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<input id="target" value="This should be focused!" autofocus></input> + +<script> + let got_focus = false; + target.addEventListener("focus", () => got_focus = true); + + window.addEventListener("load", () => { + parent.postMessage("grand_child_loaded", "*"); + }); + + window.addEventListener("message", event => { + if (event.data == "report_focus_state") { + let msg = got_focus ? "grand_child_is_focused" : "grand_child_is_not_focused"; + parent.postMessage(msg, "*"); + } + }); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/same-origin-autofocus.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/same-origin-autofocus.html new file mode 100644 index 0000000..9cfcdb9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/autofocus/same-origin-autofocus.html
@@ -0,0 +1,46 @@ +<!doctype html> +<html> +<head> +<meta charset=utf-8> +<meta name="assert" content="`autofocus` should work in the same origin iframe even if there is a cross-origin iframe between the parent and the same origin iframe"> +<title>autofocus in the same origin grand child iframe</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/common/get-host-info.sub.js"></script> +</head> +<body> + <h1>Autofocus should work in the same origin grand child iframe.</h1> + <iframe id="child" width="200" height="100"></iframe> + <script> + let parent_loaded = false; + let grand_child_loaded = false; + + async_test(function(t) { + function pingChildIfBothFramesLoaded() { + if (parent_loaded && grand_child_loaded) + frames[0].postMessage("report_focus_state", "*"); + } + + window.addEventListener("load", t.step_func(event => { + parent_loaded = true; + pingChildIfBothFramesLoaded(); + })); + + window.addEventListener("message", t.step_func(event => { + if (event.data == "ready") { + grand_child_loaded = true; + pingChildIfBothFramesLoaded(); + } else if (event.data == "grand_child_is_focused") { + t.done(); + } else if (event.data == "grand_child_is_not_focused") { + assert_unreached("The iframe shouldn't get focus"); + } + })); + document.getElementById("child").src = + get_host_info().HTTP_NOTSAMESITE_ORIGIN + "/html/semantics/forms/autofocus/resources/child-iframe.html"; + }, "Autofocus should work in the same origin grand child iframe"); + </script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html index 2a879f3..fb512b4 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html
@@ -13,5 +13,5 @@ assert_array_equals(log, [window, undefined]); })); </script> -<script type="module" src="this.js"></script> <script src="this.js"></script> +<script type="module" src="this.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/IndexedDB.idl b/third_party/blink/web_tests/external/wpt/interfaces/IndexedDB.idl index a8ef47e..9373f4e 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/IndexedDB.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/IndexedDB.idl
@@ -28,9 +28,9 @@ attribute EventHandler onupgradeneeded; }; -[Exposed=(Window,Worker), - Constructor(DOMString type, optional IDBVersionChangeEventInit eventInitDict = {})] +[Exposed=(Window,Worker)] interface IDBVersionChangeEvent : Event { + constructor(DOMString type, optional IDBVersionChangeEventInit eventInitDict = {}); readonly attribute unsigned long long oldVersion; readonly attribute unsigned long long? newVersion; };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/cookie-store.idl b/third_party/blink/web_tests/external/wpt/interfaces/cookie-store.idl index f5c44b6..533884f 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/cookie-store.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/cookie-store.idl
@@ -7,13 +7,13 @@ SecureContext] interface CookieStore : EventTarget { Promise<CookieListItem?> get(USVString name); - Promise<CookieListItem?> get(optional CookieStoreGetOptions options); + Promise<CookieListItem?> get(optional CookieStoreGetOptions options = {}); Promise<CookieList> getAll(USVString name); - Promise<CookieList> getAll(optional CookieStoreGetOptions options); + Promise<CookieList> getAll(optional CookieStoreGetOptions options = {}); Promise<void> set(USVString name, USVString value, - optional CookieStoreSetOptions options); + optional CookieStoreSetOptions options = {}); Promise<void> set(CookieStoreSetExtraOptions options); Promise<void> delete(USVString name);
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/geometry.idl b/third_party/blink/web_tests/external/wpt/interfaces/geometry.idl index 1b83959..ada6c0c3 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/geometry.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/geometry.idl
@@ -3,30 +3,32 @@ // (https://github.com/tidoust/reffy-reports) // Source: Geometry Interfaces Module Level 1 (https://drafts.fxtf.org/geometry/) -[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, - optional unrestricted double z = 0, optional unrestricted double w = 1), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), Serializable] interface DOMPointReadOnly { - [NewObject] static DOMPointReadOnly fromPoint(optional DOMPointInit other); + constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, + optional unrestricted double z = 0, optional unrestricted double w = 1); + + [NewObject] static DOMPointReadOnly fromPoint(optional DOMPointInit other = {}); readonly attribute unrestricted double x; readonly attribute unrestricted double y; readonly attribute unrestricted double z; readonly attribute unrestricted double w; - [NewObject] DOMPoint matrixTransform(optional DOMMatrixInit matrix); + [NewObject] DOMPoint matrixTransform(optional DOMMatrixInit matrix = {}); [Default] object toJSON(); }; -[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, - optional unrestricted double z = 0, optional unrestricted double w = 1), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), Serializable, LegacyWindowAlias=SVGPoint] interface DOMPoint : DOMPointReadOnly { - [NewObject] static DOMPoint fromPoint(optional DOMPointInit other); + constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, + optional unrestricted double z = 0, optional unrestricted double w = 1); + + [NewObject] static DOMPoint fromPoint(optional DOMPointInit other = {}); inherit attribute unrestricted double x; inherit attribute unrestricted double y; @@ -41,12 +43,13 @@ unrestricted double w = 1; }; -[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, - optional unrestricted double width = 0, optional unrestricted double height = 0), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), Serializable] interface DOMRectReadOnly { - [NewObject] static DOMRectReadOnly fromRect(optional DOMRectInit other); + constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, + optional unrestricted double width = 0, optional unrestricted double height = 0); + + [NewObject] static DOMRectReadOnly fromRect(optional DOMRectInit other = {}); readonly attribute unrestricted double x; readonly attribute unrestricted double y; @@ -60,13 +63,14 @@ [Default] object toJSON(); }; -[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, - optional unrestricted double width = 0, optional unrestricted double height = 0), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), Serializable, LegacyWindowAlias=SVGRect] interface DOMRect : DOMRectReadOnly { - [NewObject] static DOMRect fromRect(optional DOMRectInit other); + constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, + optional unrestricted double width = 0, optional unrestricted double height = 0); + + [NewObject] static DOMRect fromRect(optional DOMRectInit other = {}); inherit attribute unrestricted double x; inherit attribute unrestricted double y; @@ -87,13 +91,14 @@ getter DOMRect? item(unsigned long index); }; -[Constructor(optional DOMPointInit p1, optional DOMPointInit p2, - optional DOMPointInit p3, optional DOMPointInit p4), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), Serializable] interface DOMQuad { - [NewObject] static DOMQuad fromRect(optional DOMRectInit other); - [NewObject] static DOMQuad fromQuad(optional DOMQuadInit other); + constructor(optional DOMPointInit p1 = {}, optional DOMPointInit p2 = {}, + optional DOMPointInit p3 = {}, optional DOMPointInit p4 = {}); + + [NewObject] static DOMQuad fromRect(optional DOMRectInit other = {}); + [NewObject] static DOMQuad fromQuad(optional DOMQuadInit other = {}); [SameObject] readonly attribute DOMPoint p1; [SameObject] readonly attribute DOMPoint p2; @@ -111,11 +116,12 @@ DOMPointInit p4; }; -[Constructor(optional (DOMString or sequence<unrestricted double>) init), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), Serializable] interface DOMMatrixReadOnly { - [NewObject] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other); + constructor(optional (DOMString or sequence<unrestricted double>) init); + + [NewObject] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other = {}); [NewObject] static DOMMatrixReadOnly fromFloat32Array(Float32Array array32); [NewObject] static DOMMatrixReadOnly fromFloat64Array(Float64Array array64); @@ -174,12 +180,12 @@ optional unrestricted double angle = 0); [NewObject] DOMMatrix skewX(optional unrestricted double sx = 0); [NewObject] DOMMatrix skewY(optional unrestricted double sy = 0); - [NewObject] DOMMatrix multiply(optional DOMMatrixInit other); + [NewObject] DOMMatrix multiply(optional DOMMatrixInit other = {}); [NewObject] DOMMatrix flipX(); [NewObject] DOMMatrix flipY(); [NewObject] DOMMatrix inverse(); - [NewObject] DOMPoint transformPoint(optional DOMPointInit point); + [NewObject] DOMPoint transformPoint(optional DOMPointInit point = {}); [NewObject] Float32Array toFloat32Array(); [NewObject] Float64Array toFloat64Array(); @@ -187,12 +193,13 @@ [Default] object toJSON(); }; -[Constructor(optional (DOMString or sequence<unrestricted double>) init), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), Serializable, LegacyWindowAlias=(SVGMatrix,WebKitCSSMatrix)] interface DOMMatrix : DOMMatrixReadOnly { - [NewObject] static DOMMatrix fromMatrix(optional DOMMatrixInit other); + constructor(optional (DOMString or sequence<unrestricted double>) init); + + [NewObject] static DOMMatrix fromMatrix(optional DOMMatrixInit other = {}); [NewObject] static DOMMatrix fromFloat32Array(Float32Array array32); [NewObject] static DOMMatrix fromFloat64Array(Float64Array array64); @@ -222,8 +229,8 @@ inherit attribute unrestricted double m44; // Mutable transform methods - DOMMatrix multiplySelf(optional DOMMatrixInit other); - DOMMatrix preMultiplySelf(optional DOMMatrixInit other); + DOMMatrix multiplySelf(optional DOMMatrixInit other = {}); + DOMMatrix preMultiplySelf(optional DOMMatrixInit other = {}); DOMMatrix translateSelf(optional unrestricted double tx = 0, optional unrestricted double ty = 0, optional unrestricted double tz = 0);
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/performance-timeline.idl b/third_party/blink/web_tests/external/wpt/interfaces/performance-timeline.idl index d9362ea..3ce538c8 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/performance-timeline.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/performance-timeline.idl
@@ -21,8 +21,9 @@ callback PerformanceObserverCallback = void (PerformanceObserverEntryList entries, PerformanceObserver observer); -[Constructor(PerformanceObserverCallback callback), Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface PerformanceObserver { + constructor(PerformanceObserverCallback callback); void observe (optional PerformanceObserverInit options = {}); void disconnect (); PerformanceEntryList takeRecords();
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/pointerevents.idl b/third_party/blink/web_tests/external/wpt/interfaces/pointerevents.idl index 40364530d..85a25aa4 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/pointerevents.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/pointerevents.idl
@@ -16,8 +16,9 @@ boolean isPrimary = false; }; -[Constructor(DOMString type, optional PointerEventInit eventInitDict = {}), Exposed=Window] +[Exposed=Window] interface PointerEvent : MouseEvent { + constructor(DOMString type, optional PointerEventInit eventInitDict = {}); readonly attribute long pointerId; readonly attribute double width; readonly attribute double height;
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/reporting.idl b/third_party/blink/web_tests/external/wpt/interfaces/reporting.idl index ef20b98..ae24f75 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/reporting.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/reporting.idl
@@ -3,17 +3,20 @@ // (https://github.com/tidoust/reffy-reports) // Source: Reporting API 1 (https://w3c.github.io/reporting/) +[Exposed=Window] interface ReportBody { }; +[Exposed=Window] interface Report { readonly attribute DOMString type; readonly attribute DOMString url; readonly attribute ReportBody? body; }; -[Constructor(ReportingObserverCallback callback, optional ReportingObserverOptions options)] +[Exposed=Window] interface ReportingObserver { + constructor(ReportingObserverCallback callback, optional ReportingObserverOptions options = {}); void observe(); void disconnect(); ReportList takeRecords(); @@ -28,6 +31,7 @@ typedef sequence<Report> ReportList; +[Exposed=Window] interface DeprecationReportBody : ReportBody { readonly attribute DOMString id; readonly attribute Date? anticipatedRemoval; @@ -37,6 +41,7 @@ readonly attribute unsigned long? columnNumber; }; +[Exposed=Window] interface InterventionReportBody : ReportBody { readonly attribute DOMString id; readonly attribute DOMString message; @@ -45,6 +50,7 @@ readonly attribute unsigned long? columnNumber; }; +[Exposed=Window] interface CrashReportBody : ReportBody { readonly attribute DOMString? reason; };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/web-animations.idl b/third_party/blink/web_tests/external/wpt/interfaces/web-animations.idl index 72ac87f3e..8999389 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/web-animations.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/web-animations.idl
@@ -23,7 +23,7 @@ interface Animation : EventTarget { attribute DOMString id; attribute AnimationEffect? effect; - attribute AnimationTimeline? timeline; + readonly attribute AnimationTimeline? timeline; attribute double? startTime; attribute double? currentTime; attribute double playbackRate; @@ -97,7 +97,6 @@ Constructor(KeyframeEffect source)] interface KeyframeEffect : AnimationEffect { attribute (Element or CSSPseudoElement)? target; - attribute IterationCompositeOperation iterationComposite; attribute CompositeOperation composite; sequence<object> getKeyframes(); void setKeyframes(object? keyframes); @@ -123,12 +122,9 @@ }; dictionary KeyframeEffectOptions : EffectTiming { - IterationCompositeOperation iterationComposite = "replace"; CompositeOperation composite = "replace"; }; -enum IterationCompositeOperation { "replace", "accumulate" }; - enum CompositeOperation { "replace", "add", "accumulate" }; enum CompositeOperationOrAuto { "replace", "add", "accumulate", "auto" };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webmidi.idl b/third_party/blink/web_tests/external/wpt/interfaces/webmidi.idl index 0dfcb77..aa3b1ac2 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/webmidi.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/webmidi.idl
@@ -4,7 +4,8 @@ // Source: Web MIDI API (http://webaudio.github.io/web-midi-api/) partial interface Navigator { - [SecureContext] Promise <MIDIAccess> requestMIDIAccess(optional MIDIOptions options = {}); + [SecureContext] + Promise <MIDIAccess> requestMIDIAccess(optional MIDIOptions options = {}); }; dictionary MIDIOptions { @@ -65,8 +66,9 @@ "pending", }; -[SecureContext, Exposed=Window, Constructor(DOMString type, optional MIDIMessageEventInit eventInitDict = {})] +[SecureContext, Exposed=Window] interface MIDIMessageEvent : Event { + constructor(DOMString type, optional MIDIMessageEventInit eventInitDict = {}); readonly attribute Uint8Array data; }; @@ -74,8 +76,9 @@ Uint8Array data; }; -[SecureContext, Exposed=Window, Constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict = {})] +[SecureContext, Exposed=Window] interface MIDIConnectionEvent : Event { + constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict = {}); readonly attribute MIDIPort port; };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webrtc-stats.idl b/third_party/blink/web_tests/external/wpt/interfaces/webrtc-stats.idl index 621f146..ab437ce0 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/webrtc-stats.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/webrtc-stats.idl
@@ -22,7 +22,7 @@ "local-candidate", "remote-candidate", "certificate", -"stunserverconnection" +"ice-server" }; dictionary RTCRtpStreamStats : RTCStats { @@ -61,6 +61,9 @@ double burstDiscardRate; double gapLossRate; double gapDiscardRate; + unsigned long framesDropped; + unsigned long partialFramesLost; + unsigned long fullFramesLost; }; dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats { @@ -100,9 +103,6 @@ double totalAudioEnergy; double totalSamplesDuration; unsigned long framesReceived; - unsigned long framesDropped; - unsigned long partialFramesLost; - unsigned long fullFramesLost; DOMString decoderImplementation; }; @@ -114,10 +114,7 @@ dictionary RTCSentRtpStreamStats : RTCRtpStreamStats { unsigned long packetsSent; - unsigned long packetsDiscardedOnSend; - unsigned long fecPacketsSent; unsigned long long bytesSent; - unsigned long long bytesDiscardedOnSend; }; dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats { @@ -126,6 +123,9 @@ DOMString senderId; DOMString remoteId; DOMHighResTimeStamp lastPacketSentTimestamp; + unsigned long packetsDiscardedOnSend; + unsigned long long bytesDiscardedOnSend; + unsigned long fecPacketsSent; unsigned long long retransmittedPacketsSent; unsigned long long retransmittedBytesSent; double targetBitrate; @@ -137,6 +137,7 @@ unsigned long hugeFramesSent; unsigned long framesEncoded; unsigned long keyFramesEncoded; + unsigned long framesDiscardedOnSend; unsigned long long qpSum; unsigned long long totalSamplesSent; boolean voiceActivityFlag; @@ -319,6 +320,8 @@ unsigned long long retransmissionsSent; unsigned long long consentRequestsSent; DOMHighResTimeStamp consentExpiredTimestamp; + unsigned long packetsDiscardedOnSend; + unsigned long long bytesDiscardedOnSend; }; enum RTCStatsIceCandidatePairState { @@ -336,7 +339,7 @@ DOMString issuerCertificateId; }; -dictionary RTCStunServerConnectionStats : RTCStats { +dictionary RTCIceServerStats : RTCStats { DOMString url; long port; DOMString protocol; @@ -351,6 +354,7 @@ }; partial dictionary RTCIceCandidateStats { + boolean deleted = false; boolean isRemote; };
diff --git a/third_party/blink/web_tests/external/wpt/lint.whitelist b/third_party/blink/web_tests/external/wpt/lint.whitelist index 8b02cdc..74dfb99 100644 --- a/third_party/blink/web_tests/external/wpt/lint.whitelist +++ b/third_party/blink/web_tests/external/wpt/lint.whitelist
@@ -827,6 +827,7 @@ MISSING DEPENDENCY: shape-detection/resources/shapedetection-helpers.js MISSING DEPENDENCY: webxr/resources/webxr_util.js MISSING DEPENDENCY: contacts/resources/helpers.js +MISSING DEPENDENCY: generic-sensor/resources/generic-sensor-helpers.js # Tests that are false positives for using Ahem as a system font AHEM SYSTEM FONT: acid/acid3/test.html
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-006.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-006.html index 904e7d3..e4f3f711 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-006.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-006.html
@@ -75,5 +75,8 @@ </math> </p> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_dir");</script> + </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-007.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-007.html index 7137e264..97dec11b 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-007.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-007.html
@@ -46,5 +46,8 @@ </math> </p> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_dir");</script> + </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-008.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-008.html index 5c98b07..d94a036 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-008.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-008.html
@@ -29,5 +29,8 @@ </math> </p> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_dir");</script> + </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-009.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-009.html index bf8caf1..c0ca31d 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-009.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-009.html
@@ -23,5 +23,8 @@ </math> </p> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_dir");</script> + </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-010.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-010.html index 6dc095a..4087630e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-010.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/direction/direction-010.html
@@ -47,5 +47,8 @@ </math> </p> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_dir");</script> + </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-bar-002-ref.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-bar-002-ref.html new file mode 100644 index 0000000..9d5eef89 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-bar-002-ref.html
@@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>fractions bar</title> + <style type="text/css"> + #green { + position: absolute; + background: green; + width: 150px; + height: 150px; + left: 50px; + top: 50px; + } + </style> + </head> + <body> + <p>This test passes if you see a green <strong>square</strong> and no red.</p> + <div> + <div id="green"></div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-bar-002.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-bar-002.html new file mode 100644 index 0000000..ccf1bd90 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-bar-002.html
@@ -0,0 +1,82 @@ +<!DOCTYPE html> +<html class="reftest-wait"> + <head> + <meta charset="utf-8"> + <title>fractions bar</title> + <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fractions-mfrac"> + <meta name="assert" content="Verify painting of the fraction bar when margin/padding/border are involved."> + <link rel="match" href="frac-bar-002-ref.html"> + <style type="text/css"> + @font-face { + font-family: TestFont; + src: url("/fonts/math/fraction-rulethickness10000.woff"); + } + math { + /* FractionRuleThickness = 10000 * 1 / 1000 = 10px; */ + /* The gap / shift / axisheight parameters are set to 0. */ + font-family: "TestFont"; + font-size: 1px; + } + #container { + position: absolute; + left: 0; + top: 0; + } + #red { + position: absolute; + background: red; + margin: 1px; + width: 148px; + height: 148px; + } + </style> + <script src="/common/reftest-wait.js"></script> + <script> + window.addEventListener("load", () => { document.fonts.ready.then(adjustPositionOfFraction); }); + + function adjustPositionOfFraction() + { + requestAnimationFrame(() => { + var container = document.getElementById("container"); + var red = document.getElementById("red"); + var numeratorBox = document.getElementById("numerator").getBoundingClientRect(); + const shift = 50; + const numeratorMargin = 20; + + /* Move the red square at the expected position, + with a 1px gap to avoid antialiasing issues. */ + red.style.left = `${shift}px`; + red.style.top = `${shift}px`; + + /* Move the fraction bar at the expected position. */ + container.style.left = (shift - numeratorBox.left + numeratorMargin) + "px"; + container.style.top = (shift - numeratorBox.bottom - numeratorMargin) + "px"; + requestAnimationFrame(takeScreenshot); + }); + } + </script> + </head> + <body> + <p>This test passes if you see a green <strong>square</strong> and no red.</p> + <div> + <div id="red"></div> + <div id="container"> + <math> + <!-- border, padding and margin should not affect the width of the fraction bar. --> + <mfrac style="color: green; font-size: 15em; + border: 30px solid transparent; + padding: 60px; margin: 120px; + "> + <!-- the bar width is the one of the numerator margin box i.e. 80 + 2 * (5 + 10 + 20) = 150px --> + <mspace id="numerator" width="80px" + style="border: 5px solid transparent; + padding: 10px; margin: 20px;"></mspace> + <mspace></mspace> + </mfrac> + </math> + </div> + </div> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mfrac");</script> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-default-padding-ref.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-default-padding-ref.html new file mode 100644 index 0000000..93d3e01 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-default-padding-ref.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>fraction default padding</title> + </head> + <body> + <p>This test passes if you see three green squares of same size, separated by a gap of one pixel.</p> + <div> + <math> + <mspace width="150px" height="75px" depth="75px" style="background: green"/> + <mspace width="1px"/> + <mspace width="150px" height="75px" depth="75px" style="background: green"/> + <mspace width="1px"/> + <mspace width="150px" height="75px" depth="75px" style="background: green"/> + </math> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-default-padding.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-default-padding.html new file mode 100644 index 0000000..b68bb87 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-default-padding.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>fraction default padding</title> + <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fractions-mfrac"> + <meta name="assert" content="Verifies 1px padding is added around each side of the fraction."> + <link rel="match" href="frac-default-padding-ref.html"> + <style type="text/css"> + @font-face { + font-family: TestFont; + src: url("/fonts/math/fraction-rulethickness10000.woff"); + } + math { + /* FractionRuleThickness = 10000 * 1 / 1000 = 10px; */ + /* The gap / shift / axisheight parameters are set to 0. */ + font-family: "TestFont"; + font-size: 1px; + } + </style> + </head> + <body> + <p>This test passes if you see three green squares of same size, separated by a gap of one pixel.</p> + <div> + <math> + <mspace width="150px" height="75px" depth="75px" style="background: green"/> + <mfrac style="color: green; font-size: 15em"> + <mspace id="numerator" width="150px"></mspace> + <mspace></mspace> + </mfrac> + <mspace width="150px" height="75px" depth="75px" style="background: green"/> + </math> + </div> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mfrac");</script> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html index 1934bf4..71f1583 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html
@@ -10,5 +10,6 @@ <mspace width="64px" height="48px" style="background: lightblue"></mspace> <mspace width="128px" height="96px" style="background: lightgreen"></mspace> </mfrac> + </math> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html index 8c92d665..ac9576f 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html
@@ -33,5 +33,8 @@ <mspace height="16px" width="12px" class="oof2"/> <mspace height="8px" width="4px" class="nobox"/> </mfrac> + </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mfrac");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html new file mode 100644 index 0000000..f0b5bdd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"/> + <title>Legacy menclose radical notation (reference)</title> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + <style> + math, math * { + font: 25px Ahem; + } + </style> + </head> + <body> + <math> + <menclose> + <mn>123</mn> + </menclose> + </math> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html new file mode 100644 index 0000000..d7f0627 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"/> + <title>Legacy menclose radical notation</title> + <link rel="help" href="https://www.w3.org/TR/MathML3/chapter3.html#presm.menclose"> + <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#enclose-expression-inside-notation-menclose"> + <meta name="assert" content="Verify that the legacy menclose radical notation is not supported."> + <link rel="match" href="legacy-menclose-radical-notation-ref.html"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + <style> + math, math * { + font: 25px Ahem; + } + </style> + </head> + <body> + <math> + <menclose notation="radical"> + <mn>123</mn> + </menclose> + </math> + + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_menclose");</script> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html new file mode 100644 index 0000000..ad9f2d2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html
@@ -0,0 +1,188 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Legacy maction and semantics elements</title> +<link rel="help" href="https://www.w3.org/TR/MathML3/chapter3.html#presm.maction"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#enlivening-expressions"> +<link rel="help" href="https://www.w3.org/TR/MathML3/chapter3.html#presm.semantics"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#semantics-and-presentation"> +<meta name="assert" content="Legacy maction and semantics elements are handled as mrow with special style"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> +<script src="/mathml/support/layout-comparison.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); + window.addEventListener("load", runTests); + function runTests() + { + Array.from(document.getElementsByClassName("TestContainer")).forEach(container => { + const id = container.id; + const math = container.getElementsByTagName("math"); + test(function() { + assert_true(MathMLFeatureDetection.has_mspace(), "<mspace> is supported"); + const epsilon = 1; + compareLayout(math[0], math[1], epsilon); + }, `Element is laid out as an mrow with only first child displayed (id=${id})`); + + test(function() { + assert_true(MathMLFeatureDetection.has_mspace(), "<mspace> is supported"); + let firstChild = math[0].firstElementChild.firstElementChild; + for (var child = firstChild; child; child = child.nextElementSibling) { + var style = window.getComputedStyle(child).getPropertyValue("display"); + if (child == firstChild) { + assert_equals(style, "math", "First child has display: math"); + } else { + assert_equals(style, "none", "Other children have display: none"); + } + } + }, `Computed display of children (id=${id})`); + }); + done(); + } +</script> +<style> + mspace:nth-child(2n) { + background: lightblue; + } + mspace:nth-child(2n+1) { + background: lightgreen; + } + mrow.onlyShowFirstChild > :not(:first-child) { + display: none; + } +</style> +</head> +<body> + <div id="log"></div> + <p class="TestContainer" id="semantics"> + <math> + <semantics> + <mspace width="10px" height="10px"></mspace> + <mspace width="10px" depth="10px"></mspace> + <mspace width="10px" height="15px" depth="5px"></mspace> + <mspace width="10px" height="5px" depth="15px"></mspace> + </semantics> + </math> + <math> + <mrow class="onlyShowFirstChild"> + <mspace width="10px" height="10px"></mspace> + <mspace width="10px" depth="10px"></mspace> + <mspace width="10px" height="15px" depth="5px"></mspace> + <mspace width="10px" height="5px" depth="15px"></mspace> + </mrow> + </math> + </p> + <p class="TestContainer" id="semantics-annotations"> + <math> + <semantics> + <mspace width="10px" height="10px"></mspace> + <annotation>ANNOTATION</annotation> + <annotation-xml>ANNOTATION-XML</annotation-xml> + </semantics> + </math> + <math> + <mrow class="onlyShowFirstChild"> + <mspace width="10px" height="10px"></mspace> + <annotation>ANNOTATION</annotation> + <annotation-xml>ANNOTATION-XML</annotation-xml> + </mrow> + </math> + </p> + <p class="TestContainer" id="maction"> + <math> + <maction> + <mspace width="10px" height="10px"></mspace> + <mspace width="10px" depth="10px"></mspace> + <mspace width="10px" height="15px" depth="5px"></mspace> + <mspace width="10px" height="5px" depth="15px"></mspace> + </maction> + </math> + <math> + <mrow class="onlyShowFirstChild"> + <mspace width="10px" height="10px"></mspace> + <mspace width="10px" depth="10px"></mspace> + <mspace width="10px" height="15px" depth="5px"></mspace> + <mspace width="10px" height="5px" depth="15px"></mspace> + </mrow> + </math> + </p> + <p class="TestContainer" id="maction-toggle"> + <math> + <maction actiontype="toggle"> + <mspace width="10px" height="10px"></mspace> + <mspace width="10px" depth="10px"></mspace> + <mspace width="10px" height="15px" depth="5px"></mspace> + <mspace width="10px" height="5px" depth="15px"></mspace> + </maction> + </math> + <math> + <mrow class="onlyShowFirstChild"> + <mspace width="10px" height="10px"></mspace> + <mspace width="10px" depth="10px"></mspace> + <mspace width="10px" height="15px" depth="5px"></mspace> + <mspace width="10px" height="5px" depth="15px"></mspace> + </mrow> + </math> + </p> + <p class="TestContainer" id="maction-toggle-selection"> + <math> + <maction actiontype="toggle" selection="3"> + <mspace width="10px" height="10px"></mspace> + <mspace width="10px" depth="10px"></mspace> + <mspace width="10px" height="15px" depth="5px"></mspace> + <mspace width="10px" height="5px" depth="15px"></mspace> + </maction> + </math> + <math> + <mrow class="onlyShowFirstChild"> + <mspace width="10px" height="10px"></mspace> + <mspace width="10px" depth="10px"></mspace> + <mspace width="10px" height="15px" depth="5px"></mspace> + <mspace width="10px" height="5px" depth="15px"></mspace> + </mrow> + </math> + </p> + <p class="TestContainer" id="maction-statusline"> + <math> + <maction actiontype="statusline"> + <mspace width="10px" height="10px"></mspace> + <mtext>MESSAGE</mtext> + </maction> + </math> + <math> + <mrow class="onlyShowFirstChild"> + <mspace width="10px" height="10px"></mspace> + <mtext>MESSAGE</mtext> + </mrow> + </math> + </p> + <p class="TestContainer" id="maction-tooltip"> + <math> + <maction actiontype="tooltip"> + <mspace width="10px" height="10px"></mspace> + <mtext>MESSAGE</mtext> + </maction> + </math> + <math> + <mrow class="onlyShowFirstChild"> + <mspace width="10px" height="10px"></mspace> + <mtext>MESSAGE</mtext> + </mrow> + </math> + </p> + <p class="TestContainer" id="maction-input"> + <math> + <maction actiontype="input"> + <mspace width="10px" height="10px"></mspace> + </maction> + </math> + <math> + <mrow class="onlyShowFirstChild"> + <mspace width="10px" height="10px"></mspace> + </mrow> + </math> + </p> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html new file mode 100644 index 0000000..0c26780 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html
@@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Legacy maction and semantics elements (reference)</title> +</head> +<body> + <p>This test passes if you see 4 green squares and no red.</p> + <p> + <math> + <mrow> + <mtext> + <span style="display: inline-block; width: 50px; height: 50px; background: green;"></span> + </mtext> + </mrow> + </math> + </p> + <p> + <math> + <mrow> + <mrow style="display: inline-block"> + <span style="display: inline-block; width: 50px; height: 50px; background: green;"></span> + </mrow> + </mrow> + </math> + </p> + <p> + <math> + <mrow> + <mspace style="background: green" width="50px" height="50px"></mspace> + </mrow> + </math> + </p> + <p> + <math> + <maction actiontype="toggle" selection="2"> + <mspace style="display: none; background: red" width="50px" height="50px"></mspace> + <mspace style="display: math; background: green" width="50px" height="50px"></mspace> + <mspace style="background: red" width="50px" height="50px"></mspace> + </maction> + </math> + </p> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html new file mode 100644 index 0000000..7c350f9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Legacy maction and semantics elements</title> +<link rel="help" href="https://www.w3.org/TR/MathML3/chapter3.html#presm.maction"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#enlivening-expressions"> +<link rel="help" href="https://www.w3.org/TR/MathML3/chapter3.html#presm.semantics"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#semantics-and-presentation"> +<meta name="assert" content="Verify that one can override the default rendering legacy maction and semantics elements using the display property"> +<link rel="match" href="legacy-mrow-like-elements-002-ref.html"> +</head> +<body> + <p>This test passes if you see 4 green squares and no red.</p> + <p> + <math> + <semantics> + <mspace style="display: none; background: red;" width="50px" height="50px"></mspace> + <mspace style="background: red;" width="50px" height="50px"></mspace> + <annotation style="display: math"> + <span style="display: inline-block; width: 50px; height: 50px; background: green;"></span> + </annotation> + </semantics> + </math> + </p> + <p> + <math> + <semantics> + <mspace style="display: none; background: red;" width="50px" height="50px"></mspace> + <mspace style="background: red;" width="50px" height="50px"></mspace> + <annotation-xml style="display: inline-block" encoding="text/html"> + <span style="display: inline-block; width: 50px; height: 50px; background: green;"></span> + </annotation-xml> + </semantics> + </math> + </p> + <p> + <math> + <maction actiontype="toggle"> + <mspace style="display: none; background: red" width="50px" height="50px"></mspace> + <mspace style="display: math; background: green" width="50px" height="50px"></mspace> + </maction> + </math> + </p> + <p> + <math> + <maction actiontype="toggle" selection="2"> + <mspace style="display: none; background: red" width="50px" height="50px"></mspace> + <mspace style="display: math; background: green" width="50px" height="50px"></mspace> + <mspace style="background: red" width="50px" height="50px"></mspace> + </maction> + </math> + </p> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html new file mode 100644 index 0000000..0de9a90e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html
@@ -0,0 +1,163 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Legacy mstyle attributes</title> +<link rel="help" href="https://www.w3.org/TR/MathML3/chapter3.html#presm.mstyle"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#style-change-mstyle"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#space-mspace"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fractions-mfrac"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#operator-fence-separator-or-accent-mo"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#string-literal-ms"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#enclose-expression-inside-notation-menclose"> +<meta name="assert" content="Legacy mstyle attributes are ignored"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> +<script src="/mathml/support/layout-comparison.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); + window.addEventListener("load", runTests); + function runTests() + { + Array.from(document.getElementsByClassName("TestContainer")).forEach(container => { + const tag = container.id; + test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); + const epsilon = 1; + const math = container.getElementsByTagName("math"); + compareLayout(math[0], math[1], epsilon); + }, `Legacy mstyle attributes do not apply to ${tag}`); + }); + done(); + } +</script> +</head> +<body> + <div id="log"></div> + <!-- Note: mpadded attributes are not tested since MathML3 did not allow to + set them from mstyle. Also, it is not clear whether munderover's + accent/accentunder could be applied from mstyle, given that the former + clashes with mo@accent. Other legacy mstyle attributes not in MathML + Core or without visual effect are not tested. + --> + <p class="TestContainer" id="mspace"> + <math> + <mstyle width="50px" height="50px" depth="50px"> + <mspace style="background: lightblue"></mspace> + </mstyle> + </math> + <math> + <mstyle> + <mspace style="background: lightblue"></mspace> + </mstyle> + </math> + </p> + <p class="TestContainer" id="mfrac"> + <math> + <mstyle linethickness="50px"> + <mfrac> + <mn>1</mn> + <mn>2</mn> + </mfrac> + </mstyle> + </math> + <math> + <mstyle> + <mfrac> + <mn>1</mn> + <mn>2</mn> + </mfrac> + </mstyle> + </math> + </p> + <p class="TestContainer" id="mo"> + <math displaystyle="true"> + <mstyle lspace="50px" rspace="50px"> + <mn>1</mn> + <mo>A</mo> + <mn>2</mn> + </mstyle> + <mstyle movablelimits="false" largeop="false"> + <munder> + <mo>∑</mo> + <mn>3</mn> + </munder> + </mstyle> + <mstyle accent="false"> + <mover> + <mn>4</mn> + <mo>⇀</mo> + </mover> + </mstyle> + <mstyle stretchy="false" symmetric="false" maxsize="20px"> + <mrow> + <mo>|</mo> + <mspace height="100px"></mspace> + </mrow> + </mstyle> + <mstyle minsize="100px"> + <mrow> + <mo>|</mo> + <mn>4</mn> + </mrow> + </mstyle> + </math> + <math displaystyle="true"> + <mstyle> + <mn>1</mn> + <mo>A</mo> + <mn>2</mn> + </mstyle> + <mstyle> + <munder> + <mo>∑</mo> + <mn>3</mn> + </munder> + </mstyle> + <mstyle> + <mover> + <mn>4</mn> + <mo>⇀</mo> + </mover> + </mstyle> + <mstyle> + <mrow> + <mo>|</mo> + <mspace height="100px"></mspace> + </mrow> + </mstyle> + <mstyle> + <mrow> + <mo>|</mo> + <mn>4</mn> + </mrow> + </mstyle> + </math> + </p> + <p class="TestContainer" id="menclose"> + <math> + <mstyle notation="box"> + <mn>1</mn> + </mstyle> + </math> + <math> + <mstyle> + <mn>1</mn> + </mstyle> + </math> + </p> + <p class="TestContainer" id="ms"> + <math> + <mstyle lquote="AAAA" rquote="BBBB"> + <ms>1</ms> + </mstyle> + </math> + <math> + <mstyle> + <ms>1</ms> + </mstyle> + </math> + </p> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-dynamic.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-dynamic.html index fff3bd9..72d6c67f 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-dynamic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-dynamic.html
@@ -45,5 +45,7 @@ _<math><msqrt><mi id="x5">x</mi><mo>−</mo><mi>y</mi></msqrt></math>_ _<math><mstyle><mi id="x6">x</mi><mo>−</mo><mi>y</mi></mstyle></math>_ + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_operator_spacing");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-fallback.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-fallback.html index b517dd5..2c3f3a4 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-fallback.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-fallback.html
@@ -22,5 +22,7 @@ <mo>(</mo> <mspace height="3em" depth="3em"/> <mo>)</mo> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-minus-plus.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-minus-plus.html index 487bca25..06e7542 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-minus-plus.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form-minus-plus.html
@@ -83,5 +83,7 @@ _<math><msqrt><mi>x</mi><mo>∓</mo><mi>y</mi></msqrt></math>_ _<math><mstyle><mi>x</mi><mo>∓</mo><mi>y</mi></mstyle></math>_ + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_operator_spacing");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form.html index 4f651d1..b67b389 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-form.html
@@ -24,5 +24,7 @@ _<math><mo form="prefix">♭</mo></math>_ _<math><mo form="postfix">♭</mo></math>_ + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_operator_spacing");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-default.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-default.html index a05bef4..503a57f2 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-default.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-default.html
@@ -18,5 +18,7 @@ <mi>x</mi> </munder> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_munderover");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-dynamic.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-dynamic.html index 53cf76c..33fe97a3 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-dynamic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-dynamic.html
@@ -21,5 +21,7 @@ <mi>x</mi> </munder> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_munderover");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html index d50cac5..b4f032648 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html
@@ -47,5 +47,7 @@ <mn>2</mn> </munderover> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_munderover");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits.html index ebb5cde..82709e4 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-movablelimits.html
@@ -28,5 +28,7 @@ <mi>B</mi> </munder> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_munderover");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-paint-lspace-rspace.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-paint-lspace-rspace.html index 8fb095b..0c387f5 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-paint-lspace-rspace.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-paint-lspace-rspace.html
@@ -65,5 +65,7 @@ <mo lspace="200px" rspace="100px">→</mo> <mspace width="100px" height="10px" depth="10px" style="background: black"></mspace> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_operator_spacing");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-001.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-001.html new file mode 100644 index 0000000..ea3d5ae2b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-001.html
@@ -0,0 +1,283 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Operator dictionary</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#operator-fence-separator-or-accent-mo"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dictionary-based-attributes"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#operator-dictionary"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#stretchy-operator-axis"> +<meta name="assert" content="Verify default properties for characters that are in the operator dictionary, as well as for U+00A0 NO-BREAK SPACE"> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> +<script src="/mathml/support/operator-dictionary.js"></script> +<style> + @font-face { + font-family: operators; + src: url("/fonts/math/operators.woff"); + } + math, math * { + font-family: operators; + /* Use large enough font-size so that 1/18em = 2.77px > epsilon and + one can really distinguish lspace/rspace values. */ + font-size: 50px; + } +</style> +<script> + setup({ explicit_done: true }); + window.addEventListener("load", () => { document.fonts.ready.then(runTests); }); + + async function runTests() { + let epsilon = 1; + let json = await fetchOperatorDictionary(); + + // The operator dictionary has more than one thousand of entries so the + // tests are grouped in chunks so that these don't get much more + // importance than other MathML tests. For easy debugging, one can set the + // chunk size to 1. Also, note that the test div will remain visible for + // failed tests. + const entryPerChunk = 50 + + var counter = 0; + var tests = { + "lspace/rspace": null, + "movablelimits": null, + "largeop": null, + "stretchy": null, + "symmetric": null, + "accent": null + }; + + for (key in json.dictionary) { + + if (counter % entryPerChunk === 0) { + // Start of a new chunk. + // Complete current async tests and create new ones for the next chunk. + for (name in tests) { + if (tests[name]) tests[name].done(); + tests[name] = async_test(`Operator dictionary chunk ${1 + counter / entryPerChunk} - ${name}`); + } + } + + let parsedKey = splitKey(key); + let entry = json.dictionary[key]; + + tests["lspace/rspace"].step(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + document.body.insertAdjacentHTML("beforeend", `<div>\ +lspace/rspace for "${parsedKey.characters}" (${parsedKey.form}): \ +<math>\ + <mrow>\ + <mn> </mn>\ + <mo form="${parsedKey.form}">${parsedKey.characters}</mo>\ + <mn> </mn>\ + </mrow>\ +</math>\ + VS \ +<math>\ + <mrow>\ + <mn> </mn>\ + <mo form="${parsedKey.form}" lspace="${defaultPropertyValue(entry, 'lspace')}" rspace="${defaultPropertyValue(entry, 'rspace')}">${parsedKey.characters}</mo>\ + <mn> </mn>\ + </mrow>\ +</math>\ +</div>`); + var div = document.body.lastElementChild; + var mrows = div.getElementsByTagName("mrow"); + function spaceBetween(element, i, j) { + return element.children[j].getBoundingClientRect().left - + element.children[i].getBoundingClientRect().right; + } + var lspace = spaceBetween(mrows[0], 0, 1); + var rspace = spaceBetween(mrows[0], 1, 2); + var lspaceRef = spaceBetween(mrows[1], 0, 1); + var rspaceRef = spaceBetween(mrows[1], 1, 2); + assert_approx_equals(lspace, lspaceRef, epsilon, `lspace (${key})`); + assert_approx_equals(rspace, rspaceRef, epsilon, `rspace (${key})`); + div.style.display = "none"; + }); + + tests["movablelimits"].step(function() { + assert_true(MathMLFeatureDetection.has_movablelimits()); + var defaultValue = defaultPropertyValue(entry, "movablelimits"); + document.body.insertAdjacentHTML("beforeend", `<div>\ +movablelimits for "${parsedKey.characters}" (${parsedKey.form}): \ +<math>\ + <munder>\ + <mo stretchy="false" form="${parsedKey.form}">${parsedKey.characters}</mo>\ + <mn> </mn>\ + </munder>\ +</math>\ + VS \ +<math>\ + <munder>\ + <mo stretchy="false" form="${parsedKey.form}" movablelimits="${defaultValue}">${parsedKey.characters}</mo>\ + <mn> </mn>\ + </munder>\ +</math>\ +</div>`); + var div = document.body.lastElementChild; + var munders = div.getElementsByTagName("munder"); + munder = munders[0].getBoundingClientRect() + munderRef = munders[1].getBoundingClientRect() + assert_approx_equals(munder.height, munderRef.height, epsilon, `Movablelimits property for ${key} should be '${defaultValue}'`); + div.style.display = "none"; + }); + + tests["largeop"].step(function() { + // FIXME: Should really detect largeop support... + assert_true(MathMLFeatureDetection.has_mspace()); + var defaultValue = defaultPropertyValue(entry, "largeop"); + document.body.insertAdjacentHTML("beforeend", `<div>\ +largeop for "${parsedKey.characters}" (${parsedKey.form}): \ +<math displaystyle="true">\ + <mo form="${parsedKey.form}">${parsedKey.characters}</mo>\ +</math>\ + VS \ +<math displaystyle="true">\ + <mo form="${parsedKey.form}" largeop="${defaultValue}">${parsedKey.characters}</mo>\ +</math>\ +</div>`); + var div = document.body.lastElementChild; + var mos = div.getElementsByTagName("mo"); + mo = mos[0].getBoundingClientRect() + moRef = mos[1].getBoundingClientRect() + assert_approx_equals(mo.height, moRef.height, epsilon, `Largeop property for ${key} should be '${defaultValue}'`); + div.style.display = "none"; + }); + + if (entry.horizontal) { + tests["stretchy"].step(function() { + // FIXME: Should really detect stretchy support... + assert_true(MathMLFeatureDetection.has_munder()); + var defaultValue = defaultPropertyValue(entry, "stretchy"); + document.body.insertAdjacentHTML("beforeend", `<div>\ +stretchy for "${parsedKey.characters}" (${parsedKey.form}): \ +<math>\ + <munder>\ + <mn> </mn>\ + <mo form="${parsedKey.form}">${parsedKey.characters}</mo>\ + </munder>\ +</math>\ + VS \ +<math>\ + <munder>\ + <mn> </mn>\ + <mo form="${parsedKey.form}" stretchy="${defaultValue}">${parsedKey.characters}</mo>\ + </munder>\ +</math>\ +</div>`); + var div = document.body.lastElementChild; + var mos = div.getElementsByTagName("mo"); + mo = mos[0].getBoundingClientRect() + moRef = mos[1].getBoundingClientRect() + assert_approx_equals(mo.width, moRef.width, epsilon, `Stretchy property for ${key} should be '${defaultValue}'`); + div.style.display = "none"; + }); + } else { + tests["stretchy"].step(function() { + // FIXME: Should really detect stretchy support... + assert_true(MathMLFeatureDetection.has_mspace()); + var defaultValue = defaultPropertyValue(entry, "stretchy"); + document.body.insertAdjacentHTML("beforeend", `<div>\ +stretchy for "${parsedKey.characters}" (${parsedKey.form}): \ +<math>\ + <mrow>\ + <mo form="${parsedKey.form}" symmetric="false">${parsedKey.characters}</mo>\ + <mspace height="2em"></mspace>\ + </mrow>\ +</math>\ + VS \ +<math>\ + <mrow>\ + <mo form="${parsedKey.form}" symmetric="false" stretchy="${defaultValue}">${parsedKey.characters}</mo>\ + <mspace height="2em"></mspace>\ + </mrow>\ +</math>\ +</div>`); + var div = document.body.lastElementChild; + var mos = div.getElementsByTagName("mo"); + mo = mos[0].getBoundingClientRect() + moRef = mos[1].getBoundingClientRect() + assert_approx_equals(mo.height, moRef.height, epsilon, `Stretchy property for ${key} should be '${defaultValue}'`); + div.style.display = "none"; + }); + tests["symmetric"].step(function() { + // FIXME: Should really detect symmetric support... + assert_true(MathMLFeatureDetection.has_mspace()); + var defaultValue = defaultPropertyValue(entry, "symmetric"); + document.body.insertAdjacentHTML("beforeend", `<div>\ +symmetric for "${parsedKey.characters}" (${parsedKey.form}): \ +<math>\ + <mrow>\ + <mo form="${parsedKey.form}" stretchy="true">${parsedKey.characters}</mo>\ + <mspace height="1.5em"></mspace>\ + </mrow>\ +</math>\ + VS \ +<math>\ + <mrow>\ + <mo form="${parsedKey.form}" stretchy="true" symmetric="${defaultValue}">${parsedKey.characters}</mo>\ + <mspace height="1.5em"></mspace>\ + </mrow>\ +</math>\ +</div>`); + var div = document.body.lastElementChild; + var mos = div.getElementsByTagName("mo"); + mo = mos[0].getBoundingClientRect() + moRef = mos[1].getBoundingClientRect() + assert_approx_equals(mo.height, moRef.height, epsilon, `Symmetric property for ${key} should be '${defaultValue}'`); + div.style.display = "none"; + }); + } + + tests["accent"].step(function() { + // FIXME: Should really detect accent support... + assert_true(MathMLFeatureDetection.has_mover()); + var defaultValue = defaultPropertyValue(entry, "accent"); + document.body.insertAdjacentHTML("beforeend", `<div>\ +accent for "${parsedKey.characters}" (${parsedKey.form}): \ +<math>\ + <mover>\ + <mn> </mn>\ + <mo form="${parsedKey.form}">${parsedKey.characters}</mo>\ + </mover>\ +</math>\ + VS \ +<math>\ + <mover>\ + <mn> </mn>\ + <mo form="${parsedKey.form}" accent="${defaultValue}">${parsedKey.characters}</mo>\ + </mover>\ +</math>\ +</div>`); + var div = document.body.lastElementChild; + var movers = div.getElementsByTagName("mover"); + function gapBetweenBaseAndScript(mover) { + return mover.children[0].getBoundingClientRect().top - + mover.children[1].getBoundingClientRect().bottom; + } + var gap = gapBetweenBaseAndScript(movers[0]) + var gapRef = gapBetweenBaseAndScript(movers[1]) + assert_approx_equals(gap, gapRef, epsilon, `Accent property for ${key} should be '${defaultValue}'`); + div.style.display = "none"; + }); + + counter++; + } + + // Complete current async tests. + for (name in tests) { + if (tests[name]) tests[name].done(); + } + + done(); + } +</script> +</head> +<body> + <div id="log"></div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html index 403a76f..e1b8c3d 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html
@@ -13,5 +13,6 @@ <mspace width="64px" height="12px" style="background: lightblue"></mspace> <mspace width="128px" height="24px" style="background: lightgreen"></mspace> </mroot> + </math> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html index c49a899..44e449e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html
@@ -42,5 +42,8 @@ <mspace width="16px" class="oof2"/> <mspace width="8px" class="nobox"/> </mroot> + </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_msqrt");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/attribute-mapping-001.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/attribute-mapping-001.html index c0c91dc..e7c6391e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/attribute-mapping-001.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/attribute-mapping-001.html
@@ -8,6 +8,7 @@ <meta name="assert" content="Verify that dir, mathcolor, mathbackground and mathsize are mapped to CSS but that deprecated MathML3 attributes are not."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> <script src="/mathml/support/mathml-fragments.js"></script> <style> #container { @@ -72,6 +73,7 @@ }, `mathsize on the ${tag} element is mapped to CSS font-size`); test(function() { + assert_true(MathMLFeatureDetection.has_mathsize(), "Superseding attributes are supported"); var properties = ["background-color", "color", "fontfamily", "font-size", "font-style", "font-weight"]; var oldStyle = {}; properties.forEach(property => {
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-011.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-011.html index 9a85a17d..a73031aa 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-011.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-011.html
@@ -162,5 +162,7 @@ </mstyle> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_movablelimits");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-012.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-012.html index 150443f2..7572361 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-012.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-012.html
@@ -31,5 +31,7 @@ </mstyle> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_movablelimits");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-013.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-013.html index 30be35c..2ed45599 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-013.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-013.html
@@ -73,5 +73,7 @@ </mtable> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_movablelimits");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-014.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-014.html index d54a804..1e70cb6 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-014.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-014.html
@@ -48,5 +48,7 @@ </mstyle> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mfrac");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-015.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-015.html index df25171..a288aac 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-015.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-015.html
@@ -76,5 +76,8 @@ </munderover> </mstyle> </math> + + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_movablelimits");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/ignored-properties-001.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/ignored-properties-001.html new file mode 100644 index 0000000..e3e3806 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/ignored-properties-001.html
@@ -0,0 +1,81 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Ignored CSS properties</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> +<meta name="assert" content="Verify style with ignored properties does not affect MathML layout."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> +<script src="/mathml/support/layout-comparison.js"></script> +<script src="/mathml/support/mathml-fragments.js"></script> +<script> + var epsilon = 1; + + setup({ explicit_done: true }); + window.addEventListener("load", runTests); + + function runTests() { + + for (tag in MathMLFragments) { + if (!FragmentHelper.isValidChildOfMrow(tag)) + continue; + + var ignoredProperties = [ + "writing-mode: vertical-rl;", + "white-space: normal;", + "float: right;", + "align-content: end; justify-content: end;", + "align-self: end; justify-self: end;", + ]; + if (tag !== "mtable") { + ignoredProperties.push("width: 100px !important; height: 200px !important;"); + } + + ignoredProperties.forEach(ignoredStyle => { + document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\ +<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\ +<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\ +</div>`); + var div = document.body.lastElementChild; + + // Create MathML structure with ignored style properties. + var elementContainer = div.firstElementChild; + var elementContainerWidth = elementContainer.getBoundingClientRect().width; + var element = FragmentHelper.element(elementContainer); + if (!FragmentHelper.isEmpty(tag)) + FragmentHelper.forceNonEmptyDescendants(element); + element.setAttribute("style", ignoredStyle); + Array.from(element.getElementsByTagNameNS("*", FragmentHelper.mathml_namespace)).forEach(descendant => { + descendant.setAttribute("style", ignoredStyle); + }); + + var referenceContainer = div.lastElementChild; + var referenceContainerWidth = referenceContainer.getBoundingClientRect().width; + var reference = FragmentHelper.element(referenceContainer); + if (!FragmentHelper.isEmpty(tag)) + FragmentHelper.forceNonEmptyDescendants(reference); + + test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); + assert_approx_equals(elementContainerWidth, referenceContainerWidth, epsilon); + }, `${tag} preferred width calculation is not affected by ${ignoredStyle}`); + + test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); + compareLayout(element, reference, epsilon); + }, `${tag} layout is not affected by ${ignoredStyle}`); + + div.style = "display: none;"; // Hide the div after measurement. + }); + } + + done(); + } +</script> +</head> +<body> + <div id="log"></div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathsize-attribute-css-keywords.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathsize-attribute-css-keywords.html index 9b3852d0..6390ebf 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathsize-attribute-css-keywords.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathsize-attribute-css-keywords.html
@@ -7,6 +7,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#legacy-mathml-style-attributes"> <meta name="assert" content="Verify that CSS font-size keywords are invalid for the mathsize attribute."> <link rel="match" href="mathsize-attribute-css-keywords-ref.html"> + <script src="/mathml/support/feature-detection.js"></script> </head> <body> <p>Test passes if you see ten "A" of equal size:</p> @@ -22,5 +23,7 @@ <mtext mathsize="larger">A</mtext> <mtext mathsize="smaller">A</mtext> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mathsize");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathsize-attribute-legacy-values.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathsize-attribute-legacy-values.html index 745b103..abddf52 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathsize-attribute-legacy-values.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathsize-attribute-legacy-values.html
@@ -7,6 +7,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#legacy-mathml-style-attributes"> <meta name="assert" content="Verify that legacy values for mathsize have no effect."> <link rel="match" href="mathsize-attribute-legacy-values-ref.html"> + <script src="/mathml/support/feature-detection.js"></script> </head> <body> <p>Test passes if you see four "A" of equal size:</p> @@ -16,5 +17,7 @@ <mtext mathsize="medium">A</mtext> <mtext mathsize="big">A</mtext> </math> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mathsize");</script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto.html index 3390fc0..29b1de8 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#italic-mappings"> <link rel="match" href="mathvariant-auto-ref.html"/> <meta name="assert" content="Verify that a single-char <mi> is equivalent to an <mi> with the transformed italic unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur.html index 2bfb8b7d..2837ab97 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-fraktur-mappings"> <link rel="match" href="mathvariant-bold-fraktur-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a bold-fraktur mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic.html index 5454b86..90135f6 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-italic-mappings"> <link rel="match" href="mathvariant-bold-italic-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a bold-italic mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif.html index 112c292..241a44a 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-sans-serif-mappings"> <link rel="match" href="mathvariant-bold-sans-serif-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a bold-sans-serif mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script.html index 47cf016..b974f82c 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-script-mappings"> <link rel="match" href="mathvariant-bold-script-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a bold-script mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold.html index a14fadf..d6ea644e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#bold-mappings"> <link rel="match" href="mathvariant-bold-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a bold mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck.html index 4650617..3a99515 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#double-struck-mappings"> <link rel="match" href="mathvariant-double-struck-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a double-struck mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur.html index 72f20b78..db6e21b 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fraktur-mappings"> <link rel="match" href="mathvariant-fraktur-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a fraktur mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial.html index 4f35d38..efff6fd 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#initial-mappings"> <link rel="match" href="mathvariant-initial-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a initial mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic.html index f30a2c7..cd7eb5c 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#italic-mappings"> <link rel="match" href="mathvariant-italic-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a italic mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped.html index a673224..f67bda5 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#looped-mappings"> <link rel="match" href="mathvariant-looped-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a looped mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace.html index 9e76b10..e39ea329 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#monospace-mappings"> <link rel="match" href="mathvariant-monospace-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a monospace mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html index 832fd15..2f050ef 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#sans-serif-bold-italic-mappings"> <link rel="match" href="mathvariant-sans-serif-bold-italic-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a sans-serif-bold-italic mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic.html index 7711798..c741899 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#sans-serif-italic-mappings"> <link rel="match" href="mathvariant-sans-serif-italic-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a sans-serif-italic mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif.html index afceecf6..744988c6 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#sans-serif-mappings"> <link rel="match" href="mathvariant-sans-serif-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a sans-serif mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script.html index c7f93a8d..8ebcae1c 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#script-mappings"> <link rel="match" href="mathvariant-script-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a script mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched.html index e2c8286..5752e2b 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#stretched-mappings"> <link rel="match" href="mathvariant-stretched-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a stretched mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed.html index fa8bea41..2d2c6eb1 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed.html
@@ -6,6 +6,7 @@ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#tailed-mappings"> <link rel="match" href="mathvariant-tailed-ref.html"/> <meta name="assert" content="Verify that a single-char <mtext> with a tailed mathvariant is equivalent to an <mtext> with the transformed unicode character."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/not-participating-to-parent-layout.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/not-participating-to-parent-layout.html index 1caebf1e..52d41547 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/not-participating-to-parent-layout.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/not-participating-to-parent-layout.html
@@ -22,7 +22,6 @@ if (!FragmentHelper.isValidChildOfMrow(tag) || FragmentHelper.isEmpty(tag)) continue; - // TODO: Add floats too? ["display: none", "display: contents", "position: absolute", @@ -54,17 +53,13 @@ var reference = FragmentHelper.element(referenceContainer); FragmentHelper.forceNonEmptyElement(reference); - var epsilon = 1; - test(function() { - // FIXME(fwang): Feature detection should be done per-tag. - assert_true(MathMLFeatureDetection.has_mspace()); + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); assert_approx_equals(elementContainerWidth, referenceContainerWidth, epsilon); }, `${tag} preferred width calculation is not affected by children with "${style}" style`); test(function() { - // FIXME(fwang): Feature detection should be done per-tag. - assert_true(MathMLFeatureDetection.has_mspace()); + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); compareLayout(element, reference, epsilon); }, `${tag} layout is not affected by children with "${style}" style`);
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/border-002.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/border-002.html index 06a719de..38d89aa 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/border-002.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/border-002.html
@@ -7,6 +7,7 @@ <meta name="assert" content="Verify that border is taken into account."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> <script src="/mathml/support/mathml-fragments.js"></script> <script src="/mathml/support/box-comparison.js"></script> <script> @@ -25,6 +26,7 @@ if (FragmentHelper.isEmpty(tag)) { test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSizeWithAndWithoutStyle(tag, style); assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "left/right border"); assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "top/bottom border"); @@ -34,6 +36,7 @@ } test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSpaceWithAndWithoutStyle(tag, style); assert_approx_equals(s.left_delta, 30, epsilon, "left border"); assert_approx_equals(s.right_delta, 40, epsilon, "right border"); @@ -45,6 +48,7 @@ }, `Border properties on ${tag}`); test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSpaceWithAndWithoutStyle(tag, style, null, "rtl"); assert_approx_equals(s.left_delta, 30, epsilon, "left border"); assert_approx_equals(s.right_delta, 40, epsilon, "right border");
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/margin-002.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/margin-002.html index 01c8f3e..4853c8b 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/margin-002.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/margin-002.html
@@ -7,6 +7,7 @@ <meta name="assert" content="Verify that margin is taken into account."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> <script src="/mathml/support/mathml-fragments.js"></script> <script src="/mathml/support/box-comparison.js"></script> <script> @@ -25,6 +26,7 @@ if (FragmentHelper.isEmpty(tag)) { test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSizeWithAndWithoutStyle(tag, style); assert_approx_equals(s.width_delta, 30 + 40, epsilon, "left/right margin"); assert_approx_equals(s.height_delta, 50 + 60, epsilon, "top/bottom margin"); @@ -36,6 +38,7 @@ } test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSpaceWithAndWithoutStyle(tag, style); assert_approx_equals(s.left_delta, 30, epsilon, "left margin"); assert_approx_equals(s.right_delta, 40, epsilon, "right margin"); @@ -47,6 +50,7 @@ }, `Margin properties on ${tag}`); test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSpaceWithAndWithoutStyle(tag, style, null, "rtl"); assert_approx_equals(s.left_delta, 30, epsilon, "left margin"); assert_approx_equals(s.right_delta, 40, epsilon, "right margin"); @@ -58,6 +62,7 @@ }, `Margin properties on ${tag} (rtl)`); test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); // Apply the same margin style on the parent mrow. // The margins are not collapsed so they should be added twice. var s = compareSpaceWithAndWithoutStyle(tag, style, style);
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/padding-002.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/padding-002.html index 565dfc43..e1425a0 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/padding-002.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/padding-border-margin/padding-002.html
@@ -7,6 +7,7 @@ <meta name="assert" content="Verify that padding is taken into account."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> <script src="/mathml/support/mathml-fragments.js"></script> <script src="/mathml/support/box-comparison.js"></script> <script> @@ -21,10 +22,12 @@ if (!FragmentHelper.isValidChildOfMrow(tag)) continue; - var style = "padding-left: 30px; padding-right: 40px; padding-top: 50px; padding-bottom: 60px;"; + var defaultInlinePadding = (tag === "mfrac" ? 1 : 0); + var style = `padding-left: ${defaultInlinePadding + 30}px; padding-right: ${defaultInlinePadding + 40}px; padding-top: 50px; padding-bottom: 60px;`; if (FragmentHelper.isEmpty(tag)) { test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSizeWithAndWithoutStyle(tag, style); assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "left/right padding"); assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "top/bottom padding"); @@ -34,6 +37,7 @@ } test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSpaceWithAndWithoutStyle(tag, style); assert_approx_equals(s.left_delta, 30, epsilon, "left padding"); assert_approx_equals(s.right_delta, 40, epsilon, "right padding"); @@ -45,6 +49,7 @@ }, `Padding properties on ${tag}`); test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var s = compareSpaceWithAndWithoutStyle(tag, style, "rtl"); assert_approx_equals(s.left_delta, 30, epsilon, "left padding"); assert_approx_equals(s.right_delta, 40, epsilon, "right padding");
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/width-height-001.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/width-height-001.html index 8d52f48..3947a93 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/width-height-001.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/width-height-001.html
@@ -7,6 +7,7 @@ <meta name="assert" content="Verify that width, height, inline-size and block-size properties are ignored."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> <script src="/mathml/support/mathml-fragments.js"></script> <script src="/mathml/support/box-comparison.js"></script> <script> @@ -22,6 +23,7 @@ continue; test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var style = "width: 500px; height: 400px;"; var s = compareSizeWithAndWithoutStyle(tag, style); assert_approx_equals(s.width_delta, 0, epsilon, "width"); @@ -31,6 +33,7 @@ }, `width and height properties on ${tag}`); test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); var style = "inline-size: 500px; block-size: 400px;"; var s = compareSizeWithAndWithoutStyle(tag, style); assert_approx_equals(s.width_delta, 0, epsilon, "width");
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html index 57ababb4..82fda88 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html
@@ -24,23 +24,22 @@ const EVENTS = ["copy", "cut", "paste"]; const el = document.querySelector("math"); - function addEventListenerTest(name) { + function dispatchEventTest(name) { + const mathEl = document.createElementNS( + "http://www.w3.org/1998/Math/MathML", + "math" + ); async_test(test => { - el.addEventListener( - name, - test.step_func_done(e => { - assert_true( - true, - "MathML Elements should be able to receive ${name} events" - ); - }) - ); + mathEl[`on${name}`] = test.step_func_done(e => { + assert_equals(e.currentTarget, mathEl, + "The event must be fired at the <math> element"); + }); const event = new ClipboardEvent(name, { bubbles: true, cancellable: true }); - el.dispatchEvent(event); - }, `math.addEventListener for ${name}`); + mathEl.dispatchEvent(event); + }, `${name}: dispatching an Event at a <math> element must trigger element.on${name}`); } function evaluatedHandlerTest(name) { @@ -115,7 +114,7 @@ } EVENTS.forEach(name => { - addEventListenerTest(name); + dispatchEventTest(name); evaluatedHandlerTest(name); }); </script>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-2-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-2-ref.html new file mode 100644 index 0000000..7864c0409 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-2-ref.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>display attribute VS legacy mode attribute (reference)</title> +</head> +<body> + <p>Test passes if you see four green squares, the last one + centered and the others left-aligned.</p> + <p> + <math> + <mspace width="100px" height="100px" style="background: green"></mspace> + </math> + </p> + <p> + <math> + <mspace width="100px" height="100px" style="background: green"></mspace> + </math> + </p> + <p> + <math display="inline"> + <mspace width="100px" height="100px" style="background: green"></mspace> + </math> + </p> + <p> + <math display="block"> + <mspace width="100px" height="100px" style="background: green"></mspace> + </math> + </p> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-2.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-2.html new file mode 100644 index 0000000..d1c68e5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-2.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>display attribute VS legacy mode attribute</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-top-level-math-element"> +<link rel="help" href="https://www.w3.org/TR/MathML3/chapter2.html#id.2.2.2"> +<link rel="match" href="display-2-ref.html"/> +<meta name="assert" content="Verify that the legacy mode attribute has no effect."> +</head> +<body> + <p>Test passes if you see four green squares, the last one + centered and the others left-aligned.</p> + <p> + <math mode="inline"> + <mspace width="100px" height="100px" style="background: green"></mspace> + </math> + </p> + <p> + <math mode="display"> + <mspace width="100px" height="100px" style="background: green"></mspace> + </math> + </p> + <p> + <math display="inline" mode="display"> + <mspace width="100px" height="100px" style="background: green"></mspace> + </math> + </p> + <p> + <math display="block" mode="inline"> + <mspace width="100px" height="100px" style="background: green"></mspace> + </math> + </p> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html index b5b9c75..e96feea 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html
@@ -124,18 +124,18 @@ assert_equals(el[name], null, `The ${name} property must be null (remove attribute)`); }, `${name}: dynamic changes on the attribute`); - test(() => { + async_test(t => { const element = document.createElementNS( "http://www.w3.org/1998/Math/MathML", "math" ); - element[name] = e => { + element[name] = t.step_func_done(e => { assert_equals( e.currentTarget, element, "The event must be fired at the <math> element" ); - }; + }); element.dispatchEvent(new Event(withoutOn)); }, `${name}: dispatching an Event at a <math> element must trigger element.${name}`);
diff --git a/third_party/blink/web_tests/external/wpt/mathml/support/feature-detection.js b/third_party/blink/web_tests/external/wpt/mathml/support/feature-detection.js index 50ca926d..6f1d033b 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/support/feature-detection.js +++ b/third_party/blink/web_tests/external/wpt/mathml/support/feature-detection.js
@@ -3,91 +3,27 @@ var MathMLFeatureDetection = { - has_mspace: function() { - // https://mathml-refresh.github.io/mathml-core/#space-mspace - if (!this.hasOwnProperty("_has_mspace")) { - document.body.insertAdjacentHTML("beforeend", "<math>\ -<mspace></mspace>\ -<mspace width='20px'></mspace>\ -</math>"); - var math = document.body.lastElementChild; - // The width attribute will add 20px per MathML and none if not supported. - this._has_mspace = - math.lastChild.getBoundingClientRect().width - - math.firstChild.getBoundingClientRect().width > 10; - document.body.removeChild(math); - } - return this._has_mspace; + "has_annotation": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); }, - has_operator_spacing: function() { - // https://mathml-refresh.github.io/mathml-core/#dfn-lspace - // https://mathml-refresh.github.io/mathml-core/#layout-of-mrow - if (!this.hasOwnProperty("_has_operator_spacing")) { - document.body.insertAdjacentHTML("beforeend", "<math>\ -<mrow>\ - <mn>1</mn><mo lspace='0px' rspace='0px'>+</mo><mn>2</mn>\ -</mrow>\ -<mrow>\ - <mn>1</mn><mo lspace='8px' rspace='8px'>+</mo><mn>2</mn>\ -</mrow>\ -</math>"); - var math = document.body.lastElementChild; - var mrow = math.getElementsByTagName("mrow"); - // lspace/rspace will add 16px per MathML and none if not supported. - this._has_operator_spacing = - mrow[1].getBoundingClientRect().width - - mrow[0].getBoundingClientRect().width > 10; - document.body.removeChild(math); - } - return this._has_operator_spacing; + "has_annotation-xml": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); }, - has_mfrac: function() { - if (!this.hasOwnProperty("_has_mfrac")) { - // Use tall enough fraction to avoid side effect of min num/denum shifts. - document.body.insertAdjacentHTML("beforeend", "<math>\ -<mfrac>\ - <mspace height='50px' depth='50px'></mspace>\ - <mspace height='50px' depth='50px'></mspace>\ -</mfrac>\ -<mfrac>\ - <mspace height='60px' depth='60px'></mspace>\ - <mspace height='60px' depth='60px'></mspace>\ -</mfrac>\ -</math>"); - var math = document.body.lastElementChild; - var mfrac = math.getElementsByTagName("mfrac"); - // height/depth will add 40px per MathML, 20px if mfrac does not stack its children and none if mspace is not supported. - this._has_mfrac = - mfrac[1].getBoundingClientRect().height - - mfrac[0].getBoundingClientRect().height > 30; - document.body.removeChild(math); - } - return this._has_mfrac; + "has_maction": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); }, - has_msqrt: function() { - if (!this.hasOwnProperty("_has_msqrt")) { - document.body.insertAdjacentHTML("beforeend", "<math>\ -<mrow style='font-size: 20px !important'>\ - <mtext>A</mtext>\ -</mrow>\ -<msqrt style='font-size: 20px !important'>\ - <mtext>A</mtext>\ -</msqrt>\ -</math>"); - var math = document.body.lastElementChild; - // The radical symbol will make msqrt wider than mrow, if the former is supported. - this._has_msqrt = - math.lastElementChild.getBoundingClientRect().width - - math.firstElementChild.getBoundingClientRect().width > 5; - document.body.removeChild(math); - } - return this._has_msqrt; + "has_math": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); }, - has_menclose: function() { + "has_menclose": function() { if (!this.hasOwnProperty("_has_menclose")) { document.body.insertAdjacentHTML("beforeend", "<math>\ <mrow style='font-size: 20px !important'>\ @@ -119,7 +55,209 @@ return this._has_menclose; }, - has_dir: function() { + "has_merror": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mfrac": function() { + if (!this.hasOwnProperty("_has_mfrac")) { + // Use tall enough fraction to avoid side effect of min num/denum shifts. + document.body.insertAdjacentHTML("beforeend", "<math>\ +<mfrac>\ + <mspace height='50px' depth='50px'></mspace>\ + <mspace height='50px' depth='50px'></mspace>\ +</mfrac>\ +<mfrac>\ + <mspace height='60px' depth='60px'></mspace>\ + <mspace height='60px' depth='60px'></mspace>\ +</mfrac>\ +</math>"); + var math = document.body.lastElementChild; + var mfrac = math.getElementsByTagName("mfrac"); + // height/depth will add 40px per MathML, 20px if mfrac does not stack its children and none if mspace is not supported. + this._has_mfrac = + mfrac[1].getBoundingClientRect().height - + mfrac[0].getBoundingClientRect().height > 30; + document.body.removeChild(math); + } + return this._has_mfrac; + }, + + "has_mi": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mmultiscripts": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mn": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mo": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mover": function() { + // FIXME: Improve feature detection. + return this.has_munderover(); + }, + + "has_mpadded": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mphantom": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mprescripts": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mroot": function() { + // FIXME: Improve feature detection. + return this.has_msqrt(); + }, + + "has_mrow": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_ms": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mspace": function() { + // https://mathml-refresh.github.io/mathml-core/#space-mspace + if (!this.hasOwnProperty("_has_mspace")) { + document.body.insertAdjacentHTML("beforeend", "<math>\ +<mspace></mspace>\ +<mspace width='20px'></mspace>\ +</math>"); + var math = document.body.lastElementChild; + // The width attribute will add 20px per MathML and none if not supported. + this._has_mspace = + math.lastChild.getBoundingClientRect().width - + math.firstChild.getBoundingClientRect().width > 10; + document.body.removeChild(math); + } + return this._has_mspace; + }, + + "has_msqrt": function() { + if (!this.hasOwnProperty("_has_msqrt")) { + document.body.insertAdjacentHTML("beforeend", "<math>\ +<mrow style='font-size: 20px !important'>\ + <mtext>A</mtext>\ +</mrow>\ +<msqrt style='font-size: 20px !important'>\ + <mtext>A</mtext>\ +</msqrt>\ +</math>"); + var math = document.body.lastElementChild; + // The radical symbol will make msqrt wider than mrow, if the former is supported. + this._has_msqrt = + math.lastElementChild.getBoundingClientRect().width - + math.firstElementChild.getBoundingClientRect().width > 5; + document.body.removeChild(math); + } + return this._has_msqrt; + }, + + "has_mstyle": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_msub": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_msubsup": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_msup": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mtable": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mtd": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mtext": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_mtr": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_munder": function() { + // FIXME: Improve feature detection. + return this.has_munderover(); + }, + + "has_munderover": function() { + if (!this.hasOwnProperty("_has_munderover")) { + document.body.insertAdjacentHTML("beforeend", "<math>\ +<munderover>\ + <mspace width='20px'></mspace>\ + <mspace width='20px'></mspace>\ + <mspace width='20px'></mspace>\ +</munderover>\ +<munderover>\ + <mspace width='40px'></mspace>\ + <mspace width='40px'></mspace>\ + <mspace width='40px'></mspace>\ +</munderover>\ +</math>"); + var math = document.body.lastElementChild; + var munderover = math.getElementsByTagName("munderover"); + // width_delta will be 20px per MathML, 3 * 20 = 60px if mundeover does not stack its children and 0px if mspace is not supported. + var width_delta = + munderover[1].getBoundingClientRect().width - + munderover[0].getBoundingClientRect().width; + this._has_munderover = width_delta > 10 && width_delta < 30; + document.body.removeChild(math); + } + return this._has_munderover; + }, + + "has_none": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_semantics": function() { + // FIXME: Improve feature detection. + return this.has_mspace(); + }, + + "has_dir": function() { if (!this.hasOwnProperty("_has_dir")) { document.body.insertAdjacentHTML("beforeend", "<math style='direction: ltr !important;'>\ <mtext dir='rtl'></mtext>\ @@ -133,6 +271,69 @@ return this._has_dir; }, + "has_mathsize": function() { + if (!this.hasOwnProperty("_has_mathsize")) { + document.body.insertAdjacentHTML("beforeend", "<math style='font-size: 64px !important;'>\ +<mtext mathsize='32px'></mtext>\ +</math>"); + var math = document.body.lastElementChild; + this._has_mathsize = + window.getComputedStyle(math.firstElementChild). + getPropertyValue('font-size') === '32px'; + document.body.removeChild(math); + } + return this._has_mathsize; + }, + + "has_movablelimits": function() { + if (!this.hasOwnProperty("_has_movablelimits")) { + document.body.insertAdjacentHTML("beforeend", "<math>\ +<munder>\ + <mo style='font-size: 30px !important' movablelimits='false'>A</mo>\ + <mspace width='100px'></mspace>\ +</munder>\ +<munder>\ + <mo style='font-size: 30px !important' movablelimits='true'>A</mo>\ + <mspace width='100px'></mspace>\ +</munder>\ +</math>"); + var math = document.body.lastElementChild; + var munder = math.getElementsByTagName("munder"); + // If movablelimits is supported, the <mspace> will be placed next + // to <mo> rather than below it, so width_delta is about the width + // of the <mo>. + var width_delta = + munder[1].getBoundingClientRect().width - + munder[0].getBoundingClientRect().width; + this._has_movablelimits = this.has_munder() && width_delta > 20; + document.body.removeChild(math); + } + return this._has_movablelimits; + }, + + "has_operator_spacing": function() { + // https://mathml-refresh.github.io/mathml-core/#dfn-lspace + // https://mathml-refresh.github.io/mathml-core/#layout-of-mrow + if (!this.hasOwnProperty("_has_operator_spacing")) { + document.body.insertAdjacentHTML("beforeend", "<math>\ +<mrow>\ + <mn>1</mn><mo lspace='0px' rspace='0px'>+</mo><mn>2</mn>\ +</mrow>\ +<mrow>\ + <mn>1</mn><mo lspace='8px' rspace='8px'>+</mo><mn>2</mn>\ +</mrow>\ +</math>"); + var math = document.body.lastElementChild; + var mrow = math.getElementsByTagName("mrow"); + // lspace/rspace will add 16px per MathML and none if not supported. + this._has_operator_spacing = + mrow[1].getBoundingClientRect().width - + mrow[0].getBoundingClientRect().width > 10; + document.body.removeChild(math); + } + return this._has_operator_spacing; + }, + ensure_for_match_reftest: function(has_function) { if (!document.querySelector("link[rel='match']")) throw "This function must only be used for match reftest";
diff --git a/third_party/blink/web_tests/external/wpt/mathml/support/mathml-fragments.js b/third_party/blink/web_tests/external/wpt/mathml/support/mathml-fragments.js index 7c7b003..8376ccf 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/support/mathml-fragments.js +++ b/third_party/blink/web_tests/external/wpt/mathml/support/mathml-fragments.js
@@ -117,8 +117,10 @@ }; var FragmentHelper = { + mathml_namespace: "http://www.w3.org/1998/Math/MathML", + createElement: function(tag) { - return document.createElementNS("http://www.w3.org/1998/Math/MathML", tag); + return document.createElementNS(this.mathml_namespace, tag); }, isValidChildOfMrow: function(tag) { @@ -158,5 +160,22 @@ if (element.firstElementChild) return element.firstElementChild; return this.appendChild(fragment); - } + }, + + forceNonEmptyDescendants: function(fragment) { + var element = this.element(fragment) || fragment; + if (element.classList.contains("mathml-container") || + element.classList.contains("foreign-container")) { + for (var i = 0; i < 10; i++) + this.appendChild(element); + return; + } + var child = element.firstElementChild; + if (child) { + for (; child; child = child.nextElementSibling) { + this.forceNonEmptyDescendants(child); + } + return; + } + }, }
diff --git a/third_party/blink/web_tests/external/wpt/mathml/support/operator-dictionary.js b/third_party/blink/web_tests/external/wpt/mathml/support/operator-dictionary.js new file mode 100644 index 0000000..b2f4a0d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/support/operator-dictionary.js
@@ -0,0 +1,42 @@ +async function fetchOperatorDictionary() { + let response = await fetch(`/mathml/support/operator-dictionary.json`); + return response.json(); +} + +function splitKey(key) { + var value = key.split(" ") + return { + characters: value[0], + form: value[1] + }; +} + +function spaceIndexToLength(index) { + // See https://mathml-refresh.github.io/mathml-core/#operator-dictionary + return ["0", + "0.05555555555555555em", + "0.1111111111111111em", + "0.16666666666666666em", + "0.2222222222222222em", + "0.2777777777777778em", + "0.3333333333333333em", + "0.3888888888888889em" + ][index]; +} + +function defaultPropertyValue(entry, name) { + switch (name) { + case "lspace": + case "rspace": + return spaceIndexToLength(entry.hasOwnProperty(name) ? entry[name] : 5); + break + case "largeop": + case "movablelimits": + case "stretchy": + case "symmetric": + case "accent": + return entry[name]; + default: + throw `Unknown property ${name}`; + } +}
diff --git a/third_party/blink/web_tests/external/wpt/mathml/support/operator-dictionary.json b/third_party/blink/web_tests/external/wpt/mathml/support/operator-dictionary.json new file mode 100644 index 0000000..2e9abe73 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/support/operator-dictionary.json
@@ -0,0 +1 @@ +{"comment": "This file was automatically generated by operator-dictionary.py. Do not edit.", "dictionary": {"! postfix": {"lspace": 1, "rspace": 0}, "!! postfix": {"lspace": 1, "rspace": 0}, "!= infix": {"lspace": 4, "rspace": 4}, "\" postfix": {"accent": true, "lspace": 0, "rspace": 0}, "% infix": {"lspace": 3, "rspace": 3}, "& postfix": {"lspace": 0, "rspace": 0}, "&& infix": {"lspace": 4, "rspace": 4}, "' postfix": {"accent": true, "lspace": 0, "rspace": 0}, "( prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, ") postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "* infix": {"lspace": 3, "rspace": 3}, "** infix": {"lspace": 1, "rspace": 1}, "*= infix": {"lspace": 4, "rspace": 4}, "+ infix": {"lspace": 4, "rspace": 4}, "+ prefix": {"lspace": 0, "rspace": 1}, "++ postfix": {"lspace": 0, "rspace": 0}, "+= infix": {"lspace": 4, "rspace": 4}, ", infix": {"lspace": 0, "rspace": 3}, "- infix": {"lspace": 4, "rspace": 4}, "- prefix": {"lspace": 0, "rspace": 1}, "-- postfix": {"lspace": 0, "rspace": 0}, "-= infix": {"lspace": 4, "rspace": 4}, "-> infix": {"lspace": 5, "rspace": 5}, ". infix": {"lspace": 3, "rspace": 3}, ".. postfix": {"lspace": 0, "rspace": 0}, "... postfix": {"lspace": 0, "rspace": 0}, "/ infix": {"lspace": 1, "rspace": 1}, "// infix": {"lspace": 1, "rspace": 1}, "/= infix": {"lspace": 4, "rspace": 4}, ": infix": {"lspace": 1, "rspace": 2}, ":= infix": {"lspace": 4, "rspace": 4}, "; infix": {"lspace": 0, "rspace": 3}, "< infix": {"lspace": 5, "rspace": 5}, "<= infix": {"lspace": 5, "rspace": 5}, "<> infix": {"lspace": 1, "rspace": 1}, "= infix": {"horizontal": true, "lspace": 5, "rspace": 5}, "== infix": {"lspace": 4, "rspace": 4}, "> infix": {"lspace": 5, "rspace": 5}, ">= infix": {"lspace": 5, "rspace": 5}, "? infix": {"lspace": 1, "rspace": 1}, "@ infix": {"lspace": 1, "rspace": 1}, "[ prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\\ infix": {"lspace": 0, "rspace": 0}, "] postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "^ infix": {"horizontal": true, "lspace": 1, "rspace": 1}, "^ postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "_ infix": {"horizontal": true, "lspace": 1, "rspace": 1}, "_ postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "` postfix": {"accent": true, "lspace": 0, "rspace": 0}, "{ prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "| infix": {"lspace": 2, "rspace": 2, "stretchy": true, "symmetric": true}, "| postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "| prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "|| infix": {"lspace": 2, "rspace": 2, "stretchy": true, "symmetric": true}, "|| postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "|| prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "||| infix": {"lspace": 2, "rspace": 2, "stretchy": true, "symmetric": true}, "||| postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "||| prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "} postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "~ postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u00a0 infix": {}, "\u00a0 prefix": {}, "\u00a0 suffix": {}, "\u00a8 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u00aa postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u00ac prefix": {"lspace": 2, "rspace": 1}, "\u00af postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u00b0 postfix": {"lspace": 0, "rspace": 0}, "\u00b1 infix": {"lspace": 4, "rspace": 4}, "\u00b1 prefix": {"lspace": 0, "rspace": 1}, "\u00b2 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u00b3 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u00b4 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u00b7 infix": {"lspace": 4, "rspace": 4}, "\u00b8 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u00b9 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u00ba postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u00d7 infix": {"lspace": 4, "rspace": 4}, "\u00f7 infix": {"lspace": 4, "rspace": 4}, "\u02c6 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02c7 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02c9 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02ca postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u02cb postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u02cd postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02d8 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u02d9 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u02da postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u02dc postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02dd postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u02f7 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u0302 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u0311 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u03f6 infix": {"lspace": 5, "rspace": 5}, "\u2016 postfix": {"lspace": 0, "rspace": 0, "stretchy": true}, "\u2016 prefix": {"lspace": 0, "rspace": 0, "stretchy": true}, "\u2018 prefix": {"lspace": 0, "rspace": 0}, "\u2019 postfix": {"lspace": 0, "rspace": 0}, "\u201a postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u201b postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u201c prefix": {"lspace": 0, "rspace": 0}, "\u201d postfix": {"lspace": 0, "rspace": 0}, "\u201e postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u201f postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u2022 infix": {"lspace": 4, "rspace": 4}, "\u2026 infix": {"lspace": 0, "rspace": 0}, "\u2032 postfix": {"lspace": 0, "rspace": 0}, "\u2033 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u2034 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u2035 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u2036 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u2037 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u203e postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u2043 infix": {"lspace": 4, "rspace": 4}, "\u2044 infix": {"lspace": 4, "rspace": 4, "stretchy": true}, "\u2057 postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u2061 infix": {"lspace": 0, "rspace": 0}, "\u2062 infix": {"lspace": 0, "rspace": 0}, "\u2063 infix": {"lspace": 0, "rspace": 0}, "\u2064 infix": {"lspace": 0, "rspace": 0}, "\u20db postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u20dc postfix": {"accent": true, "lspace": 0, "rspace": 0}, "\u2145 prefix": {"lspace": 2, "rspace": 1}, "\u2146 prefix": {"lspace": 2, "rspace": 0}, "\u2190 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2191 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2192 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2193 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2194 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2195 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2196 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2197 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2198 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2199 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219a infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u219b infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u219c infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219d infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219e infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219f infix": {"accent": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a0 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a2 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a3 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a4 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a6 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a7 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a8 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a9 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21aa infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ab infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ac infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ad infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ae infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21af infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b0 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b2 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b4 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21b5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b6 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21b7 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21b8 infix": {"lspace": 5, "rspace": 5}, "\u21b9 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ba infix": {"lspace": 5, "rspace": 5}, "\u21bb infix": {"lspace": 5, "rspace": 5}, "\u21bc infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21bd infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21be infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21bf infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c0 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c1 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c2 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c4 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c6 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c7 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c8 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c9 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ca infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21cb infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21cc infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21cd infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21ce infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21cf infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21d0 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21d1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d2 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21d3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d4 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21d5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d6 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d7 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d8 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d9 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21da infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21db infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21dc infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21dd infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21de infix": {"lspace": 5, "rspace": 5}, "\u21df infix": {"lspace": 5, "rspace": 5}, "\u21e0 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21e2 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21e4 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e5 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e6 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e7 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21e8 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e9 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ea infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21eb infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ec infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ed infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ee infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ef infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21f0 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21f1 infix": {"lspace": 5, "rspace": 5}, "\u21f2 infix": {"lspace": 5, "rspace": 5}, "\u21f3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21f4 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21f5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21f6 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21f7 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21f8 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21f9 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21fa infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21fb infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21fc infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u21fd infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21fe infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ff infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2200 prefix": {"lspace": 2, "rspace": 1}, "\u2201 infix": {"lspace": 1, "rspace": 2}, "\u2202 prefix": {"lspace": 2, "rspace": 1}, "\u2203 prefix": {"lspace": 2, "rspace": 1}, "\u2204 prefix": {"lspace": 2, "rspace": 1}, "\u2206 infix": {"lspace": 3, "rspace": 3}, "\u2207 prefix": {"lspace": 2, "rspace": 1}, "\u2208 infix": {"lspace": 5, "rspace": 5}, "\u2209 infix": {"lspace": 5, "rspace": 5}, "\u220a infix": {"lspace": 5, "rspace": 5}, "\u220b infix": {"lspace": 5, "rspace": 5}, "\u220c infix": {"lspace": 5, "rspace": 5}, "\u220d infix": {"lspace": 5, "rspace": 5}, "\u220e infix": {"lspace": 3, "rspace": 3}, "\u220f prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2210 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2211 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2212 infix": {"lspace": 4, "rspace": 4}, "\u2212 prefix": {"lspace": 0, "rspace": 1}, "\u2213 infix": {"lspace": 4, "rspace": 4}, "\u2213 prefix": {"lspace": 0, "rspace": 1}, "\u2214 infix": {"lspace": 4, "rspace": 4}, "\u2215 infix": {"lspace": 4, "rspace": 4, "stretchy": true}, "\u2216 infix": {"lspace": 4, "rspace": 4}, "\u2217 infix": {"lspace": 4, "rspace": 4}, "\u2218 infix": {"lspace": 4, "rspace": 4}, "\u2219 infix": {"lspace": 4, "rspace": 4}, "\u221a prefix": {"lspace": 1, "rspace": 1, "stretchy": true}, "\u221b prefix": {"lspace": 1, "rspace": 1}, "\u221c prefix": {"lspace": 1, "rspace": 1}, "\u221d infix": {"lspace": 5, "rspace": 5}, "\u221f infix": {"lspace": 5, "rspace": 5}, "\u2220 prefix": {"lspace": 0, "rspace": 0}, "\u2221 prefix": {"lspace": 0, "rspace": 0}, "\u2222 prefix": {"lspace": 0, "rspace": 0}, "\u2223 infix": {"lspace": 5, "rspace": 5}, "\u2224 infix": {"lspace": 5, "rspace": 5}, "\u2225 infix": {"lspace": 5, "rspace": 5}, "\u2226 infix": {"lspace": 5, "rspace": 5}, "\u2227 infix": {"lspace": 4, "rspace": 4}, "\u2228 infix": {"lspace": 4, "rspace": 4}, "\u2229 infix": {"lspace": 4, "rspace": 4}, "\u222a infix": {"lspace": 4, "rspace": 4}, "\u222b prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u222c prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u222d prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u222e prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u222f prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u2230 prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u2231 prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u2232 prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u2233 prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u2234 infix": {"lspace": 5, "rspace": 5}, "\u2235 infix": {"lspace": 5, "rspace": 5}, "\u2236 infix": {"lspace": 5, "rspace": 5}, "\u2237 infix": {"lspace": 5, "rspace": 5}, "\u2238 infix": {"lspace": 4, "rspace": 4}, "\u2239 infix": {"lspace": 5, "rspace": 5}, "\u223a infix": {"lspace": 4, "rspace": 4}, "\u223b infix": {"lspace": 5, "rspace": 5}, "\u223c infix": {"lspace": 5, "rspace": 5}, "\u223d infix": {"lspace": 5, "rspace": 5}, "\u223d\u0331 infix": {"lspace": 3, "rspace": 3}, "\u223e infix": {"lspace": 5, "rspace": 5}, "\u223f infix": {"lspace": 3, "rspace": 3}, "\u2240 infix": {"lspace": 4, "rspace": 4}, "\u2241 infix": {"lspace": 5, "rspace": 5}, "\u2242 infix": {"lspace": 5, "rspace": 5}, "\u2242\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2243 infix": {"lspace": 5, "rspace": 5}, "\u2244 infix": {"lspace": 5, "rspace": 5}, "\u2245 infix": {"lspace": 5, "rspace": 5}, "\u2246 infix": {"lspace": 5, "rspace": 5}, "\u2247 infix": {"lspace": 5, "rspace": 5}, "\u2248 infix": {"lspace": 5, "rspace": 5}, "\u2249 infix": {"lspace": 5, "rspace": 5}, "\u224a infix": {"lspace": 5, "rspace": 5}, "\u224b infix": {"lspace": 5, "rspace": 5}, "\u224c infix": {"lspace": 5, "rspace": 5}, "\u224d infix": {"lspace": 5, "rspace": 5}, "\u224e infix": {"lspace": 5, "rspace": 5}, "\u224e\u0338 infix": {"lspace": 5, "rspace": 5}, "\u224f infix": {"lspace": 5, "rspace": 5}, "\u224f\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2250 infix": {"lspace": 5, "rspace": 5}, "\u2251 infix": {"lspace": 5, "rspace": 5}, "\u2252 infix": {"lspace": 5, "rspace": 5}, "\u2253 infix": {"lspace": 5, "rspace": 5}, "\u2254 infix": {"lspace": 5, "rspace": 5}, "\u2255 infix": {"lspace": 5, "rspace": 5}, "\u2256 infix": {"lspace": 5, "rspace": 5}, "\u2257 infix": {"lspace": 5, "rspace": 5}, "\u2258 infix": {"lspace": 5, "rspace": 5}, "\u2259 infix": {"lspace": 5, "rspace": 5}, "\u225a infix": {"lspace": 5, "rspace": 5}, "\u225b infix": {"lspace": 5, "rspace": 5}, "\u225c infix": {"lspace": 5, "rspace": 5}, "\u225d infix": {"lspace": 5, "rspace": 5}, "\u225e infix": {"lspace": 5, "rspace": 5}, "\u225f infix": {"lspace": 5, "rspace": 5}, "\u2260 infix": {"lspace": 5, "rspace": 5}, "\u2261 infix": {"lspace": 5, "rspace": 5}, "\u2262 infix": {"lspace": 5, "rspace": 5}, "\u2263 infix": {"lspace": 5, "rspace": 5}, "\u2264 infix": {"lspace": 5, "rspace": 5}, "\u2265 infix": {"lspace": 5, "rspace": 5}, "\u2266 infix": {"lspace": 5, "rspace": 5}, "\u2266\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2267 infix": {"lspace": 5, "rspace": 5}, "\u2268 infix": {"lspace": 5, "rspace": 5}, "\u2269 infix": {"lspace": 5, "rspace": 5}, "\u226a infix": {"lspace": 5, "rspace": 5}, "\u226a\u0338 infix": {"lspace": 5, "rspace": 5}, "\u226b infix": {"lspace": 5, "rspace": 5}, "\u226b\u0338 infix": {"lspace": 5, "rspace": 5}, "\u226c infix": {"lspace": 5, "rspace": 5}, "\u226d infix": {"lspace": 5, "rspace": 5}, "\u226e infix": {"lspace": 5, "rspace": 5}, "\u226f infix": {"lspace": 5, "rspace": 5}, "\u2270 infix": {"lspace": 5, "rspace": 5}, "\u2271 infix": {"lspace": 5, "rspace": 5}, "\u2272 infix": {"lspace": 5, "rspace": 5}, "\u2273 infix": {"lspace": 5, "rspace": 5}, "\u2274 infix": {"lspace": 5, "rspace": 5}, "\u2275 infix": {"lspace": 5, "rspace": 5}, "\u2276 infix": {"lspace": 5, "rspace": 5}, "\u2277 infix": {"lspace": 5, "rspace": 5}, "\u2278 infix": {"lspace": 5, "rspace": 5}, "\u2279 infix": {"lspace": 5, "rspace": 5}, "\u227a infix": {"lspace": 5, "rspace": 5}, "\u227b infix": {"lspace": 5, "rspace": 5}, "\u227c infix": {"lspace": 5, "rspace": 5}, "\u227d infix": {"lspace": 5, "rspace": 5}, "\u227e infix": {"lspace": 5, "rspace": 5}, "\u227f infix": {"lspace": 5, "rspace": 5}, "\u227f\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2280 infix": {"lspace": 5, "rspace": 5}, "\u2281 infix": {"lspace": 5, "rspace": 5}, "\u2282 infix": {"lspace": 5, "rspace": 5}, "\u2282\u20d2 infix": {"lspace": 5, "rspace": 5}, "\u2283 infix": {"lspace": 5, "rspace": 5}, "\u2283\u20d2 infix": {"lspace": 5, "rspace": 5}, "\u2284 infix": {"lspace": 5, "rspace": 5}, "\u2285 infix": {"lspace": 5, "rspace": 5}, "\u2286 infix": {"lspace": 5, "rspace": 5}, "\u2287 infix": {"lspace": 5, "rspace": 5}, "\u2288 infix": {"lspace": 5, "rspace": 5}, "\u2289 infix": {"lspace": 5, "rspace": 5}, "\u228a infix": {"lspace": 5, "rspace": 5}, "\u228b infix": {"lspace": 5, "rspace": 5}, "\u228c infix": {"lspace": 4, "rspace": 4}, "\u228d infix": {"lspace": 4, "rspace": 4}, "\u228e infix": {"lspace": 4, "rspace": 4}, "\u228f infix": {"lspace": 5, "rspace": 5}, "\u228f\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2290 infix": {"lspace": 5, "rspace": 5}, "\u2290\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2291 infix": {"lspace": 5, "rspace": 5}, "\u2292 infix": {"lspace": 5, "rspace": 5}, "\u2293 infix": {"lspace": 4, "rspace": 4}, "\u2294 infix": {"lspace": 4, "rspace": 4}, "\u2295 infix": {"lspace": 4, "rspace": 4}, "\u2296 infix": {"lspace": 4, "rspace": 4}, "\u2297 infix": {"lspace": 4, "rspace": 4}, "\u2298 infix": {"lspace": 4, "rspace": 4}, "\u2299 infix": {"lspace": 4, "rspace": 4}, "\u229a infix": {"lspace": 4, "rspace": 4}, "\u229b infix": {"lspace": 4, "rspace": 4}, "\u229c infix": {"lspace": 4, "rspace": 4}, "\u229d infix": {"lspace": 4, "rspace": 4}, "\u229e infix": {"lspace": 4, "rspace": 4}, "\u229f infix": {"lspace": 4, "rspace": 4}, "\u22a0 infix": {"lspace": 4, "rspace": 4}, "\u22a1 infix": {"lspace": 4, "rspace": 4}, "\u22a2 infix": {"lspace": 5, "rspace": 5}, "\u22a3 infix": {"lspace": 5, "rspace": 5}, "\u22a4 infix": {"lspace": 5, "rspace": 5}, "\u22a5 infix": {"lspace": 5, "rspace": 5}, "\u22a6 infix": {"lspace": 5, "rspace": 5}, "\u22a7 infix": {"lspace": 5, "rspace": 5}, "\u22a8 infix": {"lspace": 5, "rspace": 5}, "\u22a9 infix": {"lspace": 5, "rspace": 5}, "\u22aa infix": {"lspace": 5, "rspace": 5}, "\u22ab infix": {"lspace": 5, "rspace": 5}, "\u22ac infix": {"lspace": 5, "rspace": 5}, "\u22ad infix": {"lspace": 5, "rspace": 5}, "\u22ae infix": {"lspace": 5, "rspace": 5}, "\u22af infix": {"lspace": 5, "rspace": 5}, "\u22b0 infix": {"lspace": 5, "rspace": 5}, "\u22b1 infix": {"lspace": 5, "rspace": 5}, "\u22b2 infix": {"lspace": 5, "rspace": 5}, "\u22b3 infix": {"lspace": 5, "rspace": 5}, "\u22b4 infix": {"lspace": 5, "rspace": 5}, "\u22b5 infix": {"lspace": 5, "rspace": 5}, "\u22b6 infix": {"lspace": 5, "rspace": 5}, "\u22b7 infix": {"lspace": 5, "rspace": 5}, "\u22b8 infix": {"lspace": 5, "rspace": 5}, "\u22b9 infix": {"lspace": 5, "rspace": 5}, "\u22ba infix": {"lspace": 4, "rspace": 4}, "\u22bb infix": {"lspace": 4, "rspace": 4}, "\u22bc infix": {"lspace": 4, "rspace": 4}, "\u22bd infix": {"lspace": 4, "rspace": 4}, "\u22be infix": {"lspace": 3, "rspace": 3}, "\u22bf infix": {"lspace": 3, "rspace": 3}, "\u22c0 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u22c1 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u22c2 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u22c3 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u22c4 infix": {"lspace": 4, "rspace": 4}, "\u22c5 infix": {"lspace": 4, "rspace": 4}, "\u22c6 infix": {"lspace": 4, "rspace": 4}, "\u22c7 infix": {"lspace": 4, "rspace": 4}, "\u22c8 infix": {"lspace": 5, "rspace": 5}, "\u22c9 infix": {"lspace": 4, "rspace": 4}, "\u22ca infix": {"lspace": 4, "rspace": 4}, "\u22cb infix": {"lspace": 4, "rspace": 4}, "\u22cc infix": {"lspace": 4, "rspace": 4}, "\u22cd infix": {"lspace": 5, "rspace": 5}, "\u22ce infix": {"lspace": 4, "rspace": 4}, "\u22cf infix": {"lspace": 4, "rspace": 4}, "\u22d0 infix": {"lspace": 5, "rspace": 5}, "\u22d1 infix": {"lspace": 5, "rspace": 5}, "\u22d2 infix": {"lspace": 4, "rspace": 4}, "\u22d3 infix": {"lspace": 4, "rspace": 4}, "\u22d4 infix": {"lspace": 5, "rspace": 5}, "\u22d5 infix": {"lspace": 5, "rspace": 5}, "\u22d6 infix": {"lspace": 5, "rspace": 5}, "\u22d7 infix": {"lspace": 5, "rspace": 5}, "\u22d8 infix": {"lspace": 5, "rspace": 5}, "\u22d9 infix": {"lspace": 5, "rspace": 5}, "\u22da infix": {"lspace": 5, "rspace": 5}, "\u22db infix": {"lspace": 5, "rspace": 5}, "\u22dc infix": {"lspace": 5, "rspace": 5}, "\u22dd infix": {"lspace": 5, "rspace": 5}, "\u22de infix": {"lspace": 5, "rspace": 5}, "\u22df infix": {"lspace": 5, "rspace": 5}, "\u22e0 infix": {"lspace": 5, "rspace": 5}, "\u22e1 infix": {"lspace": 5, "rspace": 5}, "\u22e2 infix": {"lspace": 5, "rspace": 5}, "\u22e3 infix": {"lspace": 5, "rspace": 5}, "\u22e4 infix": {"lspace": 5, "rspace": 5}, "\u22e5 infix": {"lspace": 5, "rspace": 5}, "\u22e6 infix": {"lspace": 5, "rspace": 5}, "\u22e7 infix": {"lspace": 5, "rspace": 5}, "\u22e8 infix": {"lspace": 5, "rspace": 5}, "\u22e9 infix": {"lspace": 5, "rspace": 5}, "\u22ea infix": {"lspace": 5, "rspace": 5}, "\u22eb infix": {"lspace": 5, "rspace": 5}, "\u22ec infix": {"lspace": 5, "rspace": 5}, "\u22ed infix": {"lspace": 5, "rspace": 5}, "\u22ee infix": {"lspace": 5, "rspace": 5}, "\u22ef infix": {"lspace": 0, "rspace": 0}, "\u22f0 infix": {"lspace": 5, "rspace": 5}, "\u22f1 infix": {"lspace": 5, "rspace": 5}, "\u22f2 infix": {"lspace": 5, "rspace": 5}, "\u22f3 infix": {"lspace": 5, "rspace": 5}, "\u22f4 infix": {"lspace": 5, "rspace": 5}, "\u22f5 infix": {"lspace": 5, "rspace": 5}, "\u22f6 infix": {"lspace": 5, "rspace": 5}, "\u22f7 infix": {"lspace": 5, "rspace": 5}, "\u22f8 infix": {"lspace": 5, "rspace": 5}, "\u22f9 infix": {"lspace": 5, "rspace": 5}, "\u22fa infix": {"lspace": 5, "rspace": 5}, "\u22fb infix": {"lspace": 5, "rspace": 5}, "\u22fc infix": {"lspace": 5, "rspace": 5}, "\u22fd infix": {"lspace": 5, "rspace": 5}, "\u22fe infix": {"lspace": 5, "rspace": 5}, "\u22ff infix": {"lspace": 5, "rspace": 5}, "\u2308 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2309 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u230a prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u230b postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2329 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u232a postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u23b4 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23b5 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23dc postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23dd postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23de postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23df postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23e0 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23e1 postfix": {"accent": true, "horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u25a0 infix": {"lspace": 3, "rspace": 3}, "\u25a1 infix": {"lspace": 3, "rspace": 3}, "\u25aa infix": {"lspace": 3, "rspace": 3}, "\u25ab infix": {"lspace": 3, "rspace": 3}, "\u25ad infix": {"lspace": 3, "rspace": 3}, "\u25ae infix": {"lspace": 3, "rspace": 3}, "\u25af infix": {"lspace": 3, "rspace": 3}, "\u25b0 infix": {"lspace": 3, "rspace": 3}, "\u25b1 infix": {"lspace": 3, "rspace": 3}, "\u25b2 infix": {"lspace": 4, "rspace": 4}, "\u25b3 infix": {"lspace": 4, "rspace": 4}, "\u25b4 infix": {"lspace": 4, "rspace": 4}, "\u25b5 infix": {"lspace": 4, "rspace": 4}, "\u25b6 infix": {"lspace": 4, "rspace": 4}, "\u25b7 infix": {"lspace": 4, "rspace": 4}, "\u25b8 infix": {"lspace": 4, "rspace": 4}, "\u25b9 infix": {"lspace": 4, "rspace": 4}, "\u25bc infix": {"lspace": 4, "rspace": 4}, "\u25bd infix": {"lspace": 4, "rspace": 4}, "\u25be infix": {"lspace": 4, "rspace": 4}, "\u25bf infix": {"lspace": 4, "rspace": 4}, "\u25c0 infix": {"lspace": 4, "rspace": 4}, "\u25c1 infix": {"lspace": 4, "rspace": 4}, "\u25c2 infix": {"lspace": 4, "rspace": 4}, "\u25c3 infix": {"lspace": 4, "rspace": 4}, "\u25c4 infix": {"lspace": 4, "rspace": 4}, "\u25c5 infix": {"lspace": 4, "rspace": 4}, "\u25c6 infix": {"lspace": 4, "rspace": 4}, "\u25c7 infix": {"lspace": 4, "rspace": 4}, "\u25c8 infix": {"lspace": 4, "rspace": 4}, "\u25c9 infix": {"lspace": 4, "rspace": 4}, "\u25cc infix": {"lspace": 4, "rspace": 4}, "\u25cd infix": {"lspace": 4, "rspace": 4}, "\u25ce infix": {"lspace": 4, "rspace": 4}, "\u25cf infix": {"lspace": 4, "rspace": 4}, "\u25d6 infix": {"lspace": 4, "rspace": 4}, "\u25d7 infix": {"lspace": 4, "rspace": 4}, "\u25e6 infix": {"lspace": 4, "rspace": 4}, "\u266d postfix": {"lspace": 0, "rspace": 2}, "\u266e postfix": {"lspace": 0, "rspace": 2}, "\u266f postfix": {"lspace": 0, "rspace": 2}, "\u2758 infix": {"lspace": 5, "rspace": 5}, "\u2772 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2773 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27e6 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27e7 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27e8 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27e9 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ea prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27eb postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ec prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ed postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ee prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ef postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27f0 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u27f1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u27f5 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f6 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f7 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f8 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f9 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fa infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fb infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fc infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fd infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fe infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27ff infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2900 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2901 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2902 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2903 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2904 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2905 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2906 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2907 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2908 infix": {"lspace": 5, "rspace": 5}, "\u2909 infix": {"lspace": 5, "rspace": 5}, "\u290a infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u290b infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u290c infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u290d infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u290e infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u290f infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2910 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2911 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2912 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2913 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2914 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2915 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2916 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2917 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2918 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2919 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u291a infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u291b infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u291c infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u291d infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u291e infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u291f infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2920 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2921 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2922 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2923 infix": {"lspace": 5, "rspace": 5}, "\u2924 infix": {"lspace": 5, "rspace": 5}, "\u2925 infix": {"lspace": 5, "rspace": 5}, "\u2926 infix": {"lspace": 5, "rspace": 5}, "\u2927 infix": {"lspace": 5, "rspace": 5}, "\u2928 infix": {"lspace": 5, "rspace": 5}, "\u2929 infix": {"lspace": 5, "rspace": 5}, "\u292a infix": {"lspace": 5, "rspace": 5}, "\u292b infix": {"lspace": 5, "rspace": 5}, "\u292c infix": {"lspace": 5, "rspace": 5}, "\u292d infix": {"lspace": 5, "rspace": 5}, "\u292e infix": {"lspace": 5, "rspace": 5}, "\u292f infix": {"lspace": 5, "rspace": 5}, "\u2930 infix": {"lspace": 5, "rspace": 5}, "\u2931 infix": {"lspace": 5, "rspace": 5}, "\u2932 infix": {"lspace": 5, "rspace": 5}, "\u2933 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2934 infix": {"lspace": 5, "rspace": 5}, "\u2935 infix": {"lspace": 5, "rspace": 5}, "\u2936 infix": {"lspace": 5, "rspace": 5}, "\u2937 infix": {"lspace": 5, "rspace": 5}, "\u2938 infix": {"lspace": 5, "rspace": 5}, "\u2939 infix": {"lspace": 5, "rspace": 5}, "\u293a infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u293b infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u293c infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u293d infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u293e infix": {"lspace": 5, "rspace": 5}, "\u293f infix": {"lspace": 5, "rspace": 5}, "\u2940 infix": {"lspace": 5, "rspace": 5}, "\u2941 infix": {"lspace": 5, "rspace": 5}, "\u2942 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2943 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2944 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2945 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2946 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2947 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2948 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2949 infix": {"lspace": 5, "rspace": 5}, "\u294a infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u294b infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u294c infix": {"lspace": 5, "rspace": 5}, "\u294d infix": {"lspace": 5, "rspace": 5}, "\u294e infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u294f infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2950 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2951 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2952 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2953 infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2954 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2955 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2956 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2957 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2958 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2959 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u295a infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u295b infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u295c infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u295d infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u295e infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u295f infix": {"accent": true, "horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2960 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2961 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2962 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2963 infix": {"lspace": 5, "rspace": 5}, "\u2964 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2965 infix": {"lspace": 5, "rspace": 5}, "\u2966 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2967 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2968 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2969 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u296a infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u296b infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u296c infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u296d infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u296e infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u296f infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2970 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2971 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2972 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2973 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2974 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2975 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2976 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2977 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2978 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u2979 infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u297a infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u297b infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u297c infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u297d infix": {"accent": true, "lspace": 5, "rspace": 5}, "\u297e infix": {"lspace": 5, "rspace": 5}, "\u297f infix": {"lspace": 5, "rspace": 5}, "\u2980 postfix": {"lspace": 0, "rspace": 0, "stretchy": true}, "\u2980 prefix": {"lspace": 0, "rspace": 0, "stretchy": true}, "\u2981 infix": {"lspace": 3, "rspace": 3}, "\u2982 infix": {"lspace": 3, "rspace": 3}, "\u2983 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2984 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2985 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2986 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2987 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2988 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2989 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298a postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298b prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298c postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298d prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298e postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298f prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2990 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2991 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2992 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2993 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2994 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2995 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2996 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2997 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2998 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2999 infix": {"lspace": 3, "rspace": 3}, "\u299a infix": {"lspace": 3, "rspace": 3}, "\u299b infix": {"lspace": 3, "rspace": 3}, "\u299c infix": {"lspace": 3, "rspace": 3}, "\u299d infix": {"lspace": 3, "rspace": 3}, "\u299e infix": {"lspace": 3, "rspace": 3}, "\u299f infix": {"lspace": 3, "rspace": 3}, "\u29a0 infix": {"lspace": 3, "rspace": 3}, "\u29a1 infix": {"lspace": 3, "rspace": 3}, "\u29a2 infix": {"lspace": 3, "rspace": 3}, "\u29a3 infix": {"lspace": 3, "rspace": 3}, "\u29a4 infix": {"lspace": 3, "rspace": 3}, "\u29a5 infix": {"lspace": 3, "rspace": 3}, "\u29a6 infix": {"lspace": 3, "rspace": 3}, "\u29a7 infix": {"lspace": 3, "rspace": 3}, "\u29a8 infix": {"lspace": 3, "rspace": 3}, "\u29a9 infix": {"lspace": 3, "rspace": 3}, "\u29aa infix": {"lspace": 3, "rspace": 3}, "\u29ab infix": {"lspace": 3, "rspace": 3}, "\u29ac infix": {"lspace": 3, "rspace": 3}, "\u29ad infix": {"lspace": 3, "rspace": 3}, "\u29ae infix": {"lspace": 3, "rspace": 3}, "\u29af infix": {"lspace": 3, "rspace": 3}, "\u29b0 infix": {"lspace": 3, "rspace": 3}, "\u29b1 infix": {"lspace": 3, "rspace": 3}, "\u29b2 infix": {"lspace": 3, "rspace": 3}, "\u29b3 infix": {"lspace": 3, "rspace": 3}, "\u29b4 infix": {"lspace": 3, "rspace": 3}, "\u29b5 infix": {"lspace": 3, "rspace": 3}, "\u29b6 infix": {"lspace": 4, "rspace": 4}, "\u29b7 infix": {"lspace": 4, "rspace": 4}, "\u29b8 infix": {"lspace": 4, "rspace": 4}, "\u29b9 infix": {"lspace": 4, "rspace": 4}, "\u29ba infix": {"lspace": 4, "rspace": 4}, "\u29bb infix": {"lspace": 4, "rspace": 4}, "\u29bc infix": {"lspace": 4, "rspace": 4}, "\u29bd infix": {"lspace": 4, "rspace": 4}, "\u29be infix": {"lspace": 4, "rspace": 4}, "\u29bf infix": {"lspace": 4, "rspace": 4}, "\u29c0 infix": {"lspace": 5, "rspace": 5}, "\u29c1 infix": {"lspace": 5, "rspace": 5}, "\u29c2 infix": {"lspace": 3, "rspace": 3}, "\u29c3 infix": {"lspace": 3, "rspace": 3}, "\u29c4 infix": {"lspace": 4, "rspace": 4}, "\u29c5 infix": {"lspace": 4, "rspace": 4}, "\u29c6 infix": {"lspace": 4, "rspace": 4}, "\u29c7 infix": {"lspace": 4, "rspace": 4}, "\u29c8 infix": {"lspace": 4, "rspace": 4}, "\u29c9 infix": {"lspace": 3, "rspace": 3}, "\u29ca infix": {"lspace": 3, "rspace": 3}, "\u29cb infix": {"lspace": 3, "rspace": 3}, "\u29cc infix": {"lspace": 3, "rspace": 3}, "\u29cd infix": {"lspace": 3, "rspace": 3}, "\u29ce infix": {"lspace": 5, "rspace": 5}, "\u29cf infix": {"lspace": 5, "rspace": 5}, "\u29cf\u0338 infix": {"lspace": 5, "rspace": 5}, "\u29d0 infix": {"lspace": 5, "rspace": 5}, "\u29d0\u0338 infix": {"lspace": 5, "rspace": 5}, "\u29d1 infix": {"lspace": 5, "rspace": 5}, "\u29d2 infix": {"lspace": 5, "rspace": 5}, "\u29d3 infix": {"lspace": 5, "rspace": 5}, "\u29d4 infix": {"lspace": 5, "rspace": 5}, "\u29d5 infix": {"lspace": 5, "rspace": 5}, "\u29d6 infix": {"lspace": 4, "rspace": 4}, "\u29d7 infix": {"lspace": 4, "rspace": 4}, "\u29d8 infix": {"lspace": 3, "rspace": 3}, "\u29d9 infix": {"lspace": 3, "rspace": 3}, "\u29db infix": {"lspace": 3, "rspace": 3}, "\u29dc infix": {"lspace": 3, "rspace": 3}, "\u29dd infix": {"lspace": 3, "rspace": 3}, "\u29de infix": {"lspace": 5, "rspace": 5}, "\u29df infix": {"lspace": 3, "rspace": 3}, "\u29e0 infix": {"lspace": 3, "rspace": 3}, "\u29e1 infix": {"lspace": 5, "rspace": 5}, "\u29e2 infix": {"lspace": 4, "rspace": 4}, "\u29e3 infix": {"lspace": 5, "rspace": 5}, "\u29e4 infix": {"lspace": 5, "rspace": 5}, "\u29e5 infix": {"lspace": 5, "rspace": 5}, "\u29e6 infix": {"lspace": 5, "rspace": 5}, "\u29e7 infix": {"lspace": 3, "rspace": 3}, "\u29e8 infix": {"lspace": 3, "rspace": 3}, "\u29e9 infix": {"lspace": 3, "rspace": 3}, "\u29ea infix": {"lspace": 3, "rspace": 3}, "\u29eb infix": {"lspace": 3, "rspace": 3}, "\u29ec infix": {"lspace": 3, "rspace": 3}, "\u29ed infix": {"lspace": 3, "rspace": 3}, "\u29ee infix": {"lspace": 3, "rspace": 3}, "\u29ef infix": {"lspace": 3, "rspace": 3}, "\u29f0 infix": {"lspace": 3, "rspace": 3}, "\u29f1 infix": {"lspace": 3, "rspace": 3}, "\u29f2 infix": {"lspace": 3, "rspace": 3}, "\u29f3 infix": {"lspace": 3, "rspace": 3}, "\u29f4 infix": {"lspace": 5, "rspace": 5}, "\u29f5 infix": {"lspace": 4, "rspace": 4}, "\u29f6 infix": {"lspace": 4, "rspace": 4}, "\u29f7 infix": {"lspace": 4, "rspace": 4}, "\u29f8 infix": {"lspace": 3, "rspace": 3}, "\u29f9 infix": {"lspace": 3, "rspace": 3}, "\u29fa infix": {"lspace": 3, "rspace": 3}, "\u29fb infix": {"lspace": 3, "rspace": 3}, "\u29fc prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u29fd postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u29fe infix": {"lspace": 4, "rspace": 4}, "\u29ff infix": {"lspace": 4, "rspace": 4}, "\u2a00 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a01 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a02 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a03 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a04 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a05 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a06 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a07 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a08 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a09 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a0a prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a0b prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a0c prefix": {"largeop": true, "lspace": 0, "rspace": 1, "symmetric": true}, "\u2a0d prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a0e prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a0f prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a10 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a11 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a12 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a13 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a14 prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2a15 prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a16 prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a17 prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a18 prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a19 prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a1a prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a1b prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a1c prefix": {"largeop": true, "lspace": 1, "rspace": 2, "symmetric": true}, "\u2a1d infix": {"lspace": 3, "rspace": 3}, "\u2a1e infix": {"lspace": 3, "rspace": 3}, "\u2a1f infix": {"lspace": 3, "rspace": 3}, "\u2a20 infix": {"lspace": 3, "rspace": 3}, "\u2a21 infix": {"lspace": 3, "rspace": 3}, "\u2a22 infix": {"lspace": 4, "rspace": 4}, "\u2a23 infix": {"lspace": 4, "rspace": 4}, "\u2a24 infix": {"lspace": 4, "rspace": 4}, "\u2a25 infix": {"lspace": 4, "rspace": 4}, "\u2a26 infix": {"lspace": 4, "rspace": 4}, "\u2a27 infix": {"lspace": 4, "rspace": 4}, "\u2a28 infix": {"lspace": 4, "rspace": 4}, "\u2a29 infix": {"lspace": 4, "rspace": 4}, "\u2a2a infix": {"lspace": 4, "rspace": 4}, "\u2a2b infix": {"lspace": 4, "rspace": 4}, "\u2a2c infix": {"lspace": 4, "rspace": 4}, "\u2a2d infix": {"lspace": 4, "rspace": 4}, "\u2a2e infix": {"lspace": 4, "rspace": 4}, "\u2a2f infix": {"lspace": 4, "rspace": 4}, "\u2a30 infix": {"lspace": 4, "rspace": 4}, "\u2a31 infix": {"lspace": 4, "rspace": 4}, "\u2a32 infix": {"lspace": 4, "rspace": 4}, "\u2a33 infix": {"lspace": 4, "rspace": 4}, "\u2a34 infix": {"lspace": 4, "rspace": 4}, "\u2a35 infix": {"lspace": 4, "rspace": 4}, "\u2a36 infix": {"lspace": 4, "rspace": 4}, "\u2a37 infix": {"lspace": 4, "rspace": 4}, "\u2a38 infix": {"lspace": 4, "rspace": 4}, "\u2a39 infix": {"lspace": 4, "rspace": 4}, "\u2a3a infix": {"lspace": 4, "rspace": 4}, "\u2a3b infix": {"lspace": 4, "rspace": 4}, "\u2a3c infix": {"lspace": 4, "rspace": 4}, "\u2a3d infix": {"lspace": 4, "rspace": 4}, "\u2a3e infix": {"lspace": 4, "rspace": 4}, "\u2a3f infix": {"lspace": 4, "rspace": 4}, "\u2a40 infix": {"lspace": 4, "rspace": 4}, "\u2a41 infix": {"lspace": 4, "rspace": 4}, "\u2a42 infix": {"lspace": 4, "rspace": 4}, "\u2a43 infix": {"lspace": 4, "rspace": 4}, "\u2a44 infix": {"lspace": 4, "rspace": 4}, "\u2a45 infix": {"lspace": 4, "rspace": 4}, "\u2a46 infix": {"lspace": 4, "rspace": 4}, "\u2a47 infix": {"lspace": 4, "rspace": 4}, "\u2a48 infix": {"lspace": 4, "rspace": 4}, "\u2a49 infix": {"lspace": 4, "rspace": 4}, "\u2a4a infix": {"lspace": 4, "rspace": 4}, "\u2a4b infix": {"lspace": 4, "rspace": 4}, "\u2a4c infix": {"lspace": 4, "rspace": 4}, "\u2a4d infix": {"lspace": 4, "rspace": 4}, "\u2a4e infix": {"lspace": 4, "rspace": 4}, "\u2a4f infix": {"lspace": 4, "rspace": 4}, "\u2a50 infix": {"lspace": 4, "rspace": 4}, "\u2a51 infix": {"lspace": 4, "rspace": 4}, "\u2a52 infix": {"lspace": 4, "rspace": 4}, "\u2a53 infix": {"lspace": 4, "rspace": 4}, "\u2a54 infix": {"lspace": 4, "rspace": 4}, "\u2a55 infix": {"lspace": 4, "rspace": 4}, "\u2a56 infix": {"lspace": 4, "rspace": 4}, "\u2a57 infix": {"lspace": 4, "rspace": 4}, "\u2a58 infix": {"lspace": 4, "rspace": 4}, "\u2a59 infix": {"lspace": 5, "rspace": 5}, "\u2a5a infix": {"lspace": 4, "rspace": 4}, "\u2a5b infix": {"lspace": 4, "rspace": 4}, "\u2a5c infix": {"lspace": 4, "rspace": 4}, "\u2a5d infix": {"lspace": 4, "rspace": 4}, "\u2a5e infix": {"lspace": 4, "rspace": 4}, "\u2a5f infix": {"lspace": 4, "rspace": 4}, "\u2a60 infix": {"lspace": 4, "rspace": 4}, "\u2a61 infix": {"lspace": 4, "rspace": 4}, "\u2a62 infix": {"lspace": 4, "rspace": 4}, "\u2a63 infix": {"lspace": 4, "rspace": 4}, "\u2a64 infix": {"lspace": 4, "rspace": 4}, "\u2a65 infix": {"lspace": 4, "rspace": 4}, "\u2a66 infix": {"lspace": 5, "rspace": 5}, "\u2a67 infix": {"lspace": 5, "rspace": 5}, "\u2a68 infix": {"lspace": 5, "rspace": 5}, "\u2a69 infix": {"lspace": 5, "rspace": 5}, "\u2a6a infix": {"lspace": 5, "rspace": 5}, "\u2a6b infix": {"lspace": 5, "rspace": 5}, "\u2a6c infix": {"lspace": 5, "rspace": 5}, "\u2a6d infix": {"lspace": 5, "rspace": 5}, "\u2a6e infix": {"lspace": 5, "rspace": 5}, "\u2a6f infix": {"lspace": 5, "rspace": 5}, "\u2a70 infix": {"lspace": 5, "rspace": 5}, "\u2a71 infix": {"lspace": 4, "rspace": 4}, "\u2a72 infix": {"lspace": 4, "rspace": 4}, "\u2a73 infix": {"lspace": 5, "rspace": 5}, "\u2a74 infix": {"lspace": 5, "rspace": 5}, "\u2a75 infix": {"lspace": 5, "rspace": 5}, "\u2a76 infix": {"lspace": 5, "rspace": 5}, "\u2a77 infix": {"lspace": 5, "rspace": 5}, "\u2a78 infix": {"lspace": 5, "rspace": 5}, "\u2a79 infix": {"lspace": 5, "rspace": 5}, "\u2a7a infix": {"lspace": 5, "rspace": 5}, "\u2a7b infix": {"lspace": 5, "rspace": 5}, "\u2a7c infix": {"lspace": 5, "rspace": 5}, "\u2a7d infix": {"lspace": 5, "rspace": 5}, "\u2a7d\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2a7e infix": {"lspace": 5, "rspace": 5}, "\u2a7e\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2a7f infix": {"lspace": 5, "rspace": 5}, "\u2a80 infix": {"lspace": 5, "rspace": 5}, "\u2a81 infix": {"lspace": 5, "rspace": 5}, "\u2a82 infix": {"lspace": 5, "rspace": 5}, "\u2a83 infix": {"lspace": 5, "rspace": 5}, "\u2a84 infix": {"lspace": 5, "rspace": 5}, "\u2a85 infix": {"lspace": 5, "rspace": 5}, "\u2a86 infix": {"lspace": 5, "rspace": 5}, "\u2a87 infix": {"lspace": 5, "rspace": 5}, "\u2a88 infix": {"lspace": 5, "rspace": 5}, "\u2a89 infix": {"lspace": 5, "rspace": 5}, "\u2a8a infix": {"lspace": 5, "rspace": 5}, "\u2a8b infix": {"lspace": 5, "rspace": 5}, "\u2a8c infix": {"lspace": 5, "rspace": 5}, "\u2a8d infix": {"lspace": 5, "rspace": 5}, "\u2a8e infix": {"lspace": 5, "rspace": 5}, "\u2a8f infix": {"lspace": 5, "rspace": 5}, "\u2a90 infix": {"lspace": 5, "rspace": 5}, "\u2a91 infix": {"lspace": 5, "rspace": 5}, "\u2a92 infix": {"lspace": 5, "rspace": 5}, "\u2a93 infix": {"lspace": 5, "rspace": 5}, "\u2a94 infix": {"lspace": 5, "rspace": 5}, "\u2a95 infix": {"lspace": 5, "rspace": 5}, "\u2a96 infix": {"lspace": 5, "rspace": 5}, "\u2a97 infix": {"lspace": 5, "rspace": 5}, "\u2a98 infix": {"lspace": 5, "rspace": 5}, "\u2a99 infix": {"lspace": 5, "rspace": 5}, "\u2a9a infix": {"lspace": 5, "rspace": 5}, "\u2a9b infix": {"lspace": 5, "rspace": 5}, "\u2a9c infix": {"lspace": 5, "rspace": 5}, "\u2a9d infix": {"lspace": 5, "rspace": 5}, "\u2a9e infix": {"lspace": 5, "rspace": 5}, "\u2a9f infix": {"lspace": 5, "rspace": 5}, "\u2aa0 infix": {"lspace": 5, "rspace": 5}, "\u2aa1 infix": {"lspace": 5, "rspace": 5}, "\u2aa1\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2aa2 infix": {"lspace": 5, "rspace": 5}, "\u2aa2\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2aa3 infix": {"lspace": 5, "rspace": 5}, "\u2aa4 infix": {"lspace": 5, "rspace": 5}, "\u2aa5 infix": {"lspace": 5, "rspace": 5}, "\u2aa6 infix": {"lspace": 5, "rspace": 5}, "\u2aa7 infix": {"lspace": 5, "rspace": 5}, "\u2aa8 infix": {"lspace": 5, "rspace": 5}, "\u2aa9 infix": {"lspace": 5, "rspace": 5}, "\u2aaa infix": {"lspace": 5, "rspace": 5}, "\u2aab infix": {"lspace": 5, "rspace": 5}, "\u2aac infix": {"lspace": 5, "rspace": 5}, "\u2aad infix": {"lspace": 5, "rspace": 5}, "\u2aae infix": {"lspace": 5, "rspace": 5}, "\u2aaf infix": {"lspace": 5, "rspace": 5}, "\u2aaf\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2ab0 infix": {"lspace": 5, "rspace": 5}, "\u2ab0\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2ab1 infix": {"lspace": 5, "rspace": 5}, "\u2ab2 infix": {"lspace": 5, "rspace": 5}, "\u2ab3 infix": {"lspace": 5, "rspace": 5}, "\u2ab4 infix": {"lspace": 5, "rspace": 5}, "\u2ab5 infix": {"lspace": 5, "rspace": 5}, "\u2ab6 infix": {"lspace": 5, "rspace": 5}, "\u2ab7 infix": {"lspace": 5, "rspace": 5}, "\u2ab8 infix": {"lspace": 5, "rspace": 5}, "\u2ab9 infix": {"lspace": 5, "rspace": 5}, "\u2aba infix": {"lspace": 5, "rspace": 5}, "\u2abb infix": {"lspace": 5, "rspace": 5}, "\u2abc infix": {"lspace": 5, "rspace": 5}, "\u2abd infix": {"lspace": 5, "rspace": 5}, "\u2abe infix": {"lspace": 5, "rspace": 5}, "\u2abf infix": {"lspace": 5, "rspace": 5}, "\u2ac0 infix": {"lspace": 5, "rspace": 5}, "\u2ac1 infix": {"lspace": 5, "rspace": 5}, "\u2ac2 infix": {"lspace": 5, "rspace": 5}, "\u2ac3 infix": {"lspace": 5, "rspace": 5}, "\u2ac4 infix": {"lspace": 5, "rspace": 5}, "\u2ac5 infix": {"lspace": 5, "rspace": 5}, "\u2ac6 infix": {"lspace": 5, "rspace": 5}, "\u2ac7 infix": {"lspace": 5, "rspace": 5}, "\u2ac8 infix": {"lspace": 5, "rspace": 5}, "\u2ac9 infix": {"lspace": 5, "rspace": 5}, "\u2aca infix": {"lspace": 5, "rspace": 5}, "\u2acb infix": {"lspace": 5, "rspace": 5}, "\u2acc infix": {"lspace": 5, "rspace": 5}, "\u2acd infix": {"lspace": 5, "rspace": 5}, "\u2ace infix": {"lspace": 5, "rspace": 5}, "\u2acf infix": {"lspace": 5, "rspace": 5}, "\u2ad0 infix": {"lspace": 5, "rspace": 5}, "\u2ad1 infix": {"lspace": 5, "rspace": 5}, "\u2ad2 infix": {"lspace": 5, "rspace": 5}, "\u2ad3 infix": {"lspace": 5, "rspace": 5}, "\u2ad4 infix": {"lspace": 5, "rspace": 5}, "\u2ad5 infix": {"lspace": 5, "rspace": 5}, "\u2ad6 infix": {"lspace": 5, "rspace": 5}, "\u2ad7 infix": {"lspace": 5, "rspace": 5}, "\u2ad8 infix": {"lspace": 5, "rspace": 5}, "\u2ad9 infix": {"lspace": 5, "rspace": 5}, "\u2ada infix": {"lspace": 5, "rspace": 5}, "\u2adb infix": {"lspace": 5, "rspace": 5}, "\u2add infix": {"lspace": 5, "rspace": 5}, "\u2add\u0338 infix": {"lspace": 5, "rspace": 5}, "\u2ade infix": {"lspace": 5, "rspace": 5}, "\u2adf infix": {"lspace": 5, "rspace": 5}, "\u2ae0 infix": {"lspace": 5, "rspace": 5}, "\u2ae1 infix": {"lspace": 5, "rspace": 5}, "\u2ae2 infix": {"lspace": 5, "rspace": 5}, "\u2ae3 infix": {"lspace": 5, "rspace": 5}, "\u2ae4 infix": {"lspace": 5, "rspace": 5}, "\u2ae5 infix": {"lspace": 5, "rspace": 5}, "\u2ae6 infix": {"lspace": 5, "rspace": 5}, "\u2ae7 infix": {"lspace": 5, "rspace": 5}, "\u2ae8 infix": {"lspace": 5, "rspace": 5}, "\u2ae9 infix": {"lspace": 5, "rspace": 5}, "\u2aea infix": {"lspace": 5, "rspace": 5}, "\u2aeb infix": {"lspace": 5, "rspace": 5}, "\u2aec infix": {"lspace": 5, "rspace": 5}, "\u2aed infix": {"lspace": 5, "rspace": 5}, "\u2aee infix": {"lspace": 5, "rspace": 5}, "\u2aef infix": {"lspace": 5, "rspace": 5}, "\u2af0 infix": {"lspace": 5, "rspace": 5}, "\u2af1 infix": {"lspace": 5, "rspace": 5}, "\u2af2 infix": {"lspace": 5, "rspace": 5}, "\u2af3 infix": {"lspace": 5, "rspace": 5}, "\u2af4 infix": {"lspace": 4, "rspace": 4}, "\u2af5 infix": {"lspace": 4, "rspace": 4}, "\u2af6 infix": {"lspace": 4, "rspace": 4}, "\u2af7 infix": {"lspace": 5, "rspace": 5}, "\u2af8 infix": {"lspace": 5, "rspace": 5}, "\u2af9 infix": {"lspace": 5, "rspace": 5}, "\u2afa infix": {"lspace": 5, "rspace": 5}, "\u2afb infix": {"lspace": 4, "rspace": 4}, "\u2afc prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2afd infix": {"lspace": 4, "rspace": 4}, "\u2afe infix": {"lspace": 3, "rspace": 3}, "\u2aff prefix": {"largeop": true, "lspace": 1, "movablelimits": true, "rspace": 2, "symmetric": true}, "\u2b45 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b46 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\ud83b\udef0 prefix": {"horizontal": true, "stretchy": true}, "\ud83b\udef1 prefix": {"horizontal": true, "stretchy": true}}} \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/mathvariant-transforms.py b/third_party/blink/web_tests/external/wpt/mathml/tools/mathvariant-transforms.py index cb86339..dd2994d 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/mathvariant-transforms.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/mathvariant-transforms.py
@@ -2,12 +2,11 @@ from __future__ import print_function from lxml import etree -from utils.misc import downloadWithProgressBar +from utils.misc import downloadWithProgressBar, UnicodeXMLURL from utils import mathfont -import json # Retrieve the unicode.xml file if necessary. -unicodeXML = downloadWithProgressBar("http://www.w3.org/2003/entities/2007xml/unicode.xml") +unicodeXML = downloadWithProgressBar(UnicodeXMLURL) # Extract the mathvariants transformation. xsltTransform = etree.XSLT(etree.XML('''\ @@ -63,6 +62,8 @@ # Create a WOFF font for each mathvariant. for mathvariant in mathvariantTransforms: + if mathvariant == "auto": + continue font = mathfont.create("mathvariant-%s" % mathvariant) for baseChar in mathvariantTransforms[mathvariant]: if baseChar not in font: @@ -90,25 +91,26 @@ CSSreftestReference.write(source % ("text-transform math-%s (reference)" % mathvariant)) if mathvariant == "auto": mathAssert = "Verify that a single-char <mi> is equivalent to an <mi> with the transformed italic unicode character." + mapping = "italic" else: mathAssert = "Verify that a single-char <mtext> with a %s mathvariant is equivalent to an <mtext> with the transformed unicode character." % mathvariant + mapping = mathvariant source ='\ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">\n\ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute">\n\ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values">\n\ +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#%s-mappings">\n\ <link rel="match" href="mathvariant-%s-ref.html"/>\n\ <meta name="assert" content="%s">\n' - reftest.write(source % (mathvariant, mathAssert)) + reftest.write(source % (mapping, mathvariant, mathAssert)) source = '\ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/>\n\ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values">\n\ +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#%s-mappings">\n\ <link rel="match" href="text-transform-math-%s-001.tentative-ref.html"/>\n\ <meta name="assert" content="Verify that a character with \'text-transform: math-%s\' renders the same as the transformed unicode character.">\n' - CSSreftest.write(source % (mathvariant, mathvariant)) - if mathvariant == "auto": - WOFFfont = "mathvariant-italic.woff" - else: - WOFFfont = "mathvariant-%s.woff" % mathvariant + CSSreftest.write(source % (mapping, mathvariant, mathvariant)) + WOFFfont = "mathvariant-%s.woff" % mapping source = '\ <style>\n\ @font-face {\n\
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.py b/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.py new file mode 100755 index 0000000..8af2bd67 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.py
@@ -0,0 +1,134 @@ +#!/usr/bin/python + +from lxml import etree +from utils.misc import downloadWithProgressBar, UnicodeXMLURL, InlineAxisOperatorsURL +import json, re +from utils import mathfont + +NonBreakingSpace = 0x00A0 + +def parseHexaNumber(string): + return int("0x%s" % string, 16) + +def parseHexaSequence(string): + return tuple(map(parseHexaNumber, string[1:].split("-"))) + +def parseSpaces(value, entry, names): + for name in names: + attributeValue = entry.get(name) + if attributeValue is not None: + value[name] = int(attributeValue) + +def parseProperties(value, entry, names): + attributeValue = entry.get("properties") + if attributeValue is not None: + for name in names: + if attributeValue.find(name) >= 0: + value[name] = True + +def buildKeyAndValueFrom(characters, form): + # Concatenate characters and form to build the key. + key = "" + for c in characters: + key += unichr(c) + key += " " + form + # But save characters as an individual property for easier manipulation in + # this Python script. + value = { + "characters": characters, + } + return key, value + +def createSizeVariants(aFont): + for size in (0, 1, 2, 3): + g = aFont.createChar(-1, "v%d" % size) + mathfont.drawRectangleGlyph(g, mathfont.em, (size + 1) * mathfont.em, 0) + g = aFont.createChar(-1, "h%d" % size) + mathfont.drawRectangleGlyph(g, (size + 1) * mathfont.em, mathfont.em, 0) + +def createStretchy(aFont, codePoint, isHorizontal): + if isHorizontal: + aFont[codePoint].horizontalVariants = "h0 h1 h2 h3" + aFont[codePoint].horizontalComponents = \ + (("h2", False, 0, mathfont.em, 3 * mathfont.em), \ + ("h1", True, mathfont.em, mathfont.em, 2 * mathfont.em)) + else: + aFont[codePoint].verticalVariants = "v0 v1 v2 v3" + aFont[codePoint].verticalComponents = \ + (("v2", False, 0, mathfont.em, 3 * mathfont.em), \ + ("v1", True, mathfont.em, mathfont.em, 2 * mathfont.em)) + +# Retrieve the spec files. +inlineAxisOperatorsTXT = downloadWithProgressBar(InlineAxisOperatorsURL) +unicodeXML = downloadWithProgressBar(UnicodeXMLURL) + +# Extract the operator dictionary. +xsltTransform = etree.XSLT(etree.parse("./operator-dictionary.xsl")) + +# Put the operator dictionary into a Python structure. +inlineAxisOperators = {} +with open(inlineAxisOperatorsTXT, mode="r") as f: + for line in f: + hexaString = re.match("^U\+([0-9A-F]+)", line).group(1) + inlineAxisOperators[parseHexaNumber(hexaString)] = True + +operatorDictionary = {} +root = xsltTransform(etree.parse(unicodeXML)).getroot() +for entry in root: + characters = parseHexaSequence(entry.get("unicode")) + assert characters != (NonBreakingSpace) + key, value = buildKeyAndValueFrom(characters, entry.get("form")) + # There is no dictionary-specified minsize/maxsize values, so no need to + # parse them. + # The fence, separator and priority properties don't have any effect on math + # layout, so they are not added to the JSON file. + parseSpaces(value, entry, ["lspace", "rspace"]) + parseProperties(value, entry, ["stretchy", "symmetric", "largeop", + "movablelimits", "accent"]) + if (len(characters) == 1 and characters[0] in inlineAxisOperators): + value["horizontal"] = True + operatorDictionary[key] = value + +# Create entries for the non-breaking space in all forms in order to test the +# default for operators outside the official dictionary. +for form in ["infix", "prefix", "suffix"]: + key, value = buildKeyAndValueFrom(tuple([NonBreakingSpace]), form) + operatorDictionary[key] = value + +# Create a WOFF font with glyphs for all the operator strings. +font = mathfont.create("operators") + +# Set parameters for largeop and stretchy tests. +font.math.DisplayOperatorMinHeight = 2 * mathfont.em +font.math.MinConnectorOverlap = mathfont.em / 2 + +# Set parameters for accent tests so that we only have large gap when +# overscript is an accent. +font.math.UpperLimitBaselineRiseMin = 0 +font.math.StretchStackTopShiftUp = 0 +font.math.AccentBaseHeight = 2 * mathfont.em +font.math.OverbarVerticalGap = 0 + +createSizeVariants(font) +for key in operatorDictionary: + value = operatorDictionary[key] + for c in value["characters"]: + if c in font: + continue + if c == NonBreakingSpace: + g = font.createChar(c) + mathfont.drawRectangleGlyph(g, mathfont.em, mathfont.em / 3, 0) + else: + mathfont.createSquareGlyph(font, c) + createStretchy(font, c, c in inlineAxisOperators) +mathfont.save(font) + +# Generate the python file. +for key in operatorDictionary: + del operatorDictionary[key]["characters"] # Remove this temporary value. +JSON = { + "comment": "This file was automatically generated by operator-dictionary.py. Do not edit.", + "dictionary": operatorDictionary +} +with open('../support/operator-dictionary.json', 'w') as fp: + json.dump(JSON, fp, sort_keys=True, ensure_ascii=True)
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.xsl b/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.xsl new file mode 100644 index 0000000..d0009755 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.xsl
@@ -0,0 +1,76 @@ +<!-- -*- Mode: nXML; tab-width: 2; indent-tabs-mode: nil; -*- --> +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + + <xsl:strip-space elements="*"/> + + <xsl:template match="charlist"> + <root><xsl:apply-templates select="character"/></root> + </xsl:template> + + <xsl:template match="character"> + <xsl:if test="operator-dictionary"> + <xsl:for-each select="operator-dictionary"> + <entry> + + <xsl:attribute name="unicode"> + <xsl:value-of select="../@id"/> + </xsl:attribute> + + <xsl:attribute name="form"> + <xsl:value-of select="@form"/> + </xsl:attribute> + + <!-- begin operator-dictionary --> + <xsl:if test="@lspace"> + <xsl:attribute name="lspace"> + <xsl:value-of select="@lspace"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@rspace"> + <xsl:attribute name="rspace"> + <xsl:value-of select="@rspace"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@minsize"> + <xsl:attribute name="minsize"> + <xsl:value-of select="@minsize"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@*[.='true']"> + <xsl:attribute name="properties"> + <!-- largeop, movablelimits, stretchy, separator, accent, fence, + symmetric --> + <xsl:for-each select="@*[.='true']"> + <xsl:value-of select="name()"/> + <xsl:text> </xsl:text> + </xsl:for-each> + <xsl:if test="../unicodedata/@mirror = 'Y'"> + <xsl:text>mirrorable </xsl:text> + </xsl:if> + </xsl:attribute> + </xsl:if> + <xsl:if test="@priority"> + <xsl:attribute name="priority"> + <xsl:value-of select="@priority"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@linebreakstyle"> + <xsl:attribute name="linebreakstyle"> + <xsl:value-of select="@linebreakstyle"/> + </xsl:attribute> + </xsl:if> + <!-- end operator-dictionary --> + + <xsl:attribute name="description"> + <xsl:value-of select="../description"/> + </xsl:attribute> + + </entry> + </xsl:for-each> + </xsl:if> + </xsl:template> + +</xsl:stylesheet>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/utils/misc.py b/third_party/blink/web_tests/external/wpt/mathml/tools/utils/misc.py index e4d21d6..d877a91 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/utils/misc.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/utils/misc.py
@@ -6,6 +6,8 @@ except ImportError: from urllib2 import urlopen +UnicodeXMLURL = "https://mathml-refresh.github.io/xml-entities/unicode.xml" +InlineAxisOperatorsURL = "https://mathml-refresh.github.io/mathml-core/tables/inline-axis-operators.txt" MathMLAssociationCopyright = "Copyright (c) 2016 MathML Association" def downloadWithProgressBar(url, outputDirectory="./", forceDownload=False):
diff --git a/third_party/blink/web_tests/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt b/third_party/blink/web_tests/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt deleted file mode 100644 index da44251..0000000 --- a/third_party/blink/web_tests/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt +++ /dev/null
@@ -1,11 +0,0 @@ -This is a testharness.js-based test. -FAIL Test that transferToImageBitmap returns an ImageBitmap with correct width and height in a worker Cannot read property 'unreached_func' of undefined -PASS Test that transferToImageBitmap returns an ImageBitmap with correct color in a worker -PASS Test that call transferToImageBitmap twice returns an ImageBitmap with correct color in a worker -PASS Test that call transferToImageBitmap twice on a alpha-disabled context returns an ImageBitmap with correct color in a worker -PASS Test that transferToImageBitmap won't change context's property in a worker -PASS Test that call transferToImageBitmap preserves transform in a worker -PASS Test that call transferToImageBitmap on a detached OffscreenCanvas throws an exception in a worker -PASS Test that call transferToImageBitmap without a context throws an exception in a worker -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html b/third_party/blink/web_tests/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html index 530fa166..c1faecb 100644 --- a/third_party/blink/web_tests/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html +++ b/third_party/blink/web_tests/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html
@@ -127,7 +127,7 @@ } async_test(function(t) { - var worker = makeWorker(); + var worker = makeWorker(t); worker.addEventListener('message', t.step_func_done(function(msg) { assert_true(msg.data); }));
diff --git a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/mod_pywebsocket/headerparserhandler.py b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/mod_pywebsocket/headerparserhandler.py index dda43c9..06e76385 100644 --- a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/mod_pywebsocket/headerparserhandler.py +++ b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/mod_pywebsocket/headerparserhandler.py
@@ -201,7 +201,7 @@ request.log_error( 'mod_pywebsocket: Fallback to Apache', apache.APLOG_INFO) return apache.DECLINED - except dispatch.DispatchException, e: + except dispatch.DispatchException as e: request.log_error( 'mod_pywebsocket: Dispatch failed for error: %s' % e, apache.APLOG_INFO) @@ -217,14 +217,14 @@ try: handshake.do_handshake( request, _dispatcher, allowDraft75=allow_draft75) - except handshake.VersionException, e: + except handshake.VersionException as e: request.log_error( 'mod_pywebsocket: Handshake failed for version error: %s' % e, apache.APLOG_INFO) request.err_headers_out.add(common.SEC_WEBSOCKET_VERSION_HEADER, e.supported_versions) return apache.HTTP_BAD_REQUEST - except handshake.HandshakeException, e: + except handshake.HandshakeException as e: # Handshake for ws/wss failed. # Send http response with error status. request.log_error( @@ -235,10 +235,10 @@ handshake_is_done = True request._dispatcher = _dispatcher _dispatcher.transfer_data(request) - except handshake.AbortedByUserException, e: + except handshake.AbortedByUserException as e: request.log_error('mod_pywebsocket: Aborted: %s' % e, apache.APLOG_INFO) - except Exception, e: + except Exception as e: # DispatchException can also be thrown if something is wrong in # pywebsocket code. It's caught here, then.
diff --git a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/client_for_testing.py b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/client_for_testing.py index fb5a6cb..18d1857 100755 --- a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/client_for_testing.py +++ b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/client_for_testing.py
@@ -398,7 +398,7 @@ # Validate try: decoded_accept = base64.b64decode(accept) - except TypeError, e: + except TypeError as e: raise HandshakeException( 'Illegal value for header Sec-WebSocket-Accept: ' + accept) @@ -998,7 +998,7 @@ if use_tls: return _TLSSocket(s) return s - except socket.error, e: + except socket.error as e: if e.errno != errno.ECONNREFUSED: raise else: @@ -1063,7 +1063,7 @@ def assert_connection_closed(self): try: read_data = receive_bytes(self._socket, 1) - except Exception, e: + except Exception as e: if str(e).find( 'Connection closed before receiving requested length ') == 0: return
diff --git a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/mux_client_for_testing.py b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/mux_client_for_testing.py index dd5435a8..304e7fc9 100755 --- a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/mux_client_for_testing.py +++ b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/mux_client_for_testing.py
@@ -519,7 +519,7 @@ try: send_quota = self._channel_slots.popleft() - except IndexError, e: + except IndexError as e: raise Exception('No channel slots: %r' % e) # Create AddChannel request @@ -632,7 +632,7 @@ try: inner_frame = self._logical_channels[channel_id].queue.get( timeout=self._timeout) - except Queue.Empty, e: + except Queue.Empty as e: raise Exception('Cannot receive message from channel id %d' % channel_id) @@ -666,7 +666,7 @@ try: inner_frame = self._logical_channels[channel_id].queue.get( timeout=self._timeout) - except Queue.Empty, e: + except Queue.Empty as e: raise Exception('Cannot receive message from channel id %d' % channel_id) if inner_frame.opcode != client_for_testing.OPCODE_CLOSE:
diff --git a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_dispatch.py b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_dispatch.py index 9ca3d4f3..e16d605 100755 --- a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_dispatch.py +++ b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_dispatch.py
@@ -155,9 +155,9 @@ try: dispatcher.do_extra_handshake(request) self.fail('Could not catch HandshakeException with 403 status') - except handshake.HandshakeException, e: + except handshake.HandshakeException as e: self.assertEquals(403, e.status) - except Exception, e: + except Exception as e: self.fail('Unexpected exception: %r' % e) def test_abort_extra_handshake(self): @@ -212,7 +212,7 @@ try: dispatcher.transfer_data(request) self.fail() - except dispatch.DispatchException, e: + except dispatch.DispatchException as e: self.failUnless(str(e).find('No handler') != -1) except Exception: self.fail() @@ -225,7 +225,7 @@ try: dispatcher.transfer_data(request) self.fail() - except Exception, e: + except Exception as e: self.failUnless(str(e).find('Intentional') != -1, 'Unexpected exception: %s' % e)
diff --git a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_endtoend.py b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_endtoend.py index 5e5cf61..3680ec2 100755 --- a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_endtoend.py +++ b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_endtoend.py
@@ -304,9 +304,9 @@ try: client.connect() self.fail('Could not catch HttpStatusException') - except client_for_testing.HttpStatusException, e: + except client_for_testing.HttpStatusException as e: self.assertEqual(status, e.status) - except Exception, e: + except Exception as e: self.fail('Catch unexpected exception') finally: client.close_socket()
diff --git a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_handshake_hybi.py b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_handshake_hybi.py index d106677..d0aaf640 100755 --- a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_handshake_hybi.py +++ b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_handshake_hybi.py
@@ -507,10 +507,10 @@ try: handshaker.do_handshake() self.fail('No exception thrown for \'%s\' case' % case_name) - except HandshakeException, e: + except HandshakeException as e: self.assertTrue(expect_handshake_exception) self.assertEqual(expected_status, e.status) - except VersionException, e: + except VersionException as e: self.assertFalse(expect_handshake_exception)
diff --git a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_mux.py b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_mux.py index 3ce45cf..0773dec 100755 --- a/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_mux.py +++ b/third_party/blink/web_tests/external/wpt/tools/pywebsocket/test/test_mux.py
@@ -258,9 +258,9 @@ raise ValueError('Cannot handle path %r' % request.path) if not request.server_terminated: request.ws_stream.close_connection() - except ConnectionTerminatedException, e: + except ConnectionTerminatedException as e: self.channel_events[request.channel_id].exception = e - except Exception, e: + except Exception as e: self.channel_events[request.channel_id].exception = e raise
diff --git a/third_party/blink/web_tests/external/wpt/tools/wpt/run.py b/third_party/blink/web_tests/external/wpt/tools/wpt/run.py index b52137ec..bea36c7c 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wpt/run.py +++ b/third_party/blink/web_tests/external/wpt/tools/wpt/run.py
@@ -106,7 +106,7 @@ def check_environ(product): - if product not in ("chrome", "firefox", "firefox_android", "servo"): + if product not in ("android_webview", "chrome", "chrome_android", "firefox", "firefox_android", "servo"): config_builder = serve.build_config(os.path.join(wpt_root, "config.json")) # Override the ports to avoid looking for free ports config_builder.ssl = {"type": "none"}
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/android_webview.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/android_webview.py index 42ae8b64..168b7de 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/android_webview.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/android_webview.py
@@ -67,7 +67,8 @@ def env_options(): - return {} + # allow the use of host-resolver-rules in lieu of modifying /etc/hosts file + return {"server_host": "127.0.0.1"} #TODO: refactor common elements of SystemWebViewShell and ChromeAndroidBrowser
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/chrome_android.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/chrome_android.py index b8ebede..b3e1479 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/chrome_android.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/chrome_android.py
@@ -62,7 +62,8 @@ def env_options(): - return {} + # allow the use of host-resolver-rules in lieu of modifying /etc/hosts file + return {"server_host": "127.0.0.1"} class ChromeAndroidBrowser(Browser):
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/servodriver.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/servodriver.py index 54a22b4..ea345ef 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/servodriver.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/servodriver.py
@@ -63,7 +63,7 @@ def update_properties(): - return ["debug", "os", "processor"], {"os": ["version"], "processor": ["bits"]} + return (["debug", "os", "processor"], {"os": ["version"], "processor": ["bits"]}) def write_hosts_file(config):
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/base.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/base.py index b1e86ff..f581c5c 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/base.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/base.py
@@ -498,7 +498,7 @@ class ConnectionlessBaseProtocolPart(BaseProtocolPart): - def execute_script(self, script, async=False): + def execute_script(self, script, asynchronous=False): pass def set_timeout(self, timeout):
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executormarionette.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executormarionette.py index 832bb8f..77fe297 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executormarionette.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executormarionette.py
@@ -56,8 +56,8 @@ def setup(self): self.marionette = self.parent.marionette - def execute_script(self, script, async=False): - method = self.marionette.execute_async_script if async else self.marionette.execute_script + def execute_script(self, script, asynchronous=False): + method = self.marionette.execute_async_script if asynchronous else self.marionette.execute_script return method(script, new_sandbox=False, sandbox=None) def set_timeout(self, timeout): @@ -738,7 +738,7 @@ protocol.marionette.navigate(url) while True: result = protocol.base.execute_script( - self.script_resume % format_map, async=True) + self.script_resume % format_map, asynchronous=True) if result is None: # This can happen if we get an content process crash return None @@ -858,7 +858,7 @@ def _screenshot(self, protocol, url, timeout): protocol.marionette.navigate(url) - protocol.base.execute_script(self.wait_script, async=True) + protocol.base.execute_script(self.wait_script, asynchronous=True) screenshot = protocol.marionette.screenshot(full=False) # strip off the data:img/png, part of the url
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorselenium.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorselenium.py index 9a2d223..5246a26f 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorselenium.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorselenium.py
@@ -46,8 +46,8 @@ def setup(self): self.webdriver = self.parent.webdriver - def execute_script(self, script, async=False): - method = self.webdriver.execute_async_script if async else self.webdriver.execute_script + def execute_script(self, script, asynchronous=False): + method = self.webdriver.execute_async_script if asynchronous else self.webdriver.execute_script return method(script) def set_timeout(self, timeout): @@ -335,7 +335,7 @@ handler = CallbackHandler(self.logger, protocol, test_window) while True: result = protocol.base.execute_script( - self.script_resume % format_map, async=True) + self.script_resume % format_map, asynchronous=True) done, rv = handler(result) if done: break
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorservodriver.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorservodriver.py index 427d5b3..12a750f 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorservodriver.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorservodriver.py
@@ -67,7 +67,7 @@ class ServoBaseProtocolPart(BaseProtocolPart): - def execute_script(self, script, async=False): + def execute_script(self, script, asynchronous=False): pass def set_timeout(self, timeout):
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py index 99d4610..65b6723 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py
@@ -34,8 +34,8 @@ def setup(self): self.webdriver = self.parent.webdriver - def execute_script(self, script, async=False): - method = self.webdriver.execute_async_script if async else self.webdriver.execute_script + def execute_script(self, script, asynchronous=False): + method = self.webdriver.execute_async_script if asynchronous else self.webdriver.execute_script return method(script) def set_timeout(self, timeout): @@ -367,7 +367,7 @@ while True: result = protocol.base.execute_script( - self.script_resume % format_map, async=True) + self.script_resume % format_map, asynchronous=True) # As of 2019-03-29, WebDriver does not define expected behavior for # cases where the browser crashes during script execution: @@ -401,7 +401,7 @@ callback(true); } else { document.addEventListener("readystatechange", () => {if (document.readyState !== "loading") {callback(true)}}); -}""", async=True) +}""", asynchronous=True) except client.JavascriptErrorException: # We can get an error here if the script runs in the initial about:blank # document before it has navigated, with the driver returning an error
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/protocol.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/protocol.py index 7da59239..77a705ff 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/protocol.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/executors/protocol.py
@@ -109,11 +109,11 @@ name = "base" @abstractmethod - def execute_script(self, script, async=False): + def execute_script(self, script, asynchronous=False): """Execute javascript in the current Window. :param str script: The js source to execute. This is implicitly wrapped in a function. - :param bool async: Whether the script is asynchronous in the webdriver + :param bool asynchronous: Whether the script is asynchronous in the webdriver sense i.e. whether the return value is the result of the initial function call or if it waits for some callback. :returns: The result of the script execution.
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/manifestupdate.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/manifestupdate.py index 4753fde..a3d5581 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/manifestupdate.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/manifestupdate.py
@@ -1,6 +1,6 @@ from __future__ import print_function import os -from six.moves.urllib.parse import urljoin +from six.moves.urllib.parse import urljoin, urlsplit from collections import namedtuple, defaultdict, deque from math import ceil @@ -80,7 +80,8 @@ class ExpectedManifest(ManifestItem): - def __init__(self, node, test_path, url_base, run_info_properties): + def __init__(self, node, test_path, url_base, run_info_properties, + update_intermittent=False, remove_intermittent=False): """Object representing all the tests in a particular manifest :param node: AST Node associated with this object. If this is None, @@ -96,6 +97,12 @@ the key property e.g. {"foo": ["bar"]} means that we consider making conditions on bar only after we already made one on foo. + :param update_intermittent: When True, intermittent statuses will be recorded + as `expected` in the test metadata. + :param: remove_intermittent: When True, old intermittent statuses will be removed + if no longer intermittent. This is only relevant if + `update_intermittent` is also True, because if False, + the metadata will simply update one `expected`status. """ if node is None: node = DataNode(None) @@ -106,7 +113,8 @@ assert self.url_base is not None self._modified = False self.run_info_properties = run_info_properties - + self.update_intermittent = update_intermittent + self.remove_intermittent = remove_intermittent self.update_properties = UpdateProperties(self, **{ "lsan": LsanUpdate, "leak_object": LeakObjectUpdate, @@ -177,12 +185,10 @@ :param result: Total number of bytes leaked""" self.update_properties.leak_threshold.set(run_info, result) - def update(self, full_update, disable_intermittent, update_intermittent, remove_intermittent): + def update(self, full_update, disable_intermittent): for prop_update in self.update_properties: prop_update.update(full_update, - disable_intermittent, - update_intermittent, - remove_intermittent) + disable_intermittent) class TestNode(ManifestItem): @@ -210,9 +216,7 @@ :param test_type: The type of the test :param test_id: The id of the test""" - - url = test_id - name = url.rsplit("/", 1)[1] + name = test_id[len(urlsplit(test_id).path.rsplit("/", 1)[0]) + 1:] node = DataNode(name) self = cls(node) @@ -250,7 +254,6 @@ :param run_info: Dictionary of run_info parameters corresponding to this run :param result: Status of the test in this run""" - self.update_properties.expected.set(run_info, result) def set_asserts(self, run_info, count): @@ -278,12 +281,10 @@ self.append(subtest) return subtest - def update(self, full_update, disable_intermittent, update_intermittent, remove_intermittent): + def update(self, full_update, disable_intermittent): for prop_update in self.update_properties: prop_update.update(full_update, - disable_intermittent, - update_intermittent, - remove_intermittent) + disable_intermittent) class SubtestNode(TestNode): @@ -329,8 +330,8 @@ self.default_value = self.cls_default_value self.has_result = False self.results = defaultdict(lambda: defaultdict(int)) - self.update_intermittent = False - self.remove_intermittent = False + self.update_intermittent = self.node.root.update_intermittent + self.remove_intermittent = self.node.root.remove_intermittent def run_info_by_condition(self, run_info_index, conditions): run_info_by_condition = defaultdict(list) @@ -383,9 +384,7 @@ def update(self, full_update=False, - disable_intermittent=None, - update_intermittent=False, - remove_intermittent=False): + disable_intermittent=None): """Update the underlying manifest AST for this test based on all the added results. @@ -398,14 +397,6 @@ When `disable_intermittent` is not None, disable any test that shows multiple unexpected results for the same set of parameters. - - When `update_intermittent` is True, intermittent statuses will be recorded - as `expected` in the test metadata. - - When `remove_intermittent` is True, old intermittent statuses will be removed - if no longer intermittent. This is only relevant if `update_intermittent` is - also True, because if False, the metadata will simply update one `expected` - status. """ if not self.has_result: return @@ -414,9 +405,7 @@ self.results) conditions, errors = self.update_conditions(property_tree, - full_update, - update_intermittent, - remove_intermittent) + full_update) for e in errors: if disable_intermittent: @@ -457,9 +446,7 @@ def update_conditions(self, property_tree, - full_update, - update_intermittent, - remove_intermittent): + full_update): # This is complicated because the expected behaviour is complex # The complexity arises from the fact that there are two ways of running # the tool, with a full set of runs (full_update=True) or with partial metadata @@ -488,8 +475,6 @@ # * Otherwise add conditionals for the run_info that doesn't match any # remaining conditions prev_default = None - self.update_intermittent = update_intermittent - self.remove_intermittent = remove_intermittent current_conditions = self.node.get_conditions(self.property_name) @@ -503,8 +488,6 @@ # value for all run_info, proceed as for a full update if not current_conditions: return self._update_conditions_full(property_tree, - update_intermittent, - remove_intermittent, prev_default=prev_default) conditions = [] @@ -531,13 +514,12 @@ for item in dependent_props.itervalues(): update_properties |= set(dependent_props) for condition in current_conditions: - if (not condition.variables.issubset(update_properties) and - not run_info_by_condition[condition]): + if ((not condition.variables.issubset(update_properties) and + not run_info_by_condition[condition])): conditions.append((condition.condition_node, self.from_ini_value(condition.value))) + new_conditions, errors = self._update_conditions_full(property_tree, - update_intermittent, - remove_intermittent, prev_default=prev_default) conditions.extend(new_conditions) return conditions, errors @@ -578,8 +560,6 @@ new_conditions, new_errors = self.build_tree_conditions(property_tree, run_info_with_condition, - update_intermittent, - remove_intermittent, prev_default) if new_conditions: self.node.modified = True @@ -591,14 +571,10 @@ def _update_conditions_full(self, property_tree, - update_intermittent, - remove_intermittent, prev_default=None): self.node.modified = True conditions, errors = self.build_tree_conditions(property_tree, set(), - update_intermittent, - remove_intermittent, prev_default) return conditions, errors @@ -606,15 +582,10 @@ def build_tree_conditions(self, property_tree, run_info_with_condition, - update_intermittent, - remove_intermittent, prev_default=None): conditions = [] errors = [] - self.update_intermittent = update_intermittent - self.remove_intermittent = remove_intermittent - value_count = defaultdict(int) def to_count_value(v): @@ -699,10 +670,22 @@ self.default_value = result.default_expected def from_result_value(self, result): - return result.status + # When we are updating intermittents, we need to keep a record of any existing + # intermittents to pass on when building the property tree and matching statuses and + # intermittents to the correct run info - this is so we can add them back into the + # metadata aligned with the right conditions, unless specified not to with + # self.remove_intermittent. + # The (status, known_intermittent) tuple is counted when the property tree is built, but + # the count value only applies to the first item in the tuple, the status from that run, + # when passed to `updated_value`. + if (not self.update_intermittent or + self.remove_intermittent or + not result.known_intermittent): + return result.status + return result.status + result.known_intermittent def to_ini_value(self, value): - if isinstance(value, list): + if isinstance(value, (list, tuple)): return [str(item) for item in value] return str(value) @@ -710,21 +693,31 @@ if len(new) > 1 and not self.update_intermittent and not isinstance(current, list): raise ConditionError - if not (self.update_intermittent or isinstance(current, list)): - return list(new)[0] + counts = {} + for status, count in new.iteritems(): + if isinstance(status, tuple): + counts[status[0]] = count + counts.update({intermittent: 0 for intermittent in status[1:] if intermittent not in counts}) + else: + counts[status] = count + if not (self.update_intermittent or isinstance(current, list)): + return list(counts)[0] + + # Reorder statuses first based on counts, then based on status priority if there are ties. + # Counts with 0 are considered intermittent. statuses = ["OK", "PASS", "FAIL", "ERROR", "TIMEOUT", "CRASH"] status_priority = {value: i for i, value in enumerate(statuses)} - sorted_new = sorted(new.iteritems(), key=lambda x:(-1 * x[1], + sorted_new = sorted(counts.iteritems(), key=lambda x:(-1 * x[1], status_priority.get(x[0], len(status_priority)))) - expected = [status for status, _ in sorted_new] + expected = [] + for status, count in sorted_new: + # If we are not removing existing recorded intermittents, with a count of 0, + # add them in to expected. + if count > 0 or not self.remove_intermittent: + expected.append(status) if self.update_intermittent: - if not self.remove_intermittent: - # If we are not removing existing recorded intermittents that don't - # appear in new, manually add them back in to expected. - if isinstance(current, list): - expected.extend([status for status in current if status not in expected]) if len(expected) == 1: return expected[0] return expected @@ -733,6 +726,7 @@ # intermittent. if set(expected).issubset(set(current)): return current + # If we are not updating intermittents, return the status with the highest occurence. return expected[0] @@ -922,10 +916,12 @@ node = ListNode() for item in value: node.append(make_node(item)) + else: + raise ValueError("Don't know how to convert %s into node" % type(value)) return node -def get_manifest(metadata_root, test_path, url_base, run_info_properties): +def get_manifest(metadata_root, test_path, url_base, run_info_properties, update_intermittent, remove_intermittent): """Get the ExpectedManifest for a particular test path, or None if there is no metadata stored for that test path. @@ -936,15 +932,17 @@ try: with open(manifest_path) as f: rv = compile(f, test_path, url_base, - run_info_properties) + run_info_properties, update_intermittent, remove_intermittent) except IOError: return None return rv -def compile(manifest_file, test_path, url_base, run_info_properties): +def compile(manifest_file, test_path, url_base, run_info_properties, update_intermittent, remove_intermittent): return conditional.compile(manifest_file, data_cls_getter=data_cls_getter, test_path=test_path, url_base=url_base, - run_info_properties=run_info_properties) + run_info_properties=run_info_properties, + update_intermittent=update_intermittent, + remove_intermittent=remove_intermittent)
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/metadata.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/metadata.py index c614cba..42f3b00d 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/metadata.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/metadata.py
@@ -4,6 +4,7 @@ from collections import defaultdict, namedtuple from mozlog import structuredlog +from six.moves import intern from . import manifestupdate from . import testloader @@ -56,8 +57,16 @@ """Update the metadata files for web-platform-tests based on the results obtained in a previous run or runs - If disable_intermittent is not None, assume log_file_names refers to logs from repeated - test jobs, disable tests that don't behave as expected on all runs""" + If `disable_intermittent` is not None, assume log_file_names refers to logs from repeated + test jobs, disable tests that don't behave as expected on all runs + + If `update_intermittent` is True, intermittent statuses will be recorded as `expected` in + the metadata. + + If `remove_intermittent` is True and used in conjunction with `update_intermittent`, any + intermittent statuses which are not present in the current run will be removed from the + metadata, else they are left in.""" + do_delayed_imports(serve_root) id_test_map = load_test_data(test_paths) @@ -206,6 +215,41 @@ status_intern = InternedData(4) +def pack_result(data): + # As `status_intern` normally handles one status, if `known_intermittent` is present in + # the test logs, intern and store this with the `status` in an array until needed. + if not data.get("known_intermittent"): + return status_intern.store(data.get("status")) + result = array.array("B") + result_parts = ([data["status"], data.get("expected", data["status"])] + + data["known_intermittent"]) + for i, part in enumerate(result_parts): + value = status_intern.store(part) + if i % 2 == 0: + assert value < 16 + result.append(value << 4) + else: + result[-1] += value + return result + + +def unpack_result(data): + if isinstance(data, int): + return (status_intern.get(data), None) + if isinstance(data, unicode): + return (data, None) + # Unpack multiple statuses into a tuple to be used in the Results named tuple below, + # separating `status` and `known_intermittent`. + results = [] + for packed_value in data: + first = status_intern.get(packed_value >> 4) + second = status_intern.get(packed_value & 0x0F) + results.append(first) + if second: + results.append(second) + return ((results[0],), tuple(results[1:])) + + def load_test_data(test_paths): manifest_loader = testloader.ManifestLoader(test_paths, False) manifests = manifest_loader.load() @@ -228,7 +272,8 @@ updater.update_from_log(f) for item in update_results(id_test_map, update_properties, full_update, - disable_intermittent, update_intermittent, remove_intermittent): + disable_intermittent, update_intermittent=update_intermittent, + remove_intermittent=remove_intermittent): yield item @@ -236,8 +281,8 @@ update_properties, full_update, disable_intermittent, - update_intermittent=False, - remove_intermittent=False): + update_intermittent, + remove_intermittent): test_file_items = set(id_test_map.itervalues()) default_expected_by_type = {} @@ -249,8 +294,8 @@ for test_file in test_file_items: updated_expected = test_file.update(default_expected_by_type, update_properties, - full_update, disable_intermittent, - update_intermittent, remove_intermittent) + full_update, disable_intermittent, update_intermittent, + remove_intermittent) if updated_expected is not None and updated_expected.modified: yield test_file.metadata_path, updated_expected @@ -386,7 +431,7 @@ self.tests_visited[test_id].add(subtest) - result = status_intern.store(data["status"]) + result = pack_result(data) test_data.set(test_id, subtest, "status", self.run_info, result) if data.get("expected") and data["expected"] != data["status"]: @@ -401,10 +446,10 @@ if test_data is None: return - result = status_intern.store(data["status"]) + result = pack_result(data) test_data.set(test_id, None, "status", self.run_info, result) - if data.get("expected") and data["status"] != data["expected"]: + if data.get("expected") and data["expected"] != data["status"]: test_data.set_requires_update() del self.tests_visited[test_id] @@ -509,7 +554,7 @@ def append(self, prop, run_info, value): out_val = (prop << 12) + run_info - if prop == prop_intern.store("status"): + if prop == prop_intern.store("status") and isinstance(value, int): out_val += value << 8 else: if not hasattr(self, "raw_data"): @@ -560,16 +605,20 @@ run_info, value) - def expected(self, update_properties): + def expected(self, update_properties, update_intermittent, remove_intermittent): expected_data = load_expected(self.url_base, self.metadata_path, self.test_path, self.tests, - update_properties) + update_properties, + update_intermittent, + remove_intermittent) if expected_data is None: expected_data = create_expected(self.url_base, self.test_path, - update_properties) + update_properties, + update_intermittent, + remove_intermittent) return expected_data def is_disabled(self, test): @@ -602,7 +651,9 @@ if not self.requires_update and not full_update: return - expected = self.expected(update_properties) + expected = self.expected(update_properties, + update_intermittent=update_intermittent, + remove_intermittent=remove_intermittent) if full_update: orphans = self.orphan_subtests(expected) @@ -638,8 +689,11 @@ continue if prop == "status": - value = Result(value, default_expected_by_type[self.item_type, - subtest_id is not None]) + status, known_intermittent = unpack_result(value) + value = Result(status, + known_intermittent, + default_expected_by_type[self.item_type, + subtest_id is not None]) test_expected = expected_by_test[test_id] if subtest_id is None: @@ -654,37 +708,35 @@ item_expected.set_asserts(run_info, value) expected.update(full_update=full_update, - disable_intermittent=disable_intermittent, - update_intermittent=update_intermittent, - remove_intermittent=remove_intermittent) + disable_intermittent=disable_intermittent) for test in expected.iterchildren(): for subtest in test.iterchildren(): subtest.update(full_update=full_update, - disable_intermittent=disable_intermittent, - update_intermittent=update_intermittent, - remove_intermittent=remove_intermittent) + disable_intermittent=disable_intermittent) test.update(full_update=full_update, - disable_intermittent=disable_intermittent, - update_intermittent=update_intermittent, - remove_intermittent=remove_intermittent) + disable_intermittent=disable_intermittent) return expected -Result = namedtuple("Result", ["status", "default_expected"]) +Result = namedtuple("Result", ["status", "known_intermittent", "default_expected"]) -def create_expected(url_base, test_path, run_info_properties): +def create_expected(url_base, test_path, run_info_properties, update_intermittent, remove_intermittent): expected = manifestupdate.ExpectedManifest(None, test_path, url_base, - run_info_properties) + run_info_properties, + update_intermittent, + remove_intermittent) return expected -def load_expected(url_base, metadata_path, test_path, tests, run_info_properties): +def load_expected(url_base, metadata_path, test_path, tests, run_info_properties, update_intermittent, remove_intermittent): expected_manifest = manifestupdate.get_manifest(metadata_path, test_path, url_base, - run_info_properties) + run_info_properties, + update_intermittent, + remove_intermittent) return expected_manifest
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/idlharness.window-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/idlharness.window-expected.txt index 75523c9..793616d 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/idlharness.window-expected.txt +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/idlharness.window-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 54 tests; 45 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 54 tests; 46 PASS, 8 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS Animation interface. PASS Animation interface: existence and properties of interface object PASS Animation interface object length @@ -9,7 +9,7 @@ PASS Animation interface: existence and properties of interface prototype object's @@unscopables property PASS Animation interface: attribute id PASS Animation interface: attribute effect -FAIL Animation interface: attribute timeline assert_equals: setter must be function for PutForwards, Replaceable, or non-readonly attributes expected "function" but got "undefined" +PASS Animation interface: attribute timeline PASS Animation interface: attribute startTime PASS Animation interface: attribute currentTime PASS Animation interface: attribute playbackRate
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/idlharness.window-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/idlharness.window-expected.txt index 8c8f9cb..461f7f2 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/idlharness.window-expected.txt +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/KeyframeEffect/idlharness.window-expected.txt
@@ -7,14 +7,12 @@ PASS KeyframeEffect interface: existence and properties of interface prototype object's "constructor" property PASS KeyframeEffect interface: existence and properties of interface prototype object's @@unscopables property PASS KeyframeEffect interface: attribute target -FAIL KeyframeEffect interface: attribute iterationComposite assert_true: The prototype object must have a property "iterationComposite" expected true got false PASS KeyframeEffect interface: attribute composite PASS KeyframeEffect interface: operation getKeyframes() PASS KeyframeEffect interface: operation setKeyframes(object) PASS KeyframeEffect must be primary interface of new KeyframeEffect(null, null) PASS Stringification of new KeyframeEffect(null, null) FAIL KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "target" with the proper type Unrecognized type Element -FAIL KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "iterationComposite" with the proper type assert_inherits: property "iterationComposite" not found in prototype chain PASS KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "composite" with the proper type PASS KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "getKeyframes()" with the proper type PASS KeyframeEffect interface: new KeyframeEffect(null, null) must inherit property "setKeyframes(object)" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any-expected.txt b/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any-expected.txt new file mode 100644 index 0000000..312acbc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +FAIL Create Secure WebSocket - wsocket.extensions should be set to '' after connection is established - Connection should be opened assert_equals: extensions should be empty expected "" but got "permessage-deflate" +PASS Create Secure WebSocket - wsocket.extensions should be set to '' after connection is established - Connection should be closed +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any.js b/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any.js index 0a2d883..bff3d1a 100644 --- a/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any.js +++ b/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any.js
@@ -7,15 +7,13 @@ var wsocket = CreateWebSocket(true, false, false); var isOpenCalled = false; -wsocket.addEventListener('open', testOpen.step_func(function(evt) { - assert_equals(wsocket.extensions, "", "extensions should be empty"); +wsocket.addEventListener('open', testOpen.step_func_done(function(evt) { wsocket.close(); isOpenCalled = true; - testOpen.done(); + assert_equals(wsocket.extensions, "", "extensions should be empty"); }), true); -wsocket.addEventListener('close', testClose.step_func(function(evt) { +wsocket.addEventListener('close', testClose.step_func_done(function(evt) { assert_true(isOpenCalled, "WebSocket connection should be closed"); assert_equals(evt.wasClean, true, "wasClean should be true"); - testClose.done(); }), true);
diff --git a/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any.worker-expected.txt new file mode 100644 index 0000000..312acbc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/websockets/Create-Secure-extensions-empty.any.worker-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +FAIL Create Secure WebSocket - wsocket.extensions should be set to '' after connection is established - Connection should be opened assert_equals: extensions should be empty expected "" but got "permessage-deflate" +PASS Create Secure WebSocket - wsocket.extensions should be set to '' after connection is established - Connection should be closed +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/mojo/bindings-lite.html b/third_party/blink/web_tests/mojo/bindings-lite.html index 8e5af734..8e7133cf 100644 --- a/third_party/blink/web_tests/mojo/bindings-lite.html +++ b/third_party/blink/web_tests/mojo/bindings-lite.html
@@ -18,6 +18,7 @@ poke() { this.numPokes++; } ping() { return Promise.resolve(); } repeat(message, numbers) { return {message: message, numbers: numbers}; } + echo(nested) { return Promise.resolve({nested: nested}); } flatten(values) {} flattenUnions(unions) {} requestSubinterface(request, client) {} @@ -42,6 +43,14 @@ }); }, 'implementations can reply with multiple reply arguments'); +promise_test(() => { + let impl = new TargetImpl; + let remote = impl.target.$.bindNewPipeAndPassRemote(); + const enumValue = liteJsTest.mojom.TestMessageTarget_NestedEnum.kFoo; + return remote.echo(enumValue) + .then(({nested}) => assert_equals(nested, enumValue)); +}, 'nested enums are usable as arguments and responses.'); + promise_test(async (t) => { const impl = new TargetImpl; const remote = impl.target.$.bindNewPipeAndPassRemote();
diff --git a/third_party/fontconfig/README.chromium b/third_party/fontconfig/README.chromium index 69f7c400..bea5464f 100644 --- a/third_party/fontconfig/README.chromium +++ b/third_party/fontconfig/README.chromium
@@ -1,6 +1,6 @@ Name: fontconfig URL: http://www.freedesktop.org/wiki/Software/fontconfig/ -Version: ba206df9b9a7ca300265f650842c1459ff7c634a +Version: 65087ac7ce4cc5f2109967c1380b474955dcb590 License: MIT License File: src/COPYING Security Critical: yes
diff --git a/third_party/fontconfig/include/config.h b/third_party/fontconfig/include/config.h index 52938df1..9087ca0 100644 --- a/third_party/fontconfig/include/config.h +++ b/third_party/fontconfig/include/config.h
@@ -73,7 +73,7 @@ #define HAVE_FSTATVFS 1 /* Define to 1 if you have the `FT_Done_MM_Var' function. */ -/* #undef HAVE_FT_DONE_MM_VAR */ +#define HAVE_FT_DONE_MM_VAR 1 /* Define to 1 if you have the `FT_Get_BDF_Property' function. */ #define HAVE_FT_GET_BDF_PROPERTY 1 @@ -270,7 +270,7 @@ #define PACKAGE_NAME "fontconfig" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "fontconfig 2.13.1" +#define PACKAGE_STRING "fontconfig 2.13.91" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "fontconfig" @@ -279,7 +279,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "2.13.1" +#define PACKAGE_VERSION "2.13.91" /* Define to necessary symbol if this constant uses a non-standard name on your system. */ @@ -332,7 +332,7 @@ /* Version number of package */ -#define VERSION "2.13.1" +#define VERSION "2.13.91" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/third_party/fontconfig/include/fc-case/fccase.h b/third_party/fontconfig/include/fc-case/fccase.h index 9cc0b9f..62d9bba 100644 --- a/third_party/fontconfig/include/fc-case/fccase.h +++ b/third_party/fontconfig/include/fc-case/fccase.h
@@ -22,7 +22,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -#define FC_NUM_CASE_FOLD 291 +#define FC_NUM_CASE_FOLD 295 #define FC_NUM_CASE_FOLD_CHARS 471 #define FC_MAX_CASE_FOLD_CHARS 6 #define FC_MAX_CASE_FOLD_EXPAND 4 @@ -300,7 +300,11 @@ { 0x0000a7b1, FC_CASE_FOLD_RANGE, 0x0001, 23254 }, { 0x0000a7b2, FC_CASE_FOLD_RANGE, 0x0001, 23275 }, { 0x0000a7b3, FC_CASE_FOLD_RANGE, 0x0001, 928 }, - { 0x0000a7b4, FC_CASE_FOLD_EVEN_ODD, 0x0005, 1 }, + { 0x0000a7b4, FC_CASE_FOLD_EVEN_ODD, 0x000b, 1 }, + { 0x0000a7c2, FC_CASE_FOLD_EVEN_ODD, 0x0001, 1 }, + { 0x0000a7c4, FC_CASE_FOLD_RANGE, 0x0001, -48 }, + { 0x0000a7c5, FC_CASE_FOLD_RANGE, 0x0001, 23229 }, + { 0x0000a7c6, FC_CASE_FOLD_RANGE, 0x0001, 30152 }, { 0x0000ab70, FC_CASE_FOLD_RANGE, 0x0050, 26672 }, { 0x0000fb00, FC_CASE_FOLD_FULL, 0x0002, 435 }, { 0x0000fb01, FC_CASE_FOLD_FULL, 0x0002, 437 },
diff --git a/third_party/fontconfig/include/src/fcobjshash.h b/third_party/fontconfig/include/src/fcobjshash.h index 867a369..7d1aa686 100644 --- a/third_party/fontconfig/include/src/fcobjshash.h +++ b/third_party/fontconfig/include/src/fcobjshash.h
@@ -1,6 +1,6 @@ /* ANSI-C code produced by gperf version 3.1 */ /* Command-line: gperf --pic -m 100 fcobjshash.gperf */ -/* Computed positions: -k'2-3' */ +/* Computed positions: -k'3,5' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ @@ -37,7 +37,7 @@ int id; }; #include <string.h> -/* maximum key range = 65, duplicates = 0 */ +/* maximum key range = 56, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -51,141 +51,155 @@ { static const unsigned char asso_values[] = { - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 9, 21, 18, - 33, 21, 69, 6, 36, 0, 69, 69, 0, 24, - 9, 0, 21, 69, 33, 15, 18, 0, 69, 69, - 0, 21, 6, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69 + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 2, 30, 4, + 16, 29, 28, 48, 12, 2, 61, 61, 3, 19, + 14, 30, 9, 61, 32, 12, 6, 33, 22, 11, + 32, 5, 2, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61 }; - return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[1]]; + register unsigned int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[4]]; + /*FALLTHROUGH*/ + case 4: + case 3: + hval += asso_values[(unsigned char)str[2]]; + break; + } + return hval; } struct FcObjectTypeNamePool_t { - char FcObjectTypeNamePool_str4[sizeof("file")]; - char FcObjectTypeNamePool_str5[sizeof("color")]; - char FcObjectTypeNamePool_str7[sizeof("foundry")]; - char FcObjectTypeNamePool_str8[sizeof("fullname")]; - char FcObjectTypeNamePool_str9[sizeof("pixelsize")]; - char FcObjectTypeNamePool_str10[sizeof("size")]; - char FcObjectTypeNamePool_str12[sizeof("fullnamelang")]; - char FcObjectTypeNamePool_str13[sizeof("globaladvance")]; - char FcObjectTypeNamePool_str14[sizeof("slant")]; - char FcObjectTypeNamePool_str16[sizeof("hinting")]; - char FcObjectTypeNamePool_str17[sizeof("minspace")]; - char FcObjectTypeNamePool_str18[sizeof("hintstyle")]; - char FcObjectTypeNamePool_str19[sizeof("fontformat")]; - char FcObjectTypeNamePool_str20[sizeof("fontversion")]; - char FcObjectTypeNamePool_str21[sizeof("fontfeatures")]; - char FcObjectTypeNamePool_str22[sizeof("lang")]; - char FcObjectTypeNamePool_str23[sizeof("fontvariations")]; - char FcObjectTypeNamePool_str24[sizeof("dpi")]; - char FcObjectTypeNamePool_str25[sizeof("outline")]; + char FcObjectTypeNamePool_str5[sizeof("dpi")]; + char FcObjectTypeNamePool_str6[sizeof("size")]; + char FcObjectTypeNamePool_str7[sizeof("file")]; + char FcObjectTypeNamePool_str11[sizeof("spacing")]; + char FcObjectTypeNamePool_str12[sizeof("scalable")]; + char FcObjectTypeNamePool_str13[sizeof("slant")]; + char FcObjectTypeNamePool_str14[sizeof("matrix")]; + char FcObjectTypeNamePool_str15[sizeof("outline")]; + char FcObjectTypeNamePool_str16[sizeof("hash")]; + char FcObjectTypeNamePool_str17[sizeof("antialias")]; + char FcObjectTypeNamePool_str18[sizeof("lang")]; + char FcObjectTypeNamePool_str19[sizeof("aspect")]; + char FcObjectTypeNamePool_str20[sizeof("weight")]; + char FcObjectTypeNamePool_str21[sizeof("charset")]; + char FcObjectTypeNamePool_str22[sizeof("charwidth")]; + char FcObjectTypeNamePool_str23[sizeof("hinting")]; + char FcObjectTypeNamePool_str24[sizeof("charheight")]; + char FcObjectTypeNamePool_str25[sizeof("fullname")]; char FcObjectTypeNamePool_str26[sizeof("autohint")]; - char FcObjectTypeNamePool_str27[sizeof("weight")]; - char FcObjectTypeNamePool_str28[sizeof("hash")]; - char FcObjectTypeNamePool_str29[sizeof("postscriptname")]; - char FcObjectTypeNamePool_str31[sizeof("rgba")]; - char FcObjectTypeNamePool_str32[sizeof("scale")]; - char FcObjectTypeNamePool_str33[sizeof("matrix")]; - char FcObjectTypeNamePool_str34[sizeof("rasterizer")]; - char FcObjectTypeNamePool_str35[sizeof("scalable")]; - char FcObjectTypeNamePool_str36[sizeof("antialias")]; - char FcObjectTypeNamePool_str37[sizeof("spacing")]; - char FcObjectTypeNamePool_str38[sizeof("width")]; - char FcObjectTypeNamePool_str39[sizeof("family")]; - char FcObjectTypeNamePool_str40[sizeof("capability")]; - char FcObjectTypeNamePool_str41[sizeof("namelang")]; - char FcObjectTypeNamePool_str42[sizeof("aspect")]; - char FcObjectTypeNamePool_str43[sizeof("familylang")]; - char FcObjectTypeNamePool_str44[sizeof("style")]; - char FcObjectTypeNamePool_str46[sizeof("prgname")]; - char FcObjectTypeNamePool_str47[sizeof("index")]; - char FcObjectTypeNamePool_str48[sizeof("stylelang")]; - char FcObjectTypeNamePool_str49[sizeof("decorative")]; - char FcObjectTypeNamePool_str50[sizeof("variable")]; - char FcObjectTypeNamePool_str51[sizeof("symbol")]; - char FcObjectTypeNamePool_str52[sizeof("charset")]; - char FcObjectTypeNamePool_str53[sizeof("embolden")]; - char FcObjectTypeNamePool_str54[sizeof("charwidth")]; - char FcObjectTypeNamePool_str55[sizeof("charheight")]; - char FcObjectTypeNamePool_str59[sizeof("embeddedbitmap")]; - char FcObjectTypeNamePool_str60[sizeof("lcdfilter")]; - char FcObjectTypeNamePool_str68[sizeof("verticallayout")]; + char FcObjectTypeNamePool_str27[sizeof("lcdfilter")]; + char FcObjectTypeNamePool_str28[sizeof("family")]; + char FcObjectTypeNamePool_str29[sizeof("fullnamelang")]; + char FcObjectTypeNamePool_str30[sizeof("namelang")]; + char FcObjectTypeNamePool_str31[sizeof("minspace")]; + char FcObjectTypeNamePool_str32[sizeof("familylang")]; + char FcObjectTypeNamePool_str33[sizeof("width")]; + char FcObjectTypeNamePool_str34[sizeof("rgba")]; + char FcObjectTypeNamePool_str35[sizeof("hintstyle")]; + char FcObjectTypeNamePool_str36[sizeof("scale")]; + char FcObjectTypeNamePool_str37[sizeof("fonthashint")]; + char FcObjectTypeNamePool_str38[sizeof("postscriptname")]; + char FcObjectTypeNamePool_str39[sizeof("style")]; + char FcObjectTypeNamePool_str40[sizeof("color")]; + char FcObjectTypeNamePool_str41[sizeof("embolden")]; + char FcObjectTypeNamePool_str42[sizeof("variable")]; + char FcObjectTypeNamePool_str43[sizeof("stylelang")]; + char FcObjectTypeNamePool_str44[sizeof("pixelsize")]; + char FcObjectTypeNamePool_str45[sizeof("globaladvance")]; + char FcObjectTypeNamePool_str46[sizeof("decorative")]; + char FcObjectTypeNamePool_str47[sizeof("fontversion")]; + char FcObjectTypeNamePool_str48[sizeof("verticallayout")]; + char FcObjectTypeNamePool_str49[sizeof("capability")]; + char FcObjectTypeNamePool_str50[sizeof("fontvariations")]; + char FcObjectTypeNamePool_str51[sizeof("rasterizer")]; + char FcObjectTypeNamePool_str52[sizeof("fontformat")]; + char FcObjectTypeNamePool_str53[sizeof("index")]; + char FcObjectTypeNamePool_str54[sizeof("fontfeatures")]; + char FcObjectTypeNamePool_str55[sizeof("symbol")]; + char FcObjectTypeNamePool_str56[sizeof("foundry")]; + char FcObjectTypeNamePool_str57[sizeof("prgname")]; + char FcObjectTypeNamePool_str60[sizeof("embeddedbitmap")]; }; static const struct FcObjectTypeNamePool_t FcObjectTypeNamePool_contents = { - "file", - "color", - "foundry", - "fullname", - "pixelsize", - "size", - "fullnamelang", - "globaladvance", - "slant", - "hinting", - "minspace", - "hintstyle", - "fontformat", - "fontversion", - "fontfeatures", - "lang", - "fontvariations", "dpi", - "outline", - "autohint", - "weight", - "hash", - "postscriptname", - "rgba", - "scale", - "matrix", - "rasterizer", - "scalable", - "antialias", + "size", + "file", "spacing", - "width", - "family", - "capability", - "namelang", + "scalable", + "slant", + "matrix", + "outline", + "hash", + "antialias", + "lang", "aspect", - "familylang", - "style", - "prgname", - "index", - "stylelang", - "decorative", - "variable", - "symbol", + "weight", "charset", - "embolden", "charwidth", + "hinting", "charheight", - "embeddedbitmap", + "fullname", + "autohint", "lcdfilter", - "verticallayout" + "family", + "fullnamelang", + "namelang", + "minspace", + "familylang", + "width", + "rgba", + "hintstyle", + "scale", + "fonthashint", + "postscriptname", + "style", + "color", + "embolden", + "variable", + "stylelang", + "pixelsize", + "globaladvance", + "decorative", + "fontversion", + "verticallayout", + "capability", + "fontvariations", + "rasterizer", + "fontformat", + "index", + "fontfeatures", + "symbol", + "foundry", + "prgname", + "embeddedbitmap" }; #define FcObjectTypeNamePool ((const char *) &FcObjectTypeNamePool_contents) const struct FcObjectTypeInfo * @@ -193,123 +207,120 @@ { enum { - TOTAL_KEYWORDS = 50, + TOTAL_KEYWORDS = 51, MIN_WORD_LENGTH = 3, MAX_WORD_LENGTH = 14, - MIN_HASH_VALUE = 4, - MAX_HASH_VALUE = 68 + MIN_HASH_VALUE = 5, + MAX_HASH_VALUE = 60 }; static const struct FcObjectTypeInfo wordlist[] = { - {-1}, {-1}, {-1}, {-1}, -#line 38 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str4,FC_FILE_OBJECT}, -#line 64 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str5,FC_COLOR_OBJECT}, - {-1}, -#line 31 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str7,FC_FOUNDRY_OBJECT}, -#line 22 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str8,FC_FULLNAME_OBJECT}, -#line 29 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str9,FC_PIXEL_SIZE_OBJECT}, -#line 27 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str10,FC_SIZE_OBJECT}, - {-1}, -#line 23 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str12,FC_FULLNAMELANG_OBJECT}, -#line 37 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str13,FC_GLOBAL_ADVANCE_OBJECT}, -#line 24 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str14,FC_SLANT_OBJECT}, - {-1}, -#line 34 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str16,FC_HINTING_OBJECT}, -#line 46 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str17,FC_MINSPACE_OBJECT}, -#line 33 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str18,FC_HINT_STYLE_OBJECT}, -#line 54 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str19,FC_FONTFORMAT_OBJECT}, -#line 52 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str20,FC_FONTVERSION_OBJECT}, -#line 60 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str21,FC_FONT_FEATURES_OBJECT}, -#line 51 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str22,FC_LANG_OBJECT}, -#line 66 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str23,FC_FONT_VARIATIONS_OBJECT}, + {-1}, {-1}, {-1}, {-1}, {-1}, #line 43 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str24,FC_DPI_OBJECT}, + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str5,FC_DPI_OBJECT}, +#line 27 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str6,FC_SIZE_OBJECT}, +#line 38 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str7,FC_FILE_OBJECT}, + {-1}, {-1}, {-1}, +#line 30 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str11,FC_SPACING_OBJECT}, +#line 42 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str12,FC_SCALABLE_OBJECT}, +#line 24 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str13,FC_SLANT_OBJECT}, +#line 49 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str14,FC_MATRIX_OBJECT}, #line 41 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str25,FC_OUTLINE_OBJECT}, + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str15,FC_OUTLINE_OBJECT}, +#line 62 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str16,FC_HASH_OBJECT}, +#line 32 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str17,FC_ANTIALIAS_OBJECT}, +#line 51 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str18,FC_LANG_OBJECT}, +#line 28 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str19,FC_ASPECT_OBJECT}, +#line 25 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str20,FC_WEIGHT_OBJECT}, +#line 50 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str21,FC_CHARSET_OBJECT}, +#line 47 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str22,FC_CHARWIDTH_OBJECT}, +#line 34 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str23,FC_HINTING_OBJECT}, +#line 48 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str24,FC_CHAR_HEIGHT_OBJECT}, +#line 22 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str25,FC_FULLNAME_OBJECT}, #line 36 "fcobjshash.gperf" {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str26,FC_AUTOHINT_OBJECT}, -#line 25 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str27,FC_WEIGHT_OBJECT}, -#line 62 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str28,FC_HASH_OBJECT}, -#line 63 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str29,FC_POSTSCRIPT_NAME_OBJECT}, - {-1}, -#line 44 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str31,FC_RGBA_OBJECT}, -#line 45 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str32,FC_SCALE_OBJECT}, -#line 49 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str33,FC_MATRIX_OBJECT}, -#line 40 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str34,FC_RASTERIZER_OBJECT}, -#line 42 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str35,FC_SCALABLE_OBJECT}, -#line 32 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str36,FC_ANTIALIAS_OBJECT}, -#line 30 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str37,FC_SPACING_OBJECT}, -#line 26 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str38,FC_WIDTH_OBJECT}, -#line 18 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str39,FC_FAMILY_OBJECT}, -#line 53 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str40,FC_CAPABILITY_OBJECT}, -#line 59 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str41,FC_NAMELANG_OBJECT}, -#line 28 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str42,FC_ASPECT_OBJECT}, -#line 19 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str43,FC_FAMILYLANG_OBJECT}, -#line 20 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str44,FC_STYLE_OBJECT}, - {-1}, -#line 61 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str46,FC_PRGNAME_OBJECT}, -#line 39 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str47,FC_INDEX_OBJECT}, -#line 21 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str48,FC_STYLELANG_OBJECT}, -#line 57 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str49,FC_DECORATIVE_OBJECT}, -#line 67 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str50,FC_VARIABLE_OBJECT}, -#line 65 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str51,FC_SYMBOL_OBJECT}, -#line 50 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str52,FC_CHARSET_OBJECT}, -#line 55 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str53,FC_EMBOLDEN_OBJECT}, -#line 47 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str54,FC_CHARWIDTH_OBJECT}, -#line 48 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str55,FC_CHAR_HEIGHT_OBJECT}, - {-1}, {-1}, {-1}, -#line 56 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str59,FC_EMBEDDED_BITMAP_OBJECT}, #line 58 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str60,FC_LCD_FILTER_OBJECT}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str27,FC_LCD_FILTER_OBJECT}, +#line 18 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str28,FC_FAMILY_OBJECT}, +#line 23 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str29,FC_FULLNAMELANG_OBJECT}, +#line 59 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str30,FC_NAMELANG_OBJECT}, +#line 46 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str31,FC_MINSPACE_OBJECT}, +#line 19 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str32,FC_FAMILYLANG_OBJECT}, +#line 26 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str33,FC_WIDTH_OBJECT}, +#line 44 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str34,FC_RGBA_OBJECT}, +#line 33 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str35,FC_HINT_STYLE_OBJECT}, +#line 45 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str36,FC_SCALE_OBJECT}, +#line 68 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str37,FC_FONT_HAS_HINT_OBJECT}, +#line 63 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str38,FC_POSTSCRIPT_NAME_OBJECT}, +#line 20 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str39,FC_STYLE_OBJECT}, +#line 64 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str40,FC_COLOR_OBJECT}, +#line 55 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str41,FC_EMBOLDEN_OBJECT}, +#line 67 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str42,FC_VARIABLE_OBJECT}, +#line 21 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str43,FC_STYLELANG_OBJECT}, +#line 29 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str44,FC_PIXEL_SIZE_OBJECT}, +#line 37 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str45,FC_GLOBAL_ADVANCE_OBJECT}, +#line 57 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str46,FC_DECORATIVE_OBJECT}, +#line 52 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str47,FC_FONTVERSION_OBJECT}, #line 35 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str68,FC_VERTICAL_LAYOUT_OBJECT} + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str48,FC_VERTICAL_LAYOUT_OBJECT}, +#line 53 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str49,FC_CAPABILITY_OBJECT}, +#line 66 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str50,FC_FONT_VARIATIONS_OBJECT}, +#line 40 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str51,FC_RASTERIZER_OBJECT}, +#line 54 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str52,FC_FONTFORMAT_OBJECT}, +#line 39 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str53,FC_INDEX_OBJECT}, +#line 60 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str54,FC_FONT_FEATURES_OBJECT}, +#line 65 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str55,FC_SYMBOL_OBJECT}, +#line 31 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str56,FC_FOUNDRY_OBJECT}, +#line 61 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str57,FC_PRGNAME_OBJECT}, + {-1}, {-1}, +#line 56 "fcobjshash.gperf" + {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str60,FC_EMBEDDED_BITMAP_OBJECT} }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
diff --git a/third_party/fontconfig/include/src/fcstdint.h b/third_party/fontconfig/include/src/fcstdint.h index 2db863eb..d95fafc 100644 --- a/third_party/fontconfig/include/src/fcstdint.h +++ b/third_party/fontconfig/include/src/fcstdint.h
@@ -1,8 +1,8 @@ #ifndef _FONTCONFIG_SRC_FCSTDINT_H #define _FONTCONFIG_SRC_FCSTDINT_H 1 #ifndef _GENERATED_STDINT_H -#define _GENERATED_STDINT_H "fontconfig 2.13.1" -/* generated using gnu compiler gcc (Debian 8.2.0-6) 8.2.0 */ +#define _GENERATED_STDINT_H "fontconfig 2.13.91" +/* generated using gnu compiler gcc (Debian 9.2.1-8) 9.2.1 20190909 */ #define _STDINT_HAVE_STDINT_H 1 #include <stdint.h> #endif
diff --git a/tools/binary_size/libsupersize/static/index.html b/tools/binary_size/libsupersize/static/index.html index 0dd1a05..3a737e28 100644 --- a/tools/binary_size/libsupersize/static/index.html +++ b/tools/binary_size/libsupersize/static/index.html
@@ -11,22 +11,102 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="theme-color" content="#4285f4"> <link href="https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,500" rel="stylesheet"> - <link rel="stylesheet" href="main.css"> - <link rel="stylesheet" href="options.css"> <style> body { - grid-template-columns: auto; + display: grid; + grid-template-rows: 64px 1fr; grid-template-areas: "appbar" "select"; + color: #3c4043; + font-family: "Roboto", sans-serif; } form { grid-area: 'select'; margin: auto; } +.appbar { + grid-area: appbar; + padding: 0 66px 0 48px; +} +.appbar-inner { + height: 100%; + padding: 0 66px 0 48px; + display: flex; + align-items: center; +} +.headline { + margin: 0; + font-family: "Google Sans", Arial, sans-serif; + color: #202124; + font-size: 22px; + flex: 1; +} +.select-wrapper { + position: relative; +} +.sel-big { + -webkit-appearance: none; + -moz-appearance: none; + font: inherit; + background: transparent; + border: 0; + padding: 20px 12px 13px; + width: 100%; + caret-color: #1a73e8; +} +.select-label { + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + height: 52px; + line-height: 20px; + padding: 0 12px; + font-size: 12px; + color: #5f6368; + border-bottom: 1px solid currentColor; + background: rgba(0, 0, 0, 0.04); +} +.select-label::after { + content: ''; + position: absolute; + top: calc(50% - 5px); + right: 4px; + margin: 5px 7px 5px 8px; + border-style: solid; + border-width: 5px 5px 0 5px; + border-color: currentColor transparent transparent transparent; + transition: transform 0.2s ease-out; +} +.sel-big:focus + .select-label { + color: #1a73e8; + bottom: -2px; + border-width: 2px; +} +.text-button { + padding: 0 8px; + height: 36px; + border-radius: 4px; + font-family: 'Google Sans', Arial, sans-serif; + font-weight: 500; + font-size: 14px; + background: #1a73e8; + color: white; +} +.text-button:hover { + background: #287ae6; + box-shadow: 0 1px 2px #3c40434d, 0 1px 3px 1px #3c404326; +} +.text-button:hover:focus { + background: #d2e3fc; +} +.text-button:focus, +.text-button:active { + background: #d2e3fce6; +} </style> <link rel="icon" href="favicon.ico" sizes="16x16 32x32 256x256" type="image/x-icon"> <script> - - const DO_NOT_DIFF = "Don't diff"; /** @@ -104,7 +184,6 @@ const selVersion1 = form.elements.namedItem('version1'); const selVersion2 = form.elements.namedItem('version2'); const btnOpen = form.querySelector('button[type="submit"]'); - const msgBadCompare = form.querySelector('.msg-bad-compare'); function channelIsMilestone() { // Returns: Whether channel is set to stable/beta (i.e. is a milestone) @@ -146,9 +225,9 @@ function updateSubmitButton() { if (channelIsMilestone()) { - submitButton.textContent = 'Open Official Build Report'; - } else { submitButton.textContent = 'Open Milestone Report'; + } else { + submitButton.textContent = 'Open Canary Report'; } } @@ -232,19 +311,18 @@ </head> <body> - <div class="scrim toggle-options" hidden></div> <header class="appbar"> <div class="appbar-inner"> <h1 class="headline">Super Size Tiger View</h1> </div> </header> - <table class="table center-text"> + <table style="margin:auto; text-align: center"> <tr> - <td class="form"> + <td style="width: 40%"> <form id="select-form"> - <h2 class="subhead">Channel: - <label><input type="radio" name="mode" value="canary" checked> canary</label> - <label><input type="radio" name="mode" value="stable/beta"> stable/beta</label> + <h2 style="font-size: 16px">Channel: + <label><input type="radio" name="mode" value="stable/beta" checked> Stable/Beta</label> + <label><input type="radio" name="mode" value="canary"> Canary</label> </h2> <p class="select-wrapper"> <select id="apk" class="sel-big" name="apk"></select> @@ -262,11 +340,10 @@ </p> <p class="select-wrapper"> - <button type="submit" class="text-button filled-button" id="submit-button"> + <button type="submit" class="text-button" id="submit-button"> Open Milestone Report </button> </p> - <div class="msg-bad-compare">Version 1 must be older than Version 2</div> <div style="margin:20pt 0 10pt"> <b>Note:</b> AndroidWebview.apk size information exists only for M71 and above.<br> </div> @@ -274,11 +351,10 @@ </td> </tr> <tr> - <td class="center-text" colspan=3> + <td style="text-align: center" colspan=3> <p>To upload your own .ndjson file, use the upload button within <a href="viewer.html">the viewer</a>.</p> </td> </tr> </table> </body> - </html>
diff --git a/tools/binary_size/libsupersize/static/options.css b/tools/binary_size/libsupersize/static/options.css index 789c30b7..f5275c7 100644 --- a/tools/binary_size/libsupersize/static/options.css +++ b/tools/binary_size/libsupersize/static/options.css
@@ -25,11 +25,6 @@ background: #00000050; } -/** Fix height to prevent vertical shift on view mode change. */ -#select-form { - min-height: 380px; -} - /** Options side panel */ .options { z-index: 5; /* Side panel layer */ @@ -238,9 +233,11 @@ /** <input type='checkbox' or 'radio'> elements */ input[type='checkbox'], input[type='radio'] { - margin: 4px 0; + position: absolute; + margin: 0; height: 18px; width: 18px; + opacity: 0; } .checkbox-wrapper, .radio-wrapper { @@ -318,16 +315,6 @@ opacity: 0; } -#select-form .msg-bad-compare { - color: #f00; - font-size: 0.7em; - margin-top: 5px; - visibility: hidden; -} -#select-form .msg-bad-compare.visible { - visibility: visible; -} - /** Tweaks for smaller screen sizes */ @media (max-width: 700px) { .show-options {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 051dc23..f022cf3 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -2569,6 +2569,7 @@ <int value="45" label="webcal:// App accepted and persisted"/> <int value="46" label="webcal:// App accepted and not persisted"/> <int value="47" label="webcal:// App rejected"/> + <int value="48" label="tel:// Device selected"/> </enum> <enum name="ArcIntentHandlerAction"> @@ -2584,18 +2585,17 @@ <int value="8" label="ARC app preferred and pressed"/> <int value="9" label="Progressive web app pressed"/> <int value="10" label="Error before showing picker"/> + <int value="12" label="External device pressed"/> </enum> <enum name="ArcIntentHandlerDestinationPlatform"> - <obsolete> - Deprecated as of 9/2018 (M71). - </obsolete> <summary> Defines ARC intent handler platforms to continue the navigation. </summary> <int value="0" label="ARC"/> <int value="1" label="Chrome"/> <int value="2" label="Progressive web app"/> + <int value="3" label="External device"/> </enum> <enum name="ArcIntentHelperOpenType"> @@ -24692,6 +24692,8 @@ <int value="3031" label="DelegateFocusNotFirstInFlatTree"/> <int value="3032" label="ThirdPartySharedWorker"/> <int value="3033" label="ThirdPartyBroadcastChannel"/> + <int value="3034" + label="MediaSourceGroupEndTimestampDecreaseWithinMediaSegment"/> </enum> <enum name="FeaturePolicyAllowlistType"> @@ -35233,6 +35235,7 @@ label="OmniboxUIExperimentShowPlaceholderWhenCaretShowing:disabled"/> <int value="-1454479680" label="FileHandlingAPI:enabled"/> <int value="-1454397907" label="OptimizationHints:disabled"/> + <int value="-1454264660" label="ProminentDarkModeActiveTabTitle:disabled"/> <int value="-1453647118" label="PasswordLeakDetection:disabled"/> <int value="-1451644187" label="OverviewSwipeToClose:enabled"/> <int value="-1450576851" label="OmniboxUIExperimentVerticalLayout:enabled"/> @@ -36274,6 +36277,7 @@ <int value="-79327236" label="ModeSpecificPowerButton:enabled"/> <int value="-78035185" label="custom_summary"/> <int value="-77872983" label="BookmarkAppsMac:disabled"/> + <int value="-77084779" label="ExperimentalFlingAnimation:enabled"/> <int value="-76953963" label="CloseTabSuggestionsStale:enabled"/> <int value="-76631048" label="disable-offline-auto-reload-visible-only"/> <int value="-76445689" label="WasmCodeCache:enabled"/> @@ -36535,6 +36539,7 @@ <int value="288012253" label="CrostiniFiles:enabled"/> <int value="288755982" label="AutofillEnableLocalCardMigrationForNonSyncUser:enabled"/> + <int value="291482671" label="ExperimentalFlingAnimation:disabled"/> <int value="292560715" label="ViewsCastDialog:disabled"/> <int value="293134455" label="AutofillSendBillingCustomerNumber:disabled"/> <int value="293996306" label="ArrayPrototypeValues:disabled"/> @@ -37182,6 +37187,7 @@ <int value="1192302892" label="gesture-typing"/> <int value="1192913630" label="OfflinePagesBackgroundLoading:disabled"/> <int value="1194496204" label="NewWallpaperPicker:enabled"/> + <int value="1195087468" label="ProminentDarkModeActiveTabTitle:enabled"/> <int value="1196644408" label="performance-monitor-gathering"/> <int value="1196834473" label="disable-smart-virtual-keyboard"/> <int value="1198839129" label="OfflinePagesLivePageSharing:enabled"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index bdd322e..3962696 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -33285,6 +33285,26 @@ </summary> </histogram> +<histogram name="Download.DownloadManager.CreationDelay" units="ms" + expires_after="M81"> + <owner>qinmin@chromium.org</owner> + <owner>dtrainor@chromium.org</owner> + <summary> + Records the delay of creating non-incognito download manager after the + download system is initialized. + </summary> +</histogram> + +<histogram name="Download.DownloadManager.MemoryUsage" units="KB" + expires_after="M81"> + <owner>qinmin@chromium.org</owner> + <owner>dtrainor@chromium.org</owner> + <summary> + Records the approximate memory usage from non-incognito download manager, + after all downloads are loaded. + </summary> +</histogram> + <histogram base="true" name="Download.DownloadSize" units="KB" expires_after="2020-01-26"> <!-- Name completed by histogram_suffixes name="Download.Parallelizable" --> @@ -34302,6 +34322,9 @@ <histogram name="Download.Service.Finish.ReportedHash" enum="BooleanIncludesHash" expires_after="2019-10-01"> + <obsolete> + Deprecated in 09/2019. + </obsolete> <owner>dtrainor@chromium.org</owner> <owner>xingliu@chromium.org</owner> <summary>
diff --git a/tools/perf/core/story_expectation_validator.py b/tools/perf/core/story_expectation_validator.py index fac0b065..8355ffa 100755 --- a/tools/perf/core/story_expectation_validator.py +++ b/tools/perf/core/story_expectation_validator.py
@@ -91,7 +91,7 @@ if ret: logging.error(msg) return ret - validate_tag_declaration_lists(test_expectations.tag_sets) + #validate_tag_declaration_lists(test_expectations.tag_sets) validate_story_names(benchmarks, test_expectations) validate_expectations_component_tags(test_expectations) return 0
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index 38bcc23..c67a68b 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -6,7 +6,8 @@ # android-kitkat ubuntu ] # tags: [ android-go android-low-end android-nexus-5 android-nexus-5x android-nexus-6 # android-pixel-2 desktop mobile ] -# tags: [ android-not-webview android-webview android-webview-google android-chromium reference ] +# tags: [ android-not-webview android-webview android-webview-google android-chromium +# reference release ] # results: [ Skip ] # conflicts_allowed: True
diff --git a/ui/aura/window_occlusion_tracker.cc b/ui/aura/window_occlusion_tracker.cc index 9993382..fe17588 100644 --- a/ui/aura/window_occlusion_tracker.cc +++ b/ui/aura/window_occlusion_tracker.cc
@@ -485,8 +485,10 @@ Window* window, bool is_occluded, bool is_parent_visible) { - const bool is_visible = WindowIsForcedVisible(window) || - (is_parent_visible && window->layer()->visible()); + const bool force_visible = WindowIsForcedVisible(window); + const bool is_visible = + force_visible || (is_parent_visible && window->layer()->visible()); + is_occluded = is_occluded && !force_visible; SetOccluded(window, is_occluded, is_visible, SkRegion()); for (Window* child_window : window->children()) SetWindowAndDescendantsAreOccluded(child_window, is_occluded, is_visible);
diff --git a/ui/aura/window_occlusion_tracker_unittest.cc b/ui/aura/window_occlusion_tracker_unittest.cc index d91dbca1..74f744cb 100644 --- a/ui/aura/window_occlusion_tracker_unittest.cc +++ b/ui/aura/window_occlusion_tracker_unittest.cc
@@ -2267,6 +2267,50 @@ parent_window->Show(); } +// Simulates a scenario in which a browser window is forced visible (e.g. while +// projecting) and its parent container (e.g. a virtual desks container) was +// hidden. Verifies that the browser window and its descendants remain visible +// from an occlusion stand point. +TEST_F(WindowOcclusionTrackerTest, ScopedForceVisibleHiddenContainer) { + std::unique_ptr<WindowOcclusionTracker::ScopedPause> + pause_occlusion_tracking = + std::make_unique<WindowOcclusionTracker::ScopedPause>(); + MockWindowDelegate* root_delegate = new MockWindowDelegate(); + Window* root = CreateTrackedWindow(root_delegate, gfx::Rect(0, 0, 100, 100)); + MockWindowDelegate* container_delegate = new MockWindowDelegate(); + Window* container = + CreateTrackedWindow(container_delegate, gfx::Rect(0, 0, 100, 100), root); + MockWindowDelegate* browser_delegate = new MockWindowDelegate(); + Window* browser = + CreateTrackedWindow(browser_delegate, gfx::Rect(0, 0, 10, 10), container); + MockWindowDelegate* webcontents_delegate = new MockWindowDelegate(); + Window* webcontents = CreateTrackedWindow(webcontents_delegate, + gfx::Rect(0, 0, 10, 10), browser); + root_delegate->set_expectation(Window::OcclusionState::VISIBLE); + container_delegate->set_expectation(Window::OcclusionState::VISIBLE); + browser_delegate->set_expectation(Window::OcclusionState::VISIBLE); + webcontents_delegate->set_expectation(Window::OcclusionState::VISIBLE); + pause_occlusion_tracking.reset(); + EXPECT_FALSE(root_delegate->is_expecting_call()); + EXPECT_FALSE(container_delegate->is_expecting_call()); + EXPECT_FALSE(browser_delegate->is_expecting_call()); + EXPECT_FALSE(webcontents_delegate->is_expecting_call()); + + WindowOcclusionTracker::ScopedForceVisible force_visible(browser); + container_delegate->set_expectation(Window::OcclusionState::HIDDEN); + container->Hide(); + EXPECT_FALSE(root_delegate->is_expecting_call()); + EXPECT_FALSE(container_delegate->is_expecting_call()); + EXPECT_FALSE(browser_delegate->is_expecting_call()); + EXPECT_FALSE(webcontents_delegate->is_expecting_call()); + + EXPECT_EQ(Window::OcclusionState::VISIBLE, webcontents->occlusion_state()); + EXPECT_TRUE(webcontents->TargetVisibility()); + + container_delegate->set_expectation(Window::OcclusionState::VISIBLE); + container->Show(); +} + TEST_F(WindowOcclusionTrackerTest, ComputeTargetOcclusionForWindow) { auto* window_a = CreateUntrackedWindow(gfx::Rect(0, 0, 10, 10)); CreateUntrackedWindow(gfx::Rect(9, 9, 5, 5));
diff --git a/ui/gfx/mojom/BUILD.gn b/ui/gfx/mojom/BUILD.gn index cf860b8..43f4c039 100644 --- a/ui/gfx/mojom/BUILD.gn +++ b/ui/gfx/mojom/BUILD.gn
@@ -17,6 +17,7 @@ "rrect_f.mojom", "selection_bound.mojom", "swap_result.mojom", + "swap_timings.mojom", "transform.mojom", ]
diff --git a/ui/gfx/mojom/swap_timings.mojom b/ui/gfx/mojom/swap_timings.mojom new file mode 100644 index 0000000..af51a0b5 --- /dev/null +++ b/ui/gfx/mojom/swap_timings.mojom
@@ -0,0 +1,13 @@ +// 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. + +module gfx.mojom; + +import "mojo/public/mojom/base/time.mojom"; + +// gfx::SwapTimings +struct SwapTimings { + mojo_base.mojom.TimeTicks swap_start; + mojo_base.mojom.TimeTicks swap_end; +};
diff --git a/ui/gfx/mojom/swap_timings.typemap b/ui/gfx/mojom/swap_timings.typemap new file mode 100644 index 0000000..8c23d6a --- /dev/null +++ b/ui/gfx/mojom/swap_timings.typemap
@@ -0,0 +1,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. + +mojom = "//ui/gfx/mojom/swap_timings.mojom" +public_headers = [ "//ui/gfx/swap_result.h" ] +traits_headers = [ "//ui/gfx/mojom/swap_timings_mojom_traits.h" ] +type_mappings = [ "gfx.mojom.SwapTimings=gfx::SwapTimings" ]
diff --git a/ui/gfx/mojom/swap_timings_mojom_traits.h b/ui/gfx/mojom/swap_timings_mojom_traits.h new file mode 100644 index 0000000..96ea989 --- /dev/null +++ b/ui/gfx/mojom/swap_timings_mojom_traits.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_GFX_MOJOM_SWAP_TIMINGS_MOJOM_TRAITS_H_ +#define UI_GFX_MOJOM_SWAP_TIMINGS_MOJOM_TRAITS_H_ + +#include "base/time/time.h" +#include "mojo/public/cpp/base/time_mojom_traits.h" +#include "ui/gfx/mojom/swap_timings.mojom-shared.h" +#include "ui/gfx/swap_result.h" + +namespace mojo { + +template <> +struct StructTraits<gfx::mojom::SwapTimingsDataView, gfx::SwapTimings> { + static base::TimeTicks swap_start(const gfx::SwapTimings& input) { + return input.swap_start; + } + + static base::TimeTicks swap_end(const gfx::SwapTimings& input) { + return input.swap_end; + } + + static bool Read(gfx::mojom::SwapTimingsDataView data, + gfx::SwapTimings* out) { + return data.ReadSwapStart(&out->swap_start) && + data.ReadSwapEnd(&out->swap_end); + } +}; + +} // namespace mojo + +#endif // UI_GFX_MOJOM_SWAP_TIMINGS_MOJOM_TRAITS_H_
diff --git a/ui/gfx/swap_result.h b/ui/gfx/swap_result.h index 8a13c5b..027a191 100644 --- a/ui/gfx/swap_result.h +++ b/ui/gfx/swap_result.h
@@ -25,6 +25,8 @@ // TODO(brianderson): Differentiate the concepts without introducing // dicontinuities in associated UMA data. base::TimeTicks swap_end; + + bool is_null() const { return swap_start.is_null() && swap_end.is_null(); } }; // Sent by ImageTransportSurfaces to their clients in response to a SwapBuffers.
diff --git a/ui/gfx/typemaps.gni b/ui/gfx/typemaps.gni index 499d1ca..d0e0e17f 100644 --- a/ui/gfx/typemaps.gni +++ b/ui/gfx/typemaps.gni
@@ -14,8 +14,9 @@ "//ui/gfx/mojom/overlay_transform.typemap", "//ui/gfx/mojom/presentation_feedback.typemap", "//ui/gfx/mojom/rrect_f.typemap", - "//ui/gfx/mojom/swap_result.typemap", "//ui/gfx/mojom/selection_bound.typemap", + "//ui/gfx/mojom/swap_result.typemap", + "//ui/gfx/mojom/swap_timings.typemap", "//ui/gfx/mojom/transform.typemap", "//ui/gfx/range/mojom/range.typemap", ]
diff --git a/ui/webui/resources/BUILD.gn b/ui/webui/resources/BUILD.gn index 708ed37..218abd0 100644 --- a/ui/webui/resources/BUILD.gn +++ b/ui/webui/resources/BUILD.gn
@@ -15,6 +15,7 @@ group("modulize") { deps = [ + "cr_components:polymer3_elements", "cr_elements:polymer3_elements", "js:modulize", ]
diff --git a/ui/webui/resources/cr_components/BUILD.gn b/ui/webui/resources/cr_components/BUILD.gn index 3773a9e..aab4ad52b 100644 --- a/ui/webui/resources/cr_components/BUILD.gn +++ b/ui/webui/resources/cr_components/BUILD.gn
@@ -8,9 +8,16 @@ deps = [ "certificate_manager:closure_compile", "managed_footnote:closure_compile", + "managed_footnote:closure_compile_module", ] if (is_chromeos) { deps += [ "chromeos:closure_compile" ] } } + +group("polymer3_elements") { + deps = [ + "managed_footnote:managed_footnote_module", + ] +}
diff --git a/ui/webui/resources/cr_components/cr_components_resources_v3.grdp b/ui/webui/resources/cr_components/cr_components_resources_v3.grdp new file mode 100644 index 0000000..270f9b0 --- /dev/null +++ b/ui/webui/resources/cr_components/cr_components_resources_v3.grdp
@@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<grit-part> + <include name="IDR_WEBUI_MANAGED_FOOTNOTE_M_JS" + file="${root_gen_dir}/ui/webui/resources/cr_components/managed_footnote/managed_footnote.m.js" + use_base_dir="false" + type="BINDATA" + compress="gzip" /> +</grit-part>
diff --git a/ui/webui/resources/cr_components/managed_footnote/BUILD.gn b/ui/webui/resources/cr_components/managed_footnote/BUILD.gn index cc53674..1c5ae91c 100644 --- a/ui/webui/resources/cr_components/managed_footnote/BUILD.gn +++ b/ui/webui/resources/cr_components/managed_footnote/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//third_party/closure_compiler/compile_js.gni") +import("//tools/polymer/polymer.gni") js_type_check("closure_compile") { deps = [ @@ -17,3 +18,34 @@ "//ui/webui/resources/js:web_ui_listener_behavior", ] } + +polymer_modulizer("managed_footnote") { + js_file = "managed_footnote.js" + html_file = "managed_footnote.html" + html_type = "dom-module" + auto_imports = [ + "ui/webui/resources/html/web_ui_listener_behavior.html|WebUIListenerBehavior", + "ui/webui/resources/html/i18n_behavior.html|I18nBehavior", + "ui/webui/resources/html/load_time_data.html|loadTimeData", + ] +} + +js_type_check("closure_compile_module") { + is_polymer3 = true + deps = [ + ":managed_footnote.m", + ] +} + +js_library("managed_footnote.m") { + sources = [ + "$root_gen_dir/ui/webui/resources/cr_components/managed_footnote/managed_footnote.m.js", + ] + deps = [ + "//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", + ] + extra_deps = [ ":managed_footnote_module" ] +}
diff --git a/ui/webui/resources/webui_resources.grd b/ui/webui/resources/webui_resources.grd index f1391b0..c34f376 100644 --- a/ui/webui/resources/webui_resources.grd +++ b/ui/webui/resources/webui_resources.grd
@@ -126,6 +126,7 @@ </if> <if expr="not is_android and not is_ios"> + <part file="cr_components/cr_components_resources_v3.grdp" /> <part file="cr_elements_resources_v3.grdp" /> <part file="cr_polymer_resources_v3.grdp" /> </if>